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

; 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] }
%"struct.spirv_cross::SPIRType" = type { %"struct.spirv_cross::IVariant.base", i32, i32, i32, i32, i32, %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.284", i32, i8, i8, i32, %"class.spirv_cross::SmallVector.227", %"class.spirv_cross::SmallVector.92", %"struct.spirv_cross::SPIRType::ImageType", %"class.spirv_cross::TypedID.281", %"class.spirv_cross::TypedID.281", %"class.std::unordered_set.165" }
%"struct.spirv_cross::IVariant.base" = type <{ ptr, %"class.spirv_cross::TypedID.280" }>
%"class.spirv_cross::TypedID.280" = type { i32 }
%"class.spirv_cross::SmallVector.284" = type { %"class.spirv_cross::VectorView.285", i64, %"class.spirv_cross::AlignedBuffer.286" }
%"class.spirv_cross::VectorView.285" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.286" = 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.281", i32, i8, i8, i8, i32, i32, i32 }
%"class.spirv_cross::TypedID.281" = 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.std::__detail::_Node_iterator.364" = type { %"struct.std::__detail::_Node_iterator_base.365" }
%"struct.std::__detail::_Node_iterator_base.365" = type { ptr }
%"struct.spirv_cross::AccessChainMeta" = type { i32, i8, i8, i8, i8, i8, i8, i8, i32 }
%"struct.std::pair.362" = type <{ %"struct.std::__detail::_Node_iterator.364", i8, [7 x i8] }>
%"class.spirv_cross::SmallVector.27" = type { %"class.spirv_cross::VectorView.28", i64, %"class.spirv_cross::AlignedBuffer.29" }
%"class.spirv_cross::VectorView.28" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.29" = type { [256 x i8] }
%"class.spirv_cross::TypedID.282" = type { i32 }
%"struct.spirv_cross::EmbeddedInstruction" = type { %"struct.spirv_cross::Instruction", %"class.spirv_cross::SmallVector.92" }
%"struct.spirv_cross::Instruction" = type { i16, i16, i32, i32 }
%"struct.spirv_cross::SPIRConstant" = type { %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.281", %"struct.spirv_cross::SPIRConstant::ConstantMatrix", i8, i8, i8, %"class.spirv_cross::SmallVector.310", %"class.std::__cxx11::basic_string" }
%"struct.spirv_cross::SPIRConstant::ConstantMatrix" = type { [4 x %"struct.spirv_cross::SPIRConstant::ConstantVector"], [4 x %"class.spirv_cross::TypedID.280"], i32, [4 x i8] }
%"struct.spirv_cross::SPIRConstant::ConstantVector" = type <{ [4 x %"union.spirv_cross::SPIRConstant::Constant"], [4 x %"class.spirv_cross::TypedID.280"], i32, [4 x i8] }>
%"union.spirv_cross::SPIRConstant::Constant" = type { i64 }
%"class.spirv_cross::SmallVector.310" = type { %"class.spirv_cross::VectorView.311", i64, %"class.spirv_cross::AlignedBuffer.312" }
%"class.spirv_cross::VectorView.311" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.312" = type { [32 x i8] }
%"class.std::allocator.71" = type { i8 }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%class.anon.394 = type { ptr }
%"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.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_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::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_set" = type { %"class.std::_Hashtable.74" }
%"class.std::_Hashtable.74" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.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 }
%"struct.spirv_cross::SPIRExpression" = type <{ %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.280", %"class.std::__cxx11::basic_string", %"class.spirv_cross::TypedID.281", %"class.spirv_cross::TypedID.280", 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::IVariant" = type <{ ptr, %"class.spirv_cross::TypedID.280", [4 x i8] }>
%"struct.spirv_cross::SPIRVariable" = type { %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.281", i32, i32, %"class.spirv_cross::TypedID.280", %"class.spirv_cross::TypedID.282", %"class.spirv_cross::SmallVector.92", i8, i8, %"class.spirv_cross::TypedID.280", %"class.spirv_cross::SmallVector.7", i8, i8, i8, i8, i32, %"class.spirv_cross::TypedID.283", i8, i8, i8, ptr }
%"class.spirv_cross::TypedID.283" = type { i32 }
%"struct.spirv_cross::SPIRFunction" = type <{ %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.281", %"class.spirv_cross::TypedID.281", [4 x i8], %"class.spirv_cross::SmallVector.298", %"class.spirv_cross::SmallVector.298", %"class.spirv_cross::SmallVector.293", %"class.spirv_cross::TypedID.283", [4 x i8], %"class.spirv_cross::SmallVector.301", %"class.spirv_cross::SmallVector.304", %"struct.spirv_cross::SPIRFunction::EntryLine", %"class.spirv_cross::SmallVector.307", %"class.spirv_cross::SmallVector.307", %"class.spirv_cross::SmallVector.7", i8, i8, i8, [5 x i8] }>
%"class.spirv_cross::SmallVector.298" = type { %"class.spirv_cross::VectorView.299", i64, %"class.spirv_cross::AlignedBuffer.300" }
%"class.spirv_cross::VectorView.299" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.300" = type { [160 x i8] }
%"class.spirv_cross::SmallVector.293" = type { %"class.spirv_cross::VectorView.294", i64, %"class.spirv_cross::AlignedBuffer.295" }
%"class.spirv_cross::VectorView.294" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.295" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.301" = type { %"class.spirv_cross::VectorView.302", i64, %"class.spirv_cross::AlignedBuffer.303" }
%"class.spirv_cross::VectorView.302" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.303" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.304" = type { %"class.spirv_cross::VectorView.305", i64, %"class.spirv_cross::AlignedBuffer.306" }
%"class.spirv_cross::VectorView.305" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.306" = type { [128 x i8] }
%"struct.spirv_cross::SPIRFunction::EntryLine" = type { i32, i32 }
%"class.spirv_cross::SmallVector.307" = type <{ %"class.spirv_cross::VectorView.308", i64, [8 x i8] }>
%"class.spirv_cross::VectorView.308" = type { ptr, i64 }
%"struct.spirv_cross::SPIRFunction::Parameter" = type <{ %"class.spirv_cross::TypedID.281", %"class.spirv_cross::TypedID.280", i32, i32, i8, [3 x i8] }>
%"struct.spirv_cross::SPIRFunction::CombinedImageSamplerParameter" = type <{ %"class.spirv_cross::TypedID.282", %"class.spirv_cross::TypedID.282", %"class.spirv_cross::TypedID.282", i8, i8, i8, i8 }>
%"struct.spirv_cross::PlsRemap" = type { i32, i32 }
%"struct.spirv_cross::SPIREntryPoint" = type <{ %"class.spirv_cross::TypedID", [4 x i8], %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.spirv_cross::SmallVector.293", %"class.spirv_cross::Bitset", %"struct.spirv_cross::SPIREntryPoint::WorkgroupSize", i32, i32, i32, i32, i8, [3 x i8] }>
%"struct.spirv_cross::SPIREntryPoint::WorkgroupSize" = type { i32, i32, i32, i32, i32, i32, i32 }
%"struct.spirv_cross::SPIRExtension" = type { %"struct.spirv_cross::IVariant.base", i32 }
%"struct.spirv_cross::SPIRString" = type { %"struct.spirv_cross::IVariant.base", %"class.std::__cxx11::basic_string" }

@.str = external hidden unnamed_addr constant [3 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [90 x i8], align 1
@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.26 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.61 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.135 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.177 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.298 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.307 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.335 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.343 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.344 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.349 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.350 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.352 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.353 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.354 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.355 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.356 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.357 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.358 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.359 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.360 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.361 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.362 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.368 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.369 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.370 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.371 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.372 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.373 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.375 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.380 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.394 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.395 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.396 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.397 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.398 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.400 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.401 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.402 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.403 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.404 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.405 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.406 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.407 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.412 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.420 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.421 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.424 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.425 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.437 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.445 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.446 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.447 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.490 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.492 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.493 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.495 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.498 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.509 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.718 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.719 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.720 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.751 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.756 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.760 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.772 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.776 = external hidden unnamed_addr constant [2 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.955 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.956 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.957 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.958 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.959 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.960 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.961 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.962 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.963 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.964 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.965 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.966 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.967 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.968 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.969 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.970 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.971 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.972 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.973 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.974 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.975 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.976 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.977 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1014 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1016 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1061 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.1089 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1095 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1096 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1137 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.1210 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.1383 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.1384 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1385 = external hidden unnamed_addr constant [27 x i8], align 1
@__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE = external hidden unnamed_addr constant [78 x i8], align 1
@.str.1386 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.1387 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.1388 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1389 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.1390 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.1391 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.1392 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1393 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.1394 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1395 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.1396 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1397 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1398 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1399 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1400 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.1401 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.1402 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.1403 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.1404 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.1405 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1406 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1407 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.1408 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.1409 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.1410 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.1411 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.1412 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1413 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.1414 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.1415 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.1416 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.1417 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.1418 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.1419 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.1420 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.1421 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.1422 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.1423 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.1424 = external hidden unnamed_addr constant [61 x i8], align 1
@.str.1425 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.1426 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.1427 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.1428 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.1429 = external hidden unnamed_addr constant [70 x i8], align 1
@.str.1430 = external hidden unnamed_addr constant [70 x i8], align 1
@.str.1431 = external hidden unnamed_addr constant [78 x i8], align 1
@.str.1432 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.1433 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.1434 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.1435 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.1436 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.1437 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1438 = external hidden unnamed_addr constant [79 x i8], align 1
@.str.1439 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.1440 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.1441 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.1442 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1443 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.1444 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.1445 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.1446 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.1447 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.1448 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.1449 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.1450 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.1451 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.1452 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.1453 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.1454 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.1455 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.1456 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1457 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.1458 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.1459 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.1460 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.1461 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.1462 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.1463 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.1464 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.1465 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.1466 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.1467 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.1468 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.1469 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.1470 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1471 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.1472 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.1473 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.1474 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.1475 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.1476 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.1477 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.1478 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.1479 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.1480 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.1481 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.1482 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.1483 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.1484 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.1485 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.1486 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.1487 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1488 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1489 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1490 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1491 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1492 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1493 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.1494 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.1495 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.1496 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.1497 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.1498 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.1499 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.1500 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.1501 = external hidden unnamed_addr constant [64 x i8], align 1
@.str.1502 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.1503 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.1504 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.1505 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.1506 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.1507 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.1508 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.1509 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.1510 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.1511 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.1512 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.1513 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.1514 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1515 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.1516 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.1517 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.1518 = external hidden unnamed_addr constant [66 x i8], align 1
@.str.1519 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.1520 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.1521 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.1522 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.1523 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.1524 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.1525 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.1526 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.1527 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.1528 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.1529 = external hidden unnamed_addr constant [75 x i8], align 1
@.str.1530 = external hidden unnamed_addr constant [75 x i8], align 1
@.str.1531 = external hidden unnamed_addr constant [69 x i8], align 1
@.str.1532 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.1533 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.1534 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.1535 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.1536 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.1537 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.1538 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.1539 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.1540 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1541 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.1542 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.1543 = external hidden unnamed_addr constant [21 x i8], align 1

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN11spirv_cross12CompilerGLSL14vector_swizzleEii(i32 noundef, i32 noundef) #1 align 2

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

declare ptr @__cxa_allocate_exception(i64)

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64), i32 noundef) #6 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL12is_legacy_esEv(ptr noundef nonnull align 8 dereferenceable(9848)) #7 align 2

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL13type_is_emptyERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(336)) #1 align 2

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

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 i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4)) #1 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL17is_legacy_desktopEv(ptr noundef nonnull align 8 dereferenceable(9848)) #7 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848)) #7 align 2

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

; 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) #8

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32)) #1 align 2

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

declare noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920), 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 #1 align 2

; 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 uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind noalias 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) #3 align 2

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL13remap_swizzleERKNS_8SPIRTypeEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind noalias 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)) #3 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN11spirv_cross12CompilerGLSL16index_to_swizzleEj(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) #1 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local 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) #3 align 2

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

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

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_cross8Compiler23get_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef, i32 noundef) #5

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL30convert_non_uniform_expressionERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32), i32 noundef) #3 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local ptr @_ZSt3endISt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(56)) #7

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionERKNS_8SPIRTypeENS1_8BaseTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind noalias 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)) #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL39emit_uninitialized_temporary_expressionEjj(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i32 noundef) #3 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef) #7

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL24binary_op_bitcast_helperERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_RNS_8SPIRType8BaseTypeEjjb(ptr dead_on_unwind noalias 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) #3 align 2

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

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

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

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

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

; Function Attrs: 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)) #3 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNSt8__detaileqERKNS_19_Node_iterator_baseIjLb0EEES3_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #1

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

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

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_cross12CompilerGLSL18emit_unary_op_castEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i32 noundef, i32 noundef, ptr noundef) #3 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL23emit_unrolled_binary_opEjjjjPKcbNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, i1 noundef zeroext, i32 noundef) #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local 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) #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEcRS6_cEEES6_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(1), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) #3

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local 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) #3 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local 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) #3 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL24emit_binary_func_op_castEjjjjPKcNS_8SPIRType8BaseTypeEb(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, i32 noundef, i1 noundef zeroext) #3 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local 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) #3 align 2

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL32emit_sparse_feedback_temporariesEjjRjS1_(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i32 noundef, ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #3 align 2

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK11spirv_cross12CompilerGLSL21get_remapped_spirv_opEN3spv2OpE(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) #1 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZNK11spirv_cross12CompilerGLSL33get_integer_width_for_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 4 dereferenceable(12)) #3 align 2

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL29register_impure_function_callEv(ptr noundef nonnull align 8 dereferenceable(9848)) #3 align 2

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 4 dereferenceable(12) %1) unnamed_addr #3 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 i8, align 1
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i8, align 1
  %16 = alloca %"struct.std::__detail::_Node_iterator.364", align 8
  %17 = alloca %"struct.std::__detail::_Node_iterator.364", align 8
  %18 = alloca i8, align 1
  %19 = alloca i8, align 1
  %20 = alloca ptr, align 8
  %21 = alloca %"class.std::__cxx11::basic_string", align 8
  %22 = alloca i8, align 1
  %23 = alloca ptr, align 8
  %24 = alloca i32, align 4
  %25 = alloca i8, align 1
  %26 = alloca %"class.std::__cxx11::basic_string", align 8
  %27 = alloca %"class.std::__cxx11::basic_string", align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca %"class.std::__cxx11::basic_string", align 8
  %31 = alloca %"class.std::__cxx11::basic_string", align 8
  %32 = alloca %"class.spirv_cross::TypedID.280", align 4
  %33 = alloca i8, align 1
  %34 = alloca i32, align 4
  %35 = alloca %"class.spirv_cross::TypedID.281", align 4
  %36 = alloca %"class.spirv_cross::TypedID.280", align 4
  %37 = alloca i8, align 1
  %38 = alloca ptr, align 8
  %39 = alloca ptr, align 8
  %40 = alloca %"struct.spirv_cross::AccessChainMeta", align 4
  %41 = alloca i8, align 1
  %42 = alloca ptr, align 8
  %43 = alloca %"class.std::__cxx11::basic_string", align 8
  %44 = alloca i8, align 1
  %45 = alloca ptr, align 8
  %46 = alloca i8, align 1
  %47 = alloca ptr, align 8
  %48 = alloca %"class.spirv_cross::TypedID.280", align 4
  %49 = alloca %"class.spirv_cross::TypedID.280", align 4
  %50 = alloca %"class.spirv_cross::TypedID.280", align 4
  %51 = alloca %"class.spirv_cross::TypedID.280", align 4
  %52 = alloca %"struct.std::pair.362", align 8
  %53 = alloca %"struct.std::pair.362", align 8
  %54 = alloca i32, align 4
  %55 = alloca ptr, align 8
  %56 = alloca %"class.spirv_cross::TypedID.280", align 4
  %57 = alloca %"class.spirv_cross::TypedID.280", align 4
  %58 = alloca i32, align 4
  %59 = alloca i32, align 4
  %60 = alloca %"class.std::__cxx11::basic_string", align 8
  %61 = alloca %"class.spirv_cross::TypedID.280", align 4
  %62 = alloca %"class.std::__cxx11::basic_string", align 8
  %63 = alloca %"class.std::__cxx11::basic_string", align 8
  %64 = alloca i8, align 1
  %65 = alloca i32, align 4
  %66 = alloca i32, align 4
  %67 = alloca i32, align 4
  %68 = alloca ptr, align 8
  %69 = alloca ptr, align 8
  %70 = alloca ptr, align 8
  %71 = alloca i8, align 1
  %72 = alloca i8, align 1
  %73 = alloca i8, align 1
  %74 = alloca i8, align 1
  %75 = alloca i32, align 4
  %76 = alloca %"class.std::__cxx11::basic_string", align 8
  %77 = alloca %"class.spirv_cross::SmallVector.27", 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 i32, align 4
  %85 = alloca %"class.std::__cxx11::basic_string", align 8
  %86 = alloca ptr, align 8
  %87 = alloca ptr, align 8
  %88 = alloca ptr, align 8
  %89 = alloca ptr, align 8
  %90 = alloca %"class.spirv_cross::TypedID.282", align 4
  %91 = alloca %"class.spirv_cross::TypedID.282", align 4
  %92 = alloca %"class.std::__cxx11::basic_string", align 8
  %93 = alloca %"class.spirv_cross::TypedID.282", align 4
  %94 = alloca %"class.spirv_cross::TypedID.282", align 4
  %95 = alloca %"class.std::__cxx11::basic_string", align 8
  %96 = alloca i8, align 1
  %97 = alloca %"struct.std::__detail::_Node_iterator.364", align 8
  %98 = alloca %"struct.std::__detail::_Node_iterator.364", align 8
  %99 = alloca %"class.std::__cxx11::basic_string", align 8
  %100 = alloca i8, align 1
  %101 = alloca i32, align 4
  %102 = alloca i32, align 4
  %103 = alloca i32, align 4
  %104 = alloca ptr, align 8
  %105 = alloca i8, align 1
  %106 = alloca i32, align 4
  %107 = alloca ptr, align 8
  %108 = alloca ptr, align 8
  %109 = alloca i8, align 1
  %110 = alloca i8, align 1
  %111 = alloca i8, align 1
  %112 = alloca i32, align 4
  %113 = alloca i32, align 4
  %114 = alloca %"class.std::__cxx11::basic_string", align 8
  %115 = alloca i8, align 1
  %116 = alloca %"class.std::__cxx11::basic_string", align 8
  %117 = alloca %"class.std::__cxx11::basic_string", align 8
  %118 = alloca %"class.std::__cxx11::basic_string", align 8
  %119 = alloca %"class.std::__cxx11::basic_string", align 8
  %120 = alloca %"class.std::__cxx11::basic_string", align 8
  %121 = alloca %"class.std::__cxx11::basic_string", align 8
  %122 = alloca %"class.std::__cxx11::basic_string", align 8
  %123 = alloca %"class.std::__cxx11::basic_string", align 8
  %124 = alloca %"class.std::__cxx11::basic_string", align 8
  %125 = alloca %"class.std::__cxx11::basic_string", align 8
  %126 = alloca %"class.std::__cxx11::basic_string", align 8
  %127 = alloca i32, align 4
  %128 = alloca i32, align 4
  %129 = alloca i32, align 4
  %130 = alloca i32, align 4
  %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 i8, align 1
  %137 = alloca %"class.std::__cxx11::basic_string", align 8
  %138 = alloca %"class.std::__cxx11::basic_string", align 8
  %139 = alloca i32, align 4
  %140 = alloca i32, align 4
  %141 = alloca %"class.std::__cxx11::basic_string", align 8
  %142 = alloca i32, align 4
  %143 = alloca i32, align 4
  %144 = alloca ptr, align 8
  %145 = alloca i8, align 1
  %146 = alloca %"struct.std::__detail::_Node_iterator.364", align 8
  %147 = alloca %"struct.std::__detail::_Node_iterator.364", align 8
  %148 = alloca ptr, align 8
  %149 = alloca i8, align 1
  %150 = alloca %"struct.spirv_cross::AccessChainMeta", align 4
  %151 = alloca ptr, align 8
  %152 = alloca ptr, align 8
  %153 = alloca %"class.std::__cxx11::basic_string", align 8
  %154 = alloca %"class.std::__cxx11::basic_string", align 8
  %155 = alloca %"class.spirv_cross::TypedID.280", align 4
  %156 = alloca %"class.spirv_cross::TypedID.280", align 4
  %157 = alloca %"class.std::__cxx11::basic_string", align 8
  %158 = alloca %"class.spirv_cross::TypedID.280", align 4
  %159 = alloca i32, align 4
  %160 = alloca i32, align 4
  %161 = alloca i32, align 4
  %162 = alloca i32, align 4
  %163 = alloca ptr, align 8
  %164 = alloca i8, align 1
  %165 = alloca %"struct.std::pair.362", align 8
  %166 = alloca %"class.spirv_cross::TypedID.280", align 4
  %167 = alloca %"class.spirv_cross::TypedID.280", align 4
  %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 i8, align 1
  %172 = alloca %"struct.std::pair.362", align 8
  %173 = alloca %"struct.std::pair.362", 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 i8, align 1
  %178 = alloca %"class.std::__cxx11::basic_string", align 8
  %179 = alloca %"class.std::__cxx11::basic_string", align 8
  %180 = alloca i32, align 4
  %181 = alloca i32, align 4
  %182 = alloca ptr, align 8
  %183 = alloca i32, align 4
  %184 = alloca i32, align 4
  %185 = alloca %"struct.spirv_cross::EmbeddedInstruction", align 8
  %186 = alloca %"struct.spirv_cross::EmbeddedInstruction", align 8
  %187 = alloca i32, align 4
  %188 = alloca i32, align 4
  %189 = alloca i32, align 4
  %190 = alloca %"class.spirv_cross::SmallVector.92", align 8
  %191 = alloca i32, align 4
  %192 = alloca i32, align 4
  %193 = alloca i32, align 4
  %194 = alloca i8, align 1
  %195 = alloca ptr, align 8
  %196 = alloca ptr, align 8
  %197 = alloca ptr, align 8
  %198 = alloca %"class.spirv_cross::TypedID.280", align 4
  %199 = alloca ptr, align 8
  %200 = alloca %"class.spirv_cross::TypedID.280", align 4
  %201 = alloca %"class.std::__cxx11::basic_string", align 8
  %202 = alloca ptr, align 8
  %203 = alloca %"class.std::__cxx11::basic_string", align 8
  %204 = alloca ptr, align 8
  %205 = alloca %"class.spirv_cross::TypedID.280", align 4
  %206 = alloca ptr, align 8
  %207 = alloca i32, align 4
  %208 = alloca i32, align 4
  %209 = alloca i32, align 4
  %210 = alloca i32, align 4
  %211 = alloca ptr, align 8
  %212 = alloca ptr, align 8
  %213 = alloca i8, align 1
  %214 = alloca i32, align 4
  %215 = alloca %"class.std::__cxx11::basic_string", align 8
  %216 = alloca i8, align 1
  %217 = alloca i8, align 1
  %218 = alloca %"class.spirv_cross::SmallVector.27", align 8
  %219 = alloca i32, align 4
  %220 = alloca %"struct.spirv_cross::SPIRConstant", align 8
  %221 = alloca %"class.spirv_cross::TypedID.280", align 4
  %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 %"class.std::__cxx11::basic_string", align 8
  %226 = alloca %"class.std::__cxx11::basic_string", align 8
  %227 = alloca %"class.std::__cxx11::basic_string", align 8
  %228 = alloca %"class.std::__cxx11::basic_string", align 8
  %229 = alloca i32, align 4
  %230 = alloca ptr, align 8
  %231 = alloca i32, align 4
  %232 = alloca i32, align 4
  %233 = alloca i32, align 4
  %234 = alloca ptr, align 8
  %235 = alloca %"class.std::__cxx11::basic_string", align 8
  %236 = alloca %"class.std::__cxx11::basic_string", align 8
  %237 = alloca i32, align 4
  %238 = alloca %"class.std::__cxx11::basic_string", 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 i32, align 4
  %243 = alloca i32, align 4
  %244 = alloca i32, align 4
  %245 = alloca ptr, 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 i8, align 1
  %256 = alloca ptr, align 8
  %257 = alloca ptr, 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 i8, align 1
  %264 = alloca ptr, align 8
  %265 = alloca ptr, 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 i8, align 1
  %271 = alloca ptr, align 8
  %272 = alloca i32, align 4
  %273 = alloca i32, align 4
  %274 = alloca i32, align 4
  %275 = alloca i32, align 4
  %276 = alloca ptr, align 8
  %277 = alloca %"class.std::__cxx11::basic_string", align 8
  %278 = alloca i32, align 4
  %279 = alloca %"class.std::__cxx11::basic_string", align 8
  %280 = alloca %"class.std::__cxx11::basic_string", align 8
  %281 = alloca i32, align 4
  %282 = alloca i32, align 4
  %283 = alloca i32, align 4
  %284 = alloca i8, align 1
  %285 = alloca ptr, align 8
  %286 = alloca i8, align 1
  %287 = alloca ptr, align 8
  %288 = alloca %"class.std::__cxx11::basic_string", align 8
  %289 = alloca i32, align 4
  %290 = alloca i32, align 4
  %291 = alloca i32, align 4
  %292 = alloca i32, align 4
  %293 = alloca ptr, align 8
  %294 = alloca i8, align 1
  %295 = alloca %"class.std::__cxx11::basic_string", align 8
  %296 = alloca %"class.std::__cxx11::basic_string", align 8
  %297 = alloca %"struct.spirv_cross::SPIRType", align 8
  %298 = alloca %"class.std::__cxx11::basic_string", align 8
  %299 = alloca %"class.std::__cxx11::basic_string", align 8
  %300 = alloca %"class.std::__cxx11::basic_string", align 8
  %301 = alloca i8, align 1
  %302 = alloca i8, align 1
  %303 = alloca %"class.std::__cxx11::basic_string", align 8
  %304 = alloca %"class.std::__cxx11::basic_string", align 8
  %305 = alloca i8, align 1
  %306 = alloca i8, align 1
  %307 = alloca i32, align 4
  %308 = alloca i32, align 4
  %309 = alloca i32, align 4
  %310 = alloca i32, align 4
  %311 = alloca ptr, align 8
  %312 = alloca ptr, align 8
  %313 = alloca %"class.std::__cxx11::basic_string", align 8
  %314 = alloca %"class.std::__cxx11::basic_string", align 8
  %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 i32, align 4
  %320 = alloca i32, align 4
  %321 = alloca i32, align 4
  %322 = alloca i32, align 4
  %323 = alloca ptr, align 8
  %324 = alloca ptr, 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 i32, align 4
  %332 = alloca i32, align 4
  %333 = alloca i32, align 4
  %334 = alloca i32, align 4
  %335 = alloca i32, align 4
  %336 = alloca i32, align 4
  %337 = alloca i32, align 4
  %338 = alloca i32, align 4
  %339 = alloca i8, align 1
  %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 ptr, align 8
  %347 = alloca %"struct.spirv_cross::SPIRType", 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 i32, align 4
  %356 = alloca i32, align 4
  %357 = alloca ptr, align 8
  %358 = alloca i32, align 4
  %359 = alloca i32, align 4
  %360 = alloca ptr, align 8
  %361 = alloca ptr, align 8
  %362 = alloca i32, align 4
  %363 = alloca i32, align 4
  %364 = alloca i32, align 4
  %365 = alloca i32, align 4
  %366 = alloca i32, align 4
  %367 = alloca i32, align 4
  %368 = alloca i32, align 4
  %369 = alloca ptr, align 8
  %370 = alloca ptr, align 8
  %371 = alloca %"class.std::__cxx11::basic_string", align 8
  %372 = alloca i32, align 4
  %373 = alloca i32, align 4
  %374 = alloca ptr, align 8
  %375 = alloca %"struct.spirv_cross::SPIRType", align 8
  %376 = alloca ptr, align 8
  %377 = alloca %"class.std::__cxx11::basic_string", align 8
  %378 = alloca i32, align 4
  %379 = alloca i32, align 4
  %380 = alloca %"class.std::__cxx11::basic_string", align 8
  %381 = alloca i32, align 4
  %382 = alloca i32, align 4
  %383 = alloca i32, align 4
  %384 = alloca %"class.std::__cxx11::basic_string", align 8
  %385 = alloca i32, align 4
  %386 = alloca i32, align 4
  %387 = alloca i32, align 4
  %388 = alloca %"class.std::__cxx11::basic_string", align 8
  %389 = alloca ptr, 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 %"class.std::__cxx11::basic_string", align 8
  %398 = alloca %"class.std::__cxx11::basic_string", align 8
  %399 = alloca %"class.std::__cxx11::basic_string", align 8
  %400 = alloca %"class.std::__cxx11::basic_string", align 8
  %401 = alloca %"class.std::__cxx11::basic_string", align 8
  %402 = alloca %"class.std::__cxx11::basic_string", align 8
  %403 = alloca %"class.std::__cxx11::basic_string", align 8
  %404 = alloca %"class.std::__cxx11::basic_string", align 8
  %405 = alloca %"class.std::allocator.71", align 1
  %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::allocator.71", align 1
  %410 = alloca %"class.std::__cxx11::basic_string", align 8
  %411 = alloca %"class.std::allocator.71", align 1
  %412 = alloca %"class.std::__cxx11::basic_string", align 8
  %413 = alloca %"class.std::allocator.71", align 1
  %414 = alloca %"class.std::__cxx11::basic_string", align 8
  %415 = alloca %"class.std::allocator.71", align 1
  %416 = alloca %"class.std::__cxx11::basic_string", align 8
  %417 = alloca %"class.std::allocator.71", align 1
  %418 = alloca %"class.std::__cxx11::basic_string", align 8
  %419 = alloca %"class.std::allocator.71", align 1
  %420 = alloca %"class.std::__cxx11::basic_string", align 8
  %421 = alloca %"class.std::allocator.71", align 1
  %422 = alloca i32, align 4
  %423 = alloca i32, align 4
  %424 = alloca i32, align 4
  %425 = alloca i32, align 4
  %426 = alloca i32, align 4
  %427 = alloca ptr, align 8
  %428 = alloca i32, align 4
  %429 = alloca i32, align 4
  %430 = alloca i32, align 4
  %431 = alloca i32, align 4
  %432 = alloca i32, align 4
  %433 = alloca ptr, align 8
  %434 = alloca ptr, align 8
  %435 = alloca %"struct.std::pair.362", align 8
  %436 = alloca i8, align 1
  %437 = alloca i8, align 1
  %438 = alloca ptr, align 8
  %439 = alloca ptr, align 8
  %440 = alloca %"class.std::__cxx11::basic_string", align 8
  %441 = alloca %"class.std::__cxx11::basic_string", align 8
  %442 = alloca i32, align 4
  %443 = alloca i32, align 4
  %444 = alloca ptr, align 8
  %445 = alloca %"class.std::__cxx11::basic_string", align 8
  %446 = alloca %"class.std::__cxx11::basic_string", align 8
  %447 = alloca %"struct.std::pair.362", align 8
  %448 = alloca ptr, align 8
  %449 = alloca i8, align 1
  %450 = alloca i8, align 1
  %451 = alloca ptr, align 8
  %452 = alloca ptr, align 8
  %453 = alloca %"class.std::__cxx11::basic_string", align 8
  %454 = alloca %"class.std::__cxx11::basic_string", align 8
  %455 = alloca ptr, align 8
  %456 = alloca ptr, align 8
  %457 = alloca %"struct.std::pair.362", align 8
  %458 = alloca %"class.std::__cxx11::basic_string", align 8
  %459 = alloca %"class.std::__cxx11::basic_string", align 8
  %460 = alloca %"class.std::__cxx11::basic_string", align 8
  %461 = alloca ptr, align 8
  %462 = alloca ptr, align 8
  %463 = alloca ptr, align 8
  %464 = alloca ptr, align 8
  %465 = alloca ptr, align 8
  %466 = alloca %"class.std::__cxx11::basic_string", align 8
  %467 = alloca %"class.std::__cxx11::basic_string", align 8
  %468 = alloca %"class.std::__cxx11::basic_string", align 8
  %469 = alloca %"class.std::__cxx11::basic_string", align 8
  %470 = alloca %"class.std::__cxx11::basic_string", align 8
  %471 = alloca %"class.std::allocator.71", align 1
  %472 = alloca i32, align 4
  %473 = alloca i32, align 4
  %474 = alloca ptr, align 8
  %475 = alloca %"class.std::__cxx11::basic_string", align 8
  %476 = alloca ptr, align 8
  %477 = alloca %"class.spirv_cross::TypedID.280", align 4
  %478 = alloca ptr, align 8
  %479 = alloca %"class.std::__cxx11::basic_string", align 8
  %480 = alloca %"class.std::allocator.71", align 1
  %481 = alloca %"class.std::__cxx11::basic_string", align 8
  %482 = alloca %"class.std::allocator.71", align 1
  %483 = alloca %"class.std::__cxx11::basic_string", align 8
  %484 = alloca %"class.spirv_cross::TypedID.280", align 4
  %485 = alloca %"class.std::__cxx11::basic_string", align 8
  %486 = alloca i8, align 1
  %487 = alloca %"class.std::__cxx11::basic_string", align 8
  %488 = alloca %"class.std::__cxx11::basic_string", align 8
  %489 = alloca i32, align 4
  %490 = alloca i32, align 4
  %491 = alloca %"class.std::__cxx11::basic_string", align 8
  %492 = alloca %"class.std::allocator.71", align 1
  %493 = alloca %"class.std::__cxx11::basic_string", align 8
  %494 = alloca %"class.std::__cxx11::basic_string", align 8
  %495 = alloca ptr, align 8
  %496 = alloca %"class.std::__cxx11::basic_string", align 8
  %497 = alloca ptr, align 8
  %498 = alloca i32, align 4
  %499 = alloca i32, align 4
  %500 = alloca %"class.std::__cxx11::basic_string", align 8
  %501 = alloca %"class.std::allocator.71", align 1
  %502 = alloca %"class.std::__cxx11::basic_string", align 8
  %503 = alloca %"class.std::__cxx11::basic_string", align 8
  %504 = alloca %"class.std::__cxx11::basic_string", align 8
  %505 = alloca %"class.std::__cxx11::basic_string", align 8
  %506 = alloca %"class.std::__cxx11::basic_string", align 8
  %507 = alloca ptr, align 8
  %508 = alloca %"class.std::__cxx11::basic_string", align 8
  %509 = alloca i32, align 4
  %510 = alloca i32, align 4
  %511 = alloca i32, align 4
  %512 = alloca i32, align 4
  %513 = alloca i32, align 4
  %514 = alloca ptr, align 8
  %515 = alloca ptr, align 8
  %516 = alloca %"class.std::__cxx11::basic_string", align 8
  %517 = alloca %"class.std::allocator.71", align 1
  %518 = alloca %"class.std::__cxx11::basic_string", align 8
  %519 = alloca %"class.std::__cxx11::basic_string", align 8
  %520 = alloca %"class.std::__cxx11::basic_string", align 8
  %521 = alloca %"class.std::__cxx11::basic_string", align 8
  %522 = alloca %"class.std::__cxx11::basic_string", align 8
  %523 = alloca ptr, align 8
  %524 = alloca %"class.std::__cxx11::basic_string", align 8
  %525 = alloca ptr, align 8
  %526 = alloca ptr, align 8
  %527 = alloca %"class.spirv_cross::TypedID.280", align 4
  %528 = alloca %"class.spirv_cross::TypedID.280", align 4
  %529 = alloca i32, align 4
  %530 = alloca i32, align 4
  %531 = alloca i8, align 1
  %532 = alloca %"class.std::__cxx11::basic_string", align 8
  %533 = alloca ptr, align 8
  %534 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %535 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %536 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %537 = alloca %class.anon.394, align 8
  %538 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %539 = alloca %"class.std::__cxx11::basic_string", align 8
  %540 = alloca %"class.std::__cxx11::basic_string", align 8
  %541 = alloca i32, align 4
  %542 = alloca %"class.std::__cxx11::basic_string", align 8
  %543 = alloca %"class.std::__cxx11::basic_string", align 8
  %544 = alloca %"class.std::__cxx11::basic_string", align 8
  %545 = alloca i32, align 4
  %546 = alloca i32, align 4
  %547 = alloca %"class.std::__cxx11::basic_string", align 8
  %548 = alloca %"class.std::__cxx11::basic_string", align 8
  %549 = alloca %"class.std::__cxx11::basic_string", align 8
  %550 = alloca %"class.std::__cxx11::basic_string", align 8
  %551 = alloca %"class.std::__cxx11::basic_string", align 8
  %552 = alloca i32, align 4
  %553 = alloca i32, align 4
  %554 = alloca %"class.std::__cxx11::basic_string", align 8
  %555 = alloca %"class.std::__cxx11::basic_string", align 8
  %556 = alloca %"class.std::__cxx11::basic_string", align 8
  %557 = alloca %"class.std::__cxx11::basic_string", align 8
  %558 = alloca %"class.std::__cxx11::basic_string", align 8
  %559 = alloca %"class.std::__cxx11::basic_string", align 8
  %560 = alloca i8, align 1
  %561 = alloca i32, align 4
  %562 = alloca i32, align 4
  %563 = alloca %"class.std::__cxx11::basic_string", align 8
  %564 = alloca %"struct.spirv_cross::SPIRType", align 8
  %565 = alloca %"class.std::__cxx11::basic_string", align 8
  %566 = alloca %"class.std::__cxx11::basic_string", align 8
  %567 = alloca i32, align 4
  %568 = alloca i32, align 4
  %569 = alloca %"class.std::__cxx11::basic_string", align 8
  %570 = alloca %"class.std::__cxx11::basic_string", align 8
  %571 = alloca %"class.std::__cxx11::basic_string", align 8
  %572 = alloca %"class.std::__cxx11::basic_string", align 8
  %573 = alloca %"class.std::__cxx11::basic_string", align 8
  %574 = alloca %"class.std::__cxx11::basic_string", align 8
  %575 = alloca %"class.std::__cxx11::basic_string", align 8
  %576 = alloca %"class.std::__cxx11::basic_string", align 8
  %577 = alloca %"class.std::__cxx11::basic_string", align 8
  %578 = alloca %"class.std::__cxx11::basic_string", align 8
  %579 = alloca %"class.std::__cxx11::basic_string", align 8
  %580 = alloca i32, align 4
  %581 = alloca i32, align 4
  %582 = alloca %"class.std::__cxx11::basic_string", align 8
  %583 = alloca %"class.std::__cxx11::basic_string", align 8
  %584 = alloca %"class.std::__cxx11::basic_string", align 8
  %585 = alloca %"class.std::__cxx11::basic_string", align 8
  %586 = alloca %"class.std::__cxx11::basic_string", align 8
  %587 = alloca %"class.std::__cxx11::basic_string", align 8
  %588 = alloca i8, align 1
  %589 = alloca %"struct.std::__detail::_Node_iterator.364", align 8
  %590 = alloca %"struct.std::__detail::_Node_iterator.364", align 8
  %591 = alloca ptr, align 8
  %592 = alloca %"class.spirv_cross::TypedID.280", align 4
  %593 = alloca i32, align 4
  %594 = alloca i32, align 4
  %595 = alloca %"class.std::__cxx11::basic_string", align 8
  %596 = alloca %"struct.spirv_cross::SPIRType", align 8
  %597 = alloca %"class.std::__cxx11::basic_string", align 8
  %598 = alloca %"class.std::__cxx11::basic_string", align 8
  %599 = alloca %"class.std::__cxx11::basic_string", align 8
  %600 = alloca ptr, align 8
  %601 = alloca i8, align 1
  %602 = alloca ptr, align 8
  %603 = alloca %"class.spirv_cross::TypedID.280", align 4
  %604 = alloca ptr, align 8
  %605 = alloca %"class.spirv_cross::TypedID.280", align 4
  %606 = alloca %"class.spirv_cross::TypedID.280", align 4
  %607 = alloca ptr, align 8
  %608 = alloca ptr, align 8
  %609 = alloca %"struct.spirv_cross::SPIRType", align 8
  %610 = alloca %"class.std::__cxx11::basic_string", align 8
  %611 = alloca %"struct.spirv_cross::SPIRType", align 8
  %612 = alloca %"class.std::__cxx11::basic_string", align 8
  %613 = alloca %"class.std::__cxx11::basic_string", align 8
  %614 = alloca i32, align 4
  %615 = alloca i32, align 4
  %616 = alloca %"class.std::__cxx11::basic_string", align 8
  %617 = alloca %"class.std::__cxx11::basic_string", align 8
  %618 = alloca %"class.std::__cxx11::basic_string", align 8
  %619 = alloca %"class.std::__cxx11::basic_string", align 8
  %620 = alloca %"class.std::__cxx11::basic_string", align 8
  %621 = alloca %"class.std::__cxx11::basic_string", align 8
  %622 = alloca %"class.std::__cxx11::basic_string", align 8
  %623 = alloca ptr, align 8
  %624 = alloca i32, align 4
  %625 = alloca i32, align 4
  %626 = alloca %"class.std::__cxx11::basic_string", align 8
  %627 = alloca %"class.std::__cxx11::basic_string", align 8
  %628 = alloca %"class.std::allocator.71", align 1
  %629 = alloca %"class.std::__cxx11::basic_string", align 8
  %630 = alloca %"class.std::__cxx11::basic_string", align 8
  %631 = alloca %"class.std::__cxx11::basic_string", align 8
  %632 = alloca %"class.std::allocator.71", align 1
  %633 = alloca ptr, align 8
  %634 = alloca %"class.std::__cxx11::basic_string", align 8
  %635 = alloca %"class.std::__cxx11::basic_string", align 8
  %636 = alloca %"class.std::__cxx11::basic_string", align 8
  %637 = alloca ptr, align 8
  %638 = alloca %"class.std::__cxx11::basic_string", align 8
  %639 = alloca %"class.std::__cxx11::basic_string", align 8
  %640 = alloca %"class.std::allocator.71", align 1
  %641 = alloca i32, align 4
  %642 = alloca i32, align 4
  %643 = alloca %"class.std::__cxx11::basic_string", align 8
  %644 = alloca i8, align 1
  %645 = alloca %"class.std::__cxx11::basic_string", align 8
  %646 = alloca %"class.std::__cxx11::basic_string", align 8
  %647 = alloca %"class.std::__cxx11::basic_string", align 8
  %648 = alloca %"class.std::__cxx11::basic_string", align 8
  %649 = alloca %"class.std::__cxx11::basic_string", align 8
  %650 = alloca %"class.std::__cxx11::basic_string", align 8
  %651 = alloca %"class.std::__cxx11::basic_string", align 8
  %652 = alloca %"class.std::__cxx11::basic_string", align 8
  %653 = alloca %"class.std::__cxx11::basic_string", align 8
  %654 = alloca %"class.std::__cxx11::basic_string", align 8
  %655 = alloca %"class.std::__cxx11::basic_string", align 8
  %656 = alloca %"class.std::__cxx11::basic_string", align 8
  %657 = alloca %"class.std::__cxx11::basic_string", align 8
  %658 = alloca %"class.std::__cxx11::basic_string", align 8
  %659 = alloca %"class.std::allocator.71", align 1
  %660 = alloca i32, align 4
  %661 = alloca i32, align 4
  %662 = alloca %"class.std::__cxx11::basic_string", align 8
  %663 = alloca i8, align 1
  %664 = alloca %"class.std::__cxx11::basic_string", align 8
  %665 = alloca %"class.std::__cxx11::basic_string", align 8
  %666 = alloca %"class.std::__cxx11::basic_string", align 8
  %667 = alloca %"class.std::__cxx11::basic_string", align 8
  %668 = alloca %"class.std::__cxx11::basic_string", align 8
  %669 = alloca %"class.std::__cxx11::basic_string", align 8
  %670 = alloca %"class.std::__cxx11::basic_string", align 8
  %671 = alloca %"class.std::__cxx11::basic_string", align 8
  %672 = alloca %"class.std::__cxx11::basic_string", align 8
  %673 = alloca i32, align 4
  %674 = alloca i32, align 4
  %675 = alloca i32, align 4
  %676 = alloca i32, align 4
  %677 = alloca ptr, align 8
  %678 = alloca ptr, align 8
  %679 = alloca i32, align 4
  %680 = alloca i32, align 4
  %681 = alloca i8, align 1
  %682 = alloca i8, align 1
  %683 = alloca i32, align 4
  %684 = alloca i32, align 4
  %685 = alloca i32, align 4
  %686 = alloca i32, align 4
  %687 = alloca %"class.std::__cxx11::basic_string", align 8
  %688 = alloca %"class.std::allocator.71", align 1
  %689 = alloca ptr, align 8
  %690 = alloca %"class.std::__cxx11::basic_string", align 8
  %691 = alloca i32, align 4
  %692 = alloca %"class.std::__cxx11::basic_string", align 8
  %693 = alloca i32, align 4
  %694 = alloca i32, align 4
  %695 = alloca %"class.std::__cxx11::basic_string", align 8
  %696 = alloca %"class.std::__cxx11::basic_string", align 8
  %697 = alloca %"class.std::__cxx11::basic_string", align 8
  %698 = alloca %"class.std::__cxx11::basic_string", align 8
  %699 = alloca %"class.std::__cxx11::basic_string", align 8
  %700 = alloca %"class.std::__cxx11::basic_string", align 8
  %701 = alloca %"class.std::allocator.71", align 1
  %702 = alloca i32, align 4
  %703 = alloca i32, align 4
  %704 = alloca %"class.std::__cxx11::basic_string", align 8
  %705 = alloca %"class.std::allocator.71", align 1
  %706 = alloca i32, align 4
  %707 = alloca i32, align 4
  %708 = alloca %"class.std::__cxx11::basic_string", align 8
  %709 = alloca %"class.std::allocator.71", align 1
  %710 = alloca i32, align 4
  %711 = alloca i32, align 4
  %712 = alloca %"class.std::__cxx11::basic_string", align 8
  %713 = alloca %"class.std::allocator.71", align 1
  %714 = alloca i32, align 4
  %715 = alloca i32, align 4
  %716 = alloca %"class.std::__cxx11::basic_string", align 8
  %717 = alloca %"class.std::allocator.71", align 1
  %718 = alloca i32, align 4
  %719 = alloca i32, align 4
  %720 = alloca %"class.std::__cxx11::basic_string", align 8
  %721 = alloca %"class.std::allocator.71", align 1
  %722 = alloca i32, align 4
  %723 = alloca i32, align 4
  %724 = alloca %"class.std::__cxx11::basic_string", align 8
  %725 = alloca %"class.std::allocator.71", align 1
  %726 = alloca i32, align 4
  %727 = alloca i32, align 4
  %728 = alloca %"class.std::__cxx11::basic_string", align 8
  %729 = alloca %"class.std::allocator.71", align 1
  %730 = alloca i32, align 4
  %731 = alloca i32, align 4
  %732 = alloca %"class.std::__cxx11::basic_string", align 8
  %733 = alloca %"class.std::allocator.71", align 1
  %734 = alloca ptr, align 8
  %735 = alloca i32, align 4
  %736 = alloca i32, align 4
  %737 = alloca %"class.std::__cxx11::basic_string", align 8
  %738 = alloca %"class.std::allocator.71", align 1
  %739 = alloca ptr, align 8
  %740 = alloca i32, align 4
  %741 = alloca i32, align 4
  %742 = alloca %"class.std::__cxx11::basic_string", align 8
  %743 = alloca %"class.std::allocator.71", align 1
  %744 = alloca i32, align 4
  %745 = alloca i32, align 4
  %746 = alloca %"class.std::__cxx11::basic_string", align 8
  %747 = alloca ptr, align 8
  %748 = alloca %"class.std::__cxx11::basic_string", align 8
  %749 = alloca %"class.std::__cxx11::basic_string", align 8
  %750 = alloca %"class.std::__cxx11::basic_string", align 8
  %751 = alloca ptr, align 8
  %752 = alloca %"class.std::__cxx11::basic_string", align 8
  %753 = alloca %"class.std::__cxx11::basic_string", align 8
  %754 = alloca %"class.std::__cxx11::basic_string", align 8
  %755 = alloca %"struct.std::pair.362", align 8
  %756 = alloca %"class.std::__cxx11::basic_string", align 8
  %757 = alloca %"class.std::__cxx11::basic_string", align 8
  %758 = alloca %"class.std::__cxx11::basic_string", align 8
  %759 = alloca %"class.std::__cxx11::basic_string", align 8
  %760 = alloca %"class.std::__cxx11::basic_string", align 8
  %761 = alloca %"class.std::__cxx11::basic_string", align 8
  %762 = alloca %"class.std::__cxx11::basic_string", align 8
  %763 = alloca %"class.std::__cxx11::basic_string", align 8
  %764 = alloca %"class.std::__cxx11::basic_string", align 8
  %765 = alloca %"class.std::__cxx11::basic_string", align 8
  %766 = alloca %"class.std::__cxx11::basic_string", align 8
  %767 = alloca %"class.spirv_cross::TypedID.280", align 4
  %768 = alloca %"class.std::__cxx11::basic_string", align 8
  %769 = alloca %"class.std::__cxx11::basic_string", align 8
  %770 = alloca %"class.std::__cxx11::basic_string", align 8
  %771 = alloca %"class.std::__cxx11::basic_string", align 8
  %772 = alloca %"class.std::__cxx11::basic_string", align 8
  %773 = alloca %"class.std::__cxx11::basic_string", align 8
  %774 = alloca %"class.std::__cxx11::basic_string", align 8
  %775 = alloca %"class.std::__cxx11::basic_string", align 8
  %776 = alloca %"class.std::__cxx11::basic_string", align 8
  %777 = alloca %"class.std::__cxx11::basic_string", align 8
  %778 = alloca i32, align 4
  %779 = alloca %"class.spirv_cross::TypedID.280", align 4
  %780 = alloca %"class.std::__cxx11::basic_string", align 8
  %781 = alloca %"class.std::__cxx11::basic_string", align 8
  %782 = alloca %"class.spirv_cross::TypedID.280", align 4
  %783 = alloca %"class.std::__cxx11::basic_string", align 8
  %784 = alloca i32, align 4
  %785 = alloca %"class.spirv_cross::TypedID.280", align 4
  %786 = alloca %"class.std::__cxx11::basic_string", align 8
  %787 = alloca %"class.std::__cxx11::basic_string", align 8
  %788 = alloca %"class.std::__cxx11::basic_string", align 8
  %789 = alloca %"class.std::__cxx11::basic_string", align 8
  %790 = alloca %"class.std::__cxx11::basic_string", align 8
  %791 = alloca %"class.std::__cxx11::basic_string", align 8
  %792 = alloca %"class.std::__cxx11::basic_string", align 8
  %793 = alloca %"class.std::__cxx11::basic_string", align 8
  %794 = alloca %"class.std::__cxx11::basic_string", align 8
  %795 = alloca %"class.std::__cxx11::basic_string", align 8
  %796 = alloca %"class.std::__cxx11::basic_string", align 8
  %797 = alloca %"class.std::__cxx11::basic_string", align 8
  %798 = alloca %"class.std::__cxx11::basic_string", align 8
  %799 = alloca %"class.std::__cxx11::basic_string", align 8
  %800 = alloca %"class.std::__cxx11::basic_string", align 8
  %801 = alloca %"class.std::__cxx11::basic_string", align 8
  %802 = alloca %"class.std::__cxx11::basic_string", align 8
  %803 = alloca %"class.std::__cxx11::basic_string", align 8
  %804 = alloca %"class.std::__cxx11::basic_string", align 8
  %805 = alloca %"class.std::__cxx11::basic_string", align 8
  %806 = alloca %"class.std::__cxx11::basic_string", align 8
  %807 = alloca %"class.std::__cxx11::basic_string", align 8
  %808 = alloca %"class.std::__cxx11::basic_string", align 8
  %809 = alloca %"class.std::__cxx11::basic_string", align 8
  %810 = alloca %"class.std::__cxx11::basic_string", align 8
  %811 = alloca %"class.std::__cxx11::basic_string", align 8
  %812 = alloca %"class.std::__cxx11::basic_string", align 8
  %813 = alloca %"class.std::__cxx11::basic_string", align 8
  %814 = alloca %"class.std::__cxx11::basic_string", align 8
  %815 = alloca %"class.std::__cxx11::basic_string", align 8
  %816 = alloca %"class.std::__cxx11::basic_string", align 8
  %817 = alloca %"class.std::__cxx11::basic_string", align 8
  %818 = alloca %"class.std::__cxx11::basic_string", align 8
  %819 = alloca %"class.std::__cxx11::basic_string", align 8
  %820 = alloca %"class.std::__cxx11::basic_string", align 8
  %821 = alloca %"class.std::__cxx11::basic_string", align 8
  %822 = alloca %"class.std::__cxx11::basic_string", align 8
  %823 = alloca %"class.std::__cxx11::basic_string", align 8
  %824 = alloca %"class.std::__cxx11::basic_string", align 8
  %825 = alloca %"class.std::__cxx11::basic_string", align 8
  %826 = alloca %"class.std::__cxx11::basic_string", align 8
  %827 = alloca %"class.std::__cxx11::basic_string", align 8
  %828 = alloca %"class.std::__cxx11::basic_string", align 8
  %829 = alloca %"class.std::__cxx11::basic_string", align 8
  %830 = alloca %"class.std::__cxx11::basic_string", align 8
  %831 = alloca %"class.std::__cxx11::basic_string", align 8
  %832 = alloca %"class.std::__cxx11::basic_string", align 8
  %833 = alloca %"class.std::__cxx11::basic_string", align 8
  %834 = alloca %"class.std::__cxx11::basic_string", align 8
  %835 = alloca %"class.std::__cxx11::basic_string", align 8
  %836 = alloca %"class.std::__cxx11::basic_string", align 8
  %837 = alloca %"class.std::__cxx11::basic_string", align 8
  %838 = alloca %"class.std::__cxx11::basic_string", align 8
  %839 = alloca %"class.std::__cxx11::basic_string", align 8
  %840 = alloca %"class.std::__cxx11::basic_string", align 8
  %841 = alloca %"class.std::__cxx11::basic_string", align 8
  %842 = alloca %"class.std::__cxx11::basic_string", align 8
  %843 = alloca %"class.std::__cxx11::basic_string", align 8
  %844 = alloca %"class.std::__cxx11::basic_string", align 8
  %845 = alloca %"class.std::__cxx11::basic_string", align 8
  %846 = alloca %"class.std::__cxx11::basic_string", align 8
  %847 = alloca %"class.std::__cxx11::basic_string", align 8
  %848 = alloca %"class.std::__cxx11::basic_string", align 8
  %849 = alloca %"class.std::__cxx11::basic_string", align 8
  %850 = alloca %"class.std::allocator.71", align 1
  %851 = alloca i8, align 1
  %852 = alloca %"struct.std::pair.362", align 8
  %853 = alloca %"class.std::__cxx11::basic_string", align 8
  %854 = alloca %"class.std::__cxx11::basic_string", align 8
  %855 = alloca %"class.std::__cxx11::basic_string", align 8
  %856 = alloca %"class.std::__cxx11::basic_string", align 8
  %857 = alloca i8, align 1
  %858 = alloca ptr, align 8
  %859 = alloca ptr, align 8
  %860 = alloca %"class.std::__cxx11::basic_string", align 8
  %861 = alloca %"class.std::allocator.71", align 1
  %862 = alloca %"class.std::__cxx11::basic_string", align 8
  %863 = alloca ptr, align 8
  %864 = alloca ptr, align 8
  %865 = alloca %"class.std::__cxx11::basic_string", align 8
  %866 = alloca %"class.std::allocator.71", align 1
  %867 = alloca %"class.std::__cxx11::basic_string", align 8
  %868 = alloca %"class.std::__cxx11::basic_string", align 8
  %869 = alloca %"class.std::allocator.71", align 1
  %870 = alloca %"class.std::__cxx11::basic_string", align 8
  %871 = alloca %"class.std::allocator.71", align 1
  %872 = alloca %"class.std::__cxx11::basic_string", align 8
  %873 = alloca %"class.std::allocator.71", align 1
  %874 = alloca %"class.std::__cxx11::basic_string", align 8
  %875 = alloca %"class.std::__cxx11::basic_string", align 8
  %876 = alloca ptr, align 8
  %877 = alloca i32, align 4
  %878 = alloca ptr, align 8
  %879 = alloca %"class.std::__cxx11::basic_string", align 8
  %880 = alloca %"class.std::allocator.71", align 1
  %881 = alloca %"class.std::__cxx11::basic_string", align 8
  %882 = alloca %"class.std::allocator.71", align 1
  %883 = alloca %"class.std::__cxx11::basic_string", align 8
  %884 = alloca %"class.std::allocator.71", align 1
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %885 = load ptr, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #9
  %886 = load ptr, ptr %4, align 8, !tbaa !5
  %887 = call noundef ptr @_ZNK11spirv_cross8Compiler6streamERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(3176) %885, ptr noundef nonnull align 4 dereferenceable(12) %886)
  store ptr %887, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #9
  %888 = load ptr, ptr %4, align 8, !tbaa !5
  %889 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %888, i32 0, i32 0
  %890 = load i16, ptr %889, align 4, !tbaa !9
  %891 = zext i16 %890 to i32
  store i32 %891, ptr %6, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #9
  %892 = load ptr, ptr %4, align 8, !tbaa !5
  %893 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %892, i32 0, i32 3
  %894 = load i32, ptr %893, align 4, !tbaa !15
  store i32 %894, ptr %7, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #9
  %895 = load ptr, ptr %4, align 8, !tbaa !5
  %896 = call noundef i32 @_ZNK11spirv_cross12CompilerGLSL33get_integer_width_for_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 4 dereferenceable(12) %895)
  store i32 %896, ptr %8, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #9
  %897 = load i32, ptr %8, align 4, !tbaa !16
  %898 = call noundef i32 @_ZN11spirv_crossL18to_signed_basetypeEj(i32 noundef %897)
  store i32 %898, ptr %9, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #9
  %899 = load i32, ptr %8, align 4, !tbaa !16
  %900 = call noundef i32 @_ZN11spirv_crossL20to_unsigned_basetypeEj(i32 noundef %899)
  store i32 %900, ptr %10, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 1, ptr %11) #9
  %901 = load i32, ptr %8, align 4, !tbaa !16
  %902 = icmp ult i32 %901, 32
  br i1 %902, label %903, label %919

903:                                              ; preds = %2
  %904 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 21
  %905 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %904, i32 0, i32 50
  %906 = load i8, ptr %905, align 1, !tbaa !19, !range !127, !noundef !128
  %907 = trunc i8 %906 to i1
  br i1 %907, label %908, label %919

908:                                              ; preds = %903
  %909 = load i32, ptr %6, align 4, !tbaa !13
  %910 = call noundef zeroext i1 @_ZN11spirv_crossL37opcode_can_promote_integer_implicitlyEN3spv2OpE(i32 noundef %909)
  br i1 %910, label %911, label %919

911:                                              ; preds = %908
  %912 = load ptr, ptr %5, align 8, !tbaa !5
  %913 = getelementptr inbounds i32, ptr %912, i64 0
  %914 = load i32, ptr %913, align 4, !tbaa !16
  %915 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %914)
  %916 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %915, i32 0, i32 4
  %917 = load i32, ptr %916, align 8, !tbaa !129
  %918 = icmp eq i32 %917, 1
  br label %919

919:                                              ; preds = %911, %908, %903, %2
  %920 = phi i1 [ false, %908 ], [ false, %903 ], [ false, %2 ], [ %918, %911 ]
  %921 = zext i1 %920 to i8
  store i8 %921, ptr %11, align 1, !tbaa !142
  %922 = load i32, ptr %6, align 4, !tbaa !13
  %923 = call noundef i32 @_ZNK11spirv_cross12CompilerGLSL21get_remapped_spirv_opEN3spv2OpE(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %922)
  store i32 %923, ptr %6, align 4, !tbaa !13
  %924 = load i32, ptr %6, align 4, !tbaa !13
  switch i32 %924, label %11523 [
    i32 61, label %925
    i32 66, label %1263
    i32 65, label %1263
    i32 67, label %1263
    i32 62, label %1524
    i32 68, label %1617
    i32 57, label %1675
    i32 80, label %2072
    i32 78, label %2511
    i32 77, label %2567
    i32 81, label %2602
    i32 82, label %2826
    i32 63, label %3005
    i32 400, label %3058
    i32 83, label %3081
    i32 79, label %3181
    i32 156, label %3471
    i32 157, label %3520
    i32 126, label %3651
    i32 127, label %3684
    i32 128, label %3694
    i32 129, label %3718
    i32 130, label %3731
    i32 131, label %3755
    i32 132, label %3768
    i32 144, label %3792
    i32 145, label %3792
    i32 146, label %3936
    i32 143, label %4062
    i32 133, label %4166
    i32 142, label %4166
    i32 147, label %4179
    i32 148, label %4298
    i32 84, label %4311
    i32 138, label %4374
    i32 135, label %4476
    i32 134, label %4494
    i32 149, label %4512
    i32 150, label %4512
    i32 151, label %4610
    i32 152, label %4610
    i32 136, label %4711
    i32 194, label %4724
    i32 195, label %4742
    i32 196, label %4760
    i32 197, label %4784
    i32 198, label %4808
    i32 199, label %4832
    i32 200, label %4856
    i32 137, label %4889
    i32 139, label %4907
    i32 141, label %4925
    i32 140, label %4938
    i32 154, label %5084
    i32 155, label %5094
    i32 169, label %5104
    i32 166, label %5120
    i32 167, label %5156
    i32 168, label %5192
    i32 170, label %5222
    i32 164, label %5265
    i32 180, label %5265
    i32 171, label %5300
    i32 165, label %5343
    i32 182, label %5343
    i32 183, label %5343
    i32 172, label %5378
    i32 173, label %5378
    i32 186, label %5429
    i32 174, label %5464
    i32 175, label %5464
    i32 190, label %5515
    i32 176, label %5550
    i32 177, label %5550
    i32 184, label %5601
    i32 178, label %5636
    i32 179, label %5636
    i32 188, label %5687
    i32 114, label %5722
    i32 111, label %5722
    i32 113, label %5722
    i32 112, label %5722
    i32 109, label %5783
    i32 110, label %5783
    i32 115, label %5842
    i32 124, label %5862
    i32 116, label %5897
    i32 207, label %6030
    i32 208, label %6057
    i32 210, label %6084
    i32 211, label %6126
    i32 213, label %6168
    i32 214, label %6210
    i32 209, label %6252
    i32 215, label %6279
    i32 212, label %6321
    i32 201, label %6363
    i32 202, label %6382
    i32 203, label %6400
    i32 204, label %6418
    i32 205, label %6428
    i32 229, label %6446
    i32 230, label %6468
    i32 227, label %6494
    i32 228, label %6562
    i32 232, label %6586
    i32 233, label %6586
    i32 234, label %6698
    i32 6035, label %6698
    i32 235, label %6718
    i32 236, label %6777
    i32 237, label %6777
    i32 238, label %6797
    i32 239, label %6797
    i32 240, label %6817
    i32 241, label %6837
    i32 242, label %6857
    i32 218, label %6877
    i32 219, label %6878
    i32 220, label %6879
    i32 221, label %6935
    i32 88, label %6991
    i32 92, label %6991
    i32 90, label %6991
    i32 94, label %6991
    i32 87, label %6991
    i32 91, label %6991
    i32 89, label %6991
    i32 93, label %6991
    i32 95, label %6991
    i32 96, label %6991
    i32 97, label %6991
    i32 306, label %6996
    i32 310, label %6996
    i32 308, label %6996
    i32 312, label %6996
    i32 305, label %6996
    i32 309, label %6996
    i32 307, label %6996
    i32 311, label %6996
    i32 313, label %6996
    i32 314, label %6996
    i32 315, label %6996
    i32 316, label %7001
    i32 100, label %7035
    i32 105, label %7066
    i32 106, label %7226
    i32 107, label %7298
    i32 86, label %7400
    i32 103, label %7426
    i32 98, label %7538
    i32 320, label %7538
    i32 60, label %8256
    i32 99, label %8344
    i32 104, label %8543
    i32 4480, label %8708
    i32 4481, label %8708
    i32 4482, label %8708
    i32 4483, label %8708
    i32 4500, label %8937
    i32 4501, label %8937
    i32 4502, label %8937
    i32 4503, label %8937
    i32 224, label %9105
    i32 225, label %9105
    i32 12, label %9356
    i32 4421, label %9564
    i32 4422, label %9632
    i32 4432, label %9658
    i32 4428, label %9687
    i32 4429, label %9713
    i32 4430, label %9739
    i32 5000, label %9765
    i32 5001, label %9765
    i32 5002, label %9791
    i32 5003, label %9791
    i32 5004, label %9791
    i32 5005, label %9817
    i32 5006, label %9817
    i32 5007, label %9817
    i32 5011, label %9843
    i32 5012, label %9886
    i32 333, label %9935
    i32 337, label %9935
    i32 338, label %9935
    i32 339, label %9935
    i32 340, label %9935
    i32 341, label %9935
    i32 342, label %9935
    i32 343, label %9935
    i32 344, label %9935
    i32 345, label %9935
    i32 346, label %9935
    i32 347, label %9935
    i32 348, label %9935
    i32 334, label %9935
    i32 335, label %9935
    i32 336, label %9935
    i32 350, label %9935
    i32 349, label %9935
    i32 352, label %9935
    i32 351, label %9935
    i32 355, label %9935
    i32 358, label %9935
    i32 353, label %9935
    i32 356, label %9935
    i32 354, label %9935
    i32 357, label %9935
    i32 359, label %9935
    i32 360, label %9935
    i32 361, label %9935
    i32 362, label %9935
    i32 363, label %9935
    i32 364, label %9935
    i32 366, label %9935
    i32 365, label %9935
    i32 181, label %9940
    i32 185, label %9940
    i32 187, label %9940
    i32 189, label %9940
    i32 191, label %9940
    i32 5334, label %10044
    i32 5335, label %10087
    i32 5336, label %10092
    i32 5337, label %10097
    i32 4445, label %10200
    i32 5344, label %10316
    i32 4446, label %10338
    i32 4473, label %10373
    i32 4477, label %10448
    i32 4474, label %10473
    i32 4475, label %10485
    i32 4476, label %10506
    i32 6016, label %10518
    i32 6017, label %10543
    i32 6030, label %10568
    i32 6029, label %10593
    i32 6026, label %10618
    i32 4479, label %10643
    i32 6018, label %10677
    i32 6019, label %10711
    i32 6020, label %10745
    i32 6021, label %10779
    i32 6022, label %10813
    i32 6023, label %10847
    i32 6024, label %10881
    i32 6025, label %10915
    i32 6027, label %10949
    i32 6028, label %10983
    i32 6031, label %11017
    i32 6032, label %11051
    i32 4447, label %11085
    i32 120, label %11184
    i32 117, label %11243
    i32 1, label %11526
    i32 8, label %11301
    i32 317, label %11526
    i32 5380, label %11308
    i32 5381, label %11334
    i32 5364, label %11376
    i32 5365, label %11382
    i32 5295, label %11388
    i32 5056, label %11406
  ]

925:                                              ; preds = %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #9
  %926 = load ptr, ptr %5, align 8, !tbaa !5
  %927 = getelementptr inbounds i32, ptr %926, i64 0
  %928 = load i32, ptr %927, align 4, !tbaa !16
  store i32 %928, ptr %12, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #9
  %929 = load ptr, ptr %5, align 8, !tbaa !5
  %930 = getelementptr inbounds i32, ptr %929, i64 1
  %931 = load i32, ptr %930, align 4, !tbaa !16
  store i32 %931, ptr %13, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #9
  %932 = load ptr, ptr %5, align 8, !tbaa !5
  %933 = getelementptr inbounds i32, ptr %932, i64 2
  %934 = load i32, ptr %933, align 4, !tbaa !16
  store i32 %934, ptr %14, align 4, !tbaa !16
  %935 = load i32, ptr %14, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %935)
  call void @llvm.lifetime.start.p0(i64 1, ptr %15) #9
  %936 = load i32, ptr %14, align 4, !tbaa !16
  %937 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %936)
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #9
  br i1 %937, label %938, label %948

938:                                              ; preds = %925
  %939 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %885, i32 0, i32 15
  %940 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE4findERKj(ptr noundef nonnull align 8 dereferenceable(56) %939, ptr noundef nonnull align 4 dereferenceable(4) %13)
  %941 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.364", ptr %16, i32 0, i32 0
  %942 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.365", ptr %941, i32 0, i32 0
  store ptr %940, ptr %942, align 8
  %943 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %885, i32 0, i32 15
  %944 = call ptr @_ZSt3endISt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(56) %943)
  %945 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.364", ptr %17, i32 0, i32 0
  %946 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.365", ptr %945, i32 0, i32 0
  store ptr %944, ptr %946, align 8
  %947 = call noundef zeroext i1 @_ZNSt8__detaileqERKNS_19_Node_iterator_baseIjLb0EEES3_(ptr noundef nonnull align 8 dereferenceable(8) %16, ptr noundef nonnull align 8 dereferenceable(8) %17) #9
  br label %948

948:                                              ; preds = %938, %925
  %949 = phi i1 [ false, %925 ], [ %947, %938 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #9
  %950 = zext i1 %949 to i8
  store i8 %950, ptr %15, align 1, !tbaa !142
  call void @llvm.lifetime.start.p0(i64 1, ptr %18) #9
  store i8 0, ptr %18, align 1, !tbaa !142
  call void @llvm.lifetime.start.p0(i64 1, ptr %19) #9
  store i8 0, ptr %19, align 1, !tbaa !142
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #9
  %951 = load i32, ptr %14, align 4, !tbaa !16
  %952 = call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_14SPIRExpressionEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %951)
  store ptr %952, ptr %20, align 8, !tbaa !5
  %953 = load i8, ptr %15, align 1, !tbaa !142, !range !127, !noundef !128
  %954 = trunc i8 %953 to i1
  br i1 %954, label %955, label %975

955:                                              ; preds = %948
  %956 = load ptr, ptr %20, align 8, !tbaa !5
  %957 = icmp ne ptr %956, null
  br i1 %957, label %958, label %966

958:                                              ; preds = %955
  %959 = load ptr, ptr %20, align 8, !tbaa !5
  %960 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %959, i32 0, i32 6
  %961 = load i8, ptr %960, align 1, !tbaa !143, !range !127, !noundef !128
  %962 = trunc i8 %961 to i1
  br i1 %962, label %963, label %966

963:                                              ; preds = %958
  store i8 1, ptr %19, align 1, !tbaa !142
  %964 = load ptr, ptr %20, align 8, !tbaa !5
  %965 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %964, i32 0, i32 6
  store i8 0, ptr %965, align 1, !tbaa !143
  store i8 1, ptr %18, align 1, !tbaa !142
  br label %974

966:                                              ; preds = %958, %955
  %967 = load i32, ptr %14, align 4, !tbaa !16
  %968 = load ptr, ptr %885, align 8, !tbaa !145
  %969 = getelementptr inbounds ptr, ptr %968, i64 40
  %970 = load ptr, ptr %969, align 8
  %971 = call noundef zeroext i1 %970(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %967)
  br i1 %971, label %972, label %973

972:                                              ; preds = %966
  store i8 1, ptr %18, align 1, !tbaa !142
  br label %973

973:                                              ; preds = %972, %966
  br label %974

974:                                              ; preds = %973, %963
  br label %975

975:                                              ; preds = %974, %948
  call void @llvm.lifetime.start.p0(i64 32, ptr %21) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %22) #9
  %976 = load i32, ptr %14, align 4, !tbaa !16
  %977 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler23has_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %976, i32 noundef 2)
          to label %978 unwind label %996

978:                                              ; preds = %975
  %979 = zext i1 %977 to i8
  store i8 %979, ptr %22, align 1, !tbaa !142
  call void @llvm.lifetime.start.p0(i64 1, ptr %25) #9
  %980 = load i32, ptr %14, align 4, !tbaa !16
  %981 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler23has_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %980, i32 noundef 1)
          to label %982 unwind label %1000

982:                                              ; preds = %978
  %983 = zext i1 %981 to i8
  store i8 %983, ptr %25, align 1, !tbaa !142
  %984 = load i8, ptr %15, align 1, !tbaa !142, !range !127, !noundef !128
  %985 = trunc i8 %984 to i1
  br i1 %985, label %992, label %986

986:                                              ; preds = %982
  %987 = load i8, ptr %22, align 1, !tbaa !142, !range !127, !noundef !128
  %988 = trunc i8 %987 to i1
  br i1 %988, label %1008, label %989

989:                                              ; preds = %986
  %990 = load i8, ptr %25, align 1, !tbaa !142, !range !127, !noundef !128
  %991 = trunc i8 %990 to i1
  br i1 %991, label %1008, label %992

992:                                              ; preds = %989, %982
  call void @llvm.lifetime.start.p0(i64 32, ptr %26) #9
  %993 = load i32, ptr %14, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL26to_dereferenced_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %26, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %993, i1 noundef zeroext false)
          to label %994 unwind label %1004

994:                                              ; preds = %992
  %995 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %26) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %26) #9
  br label %1016

996:                                              ; preds = %975
  %997 = landingpad { ptr, i32 }
          cleanup
  %998 = extractvalue { ptr, i32 } %997, 0
  store ptr %998, ptr %23, align 8
  %999 = extractvalue { ptr, i32 } %997, 1
  store i32 %999, ptr %24, align 4
  br label %1262

1000:                                             ; preds = %978
  %1001 = landingpad { ptr, i32 }
          cleanup
  %1002 = extractvalue { ptr, i32 } %1001, 0
  store ptr %1002, ptr %23, align 8
  %1003 = extractvalue { ptr, i32 } %1001, 1
  store i32 %1003, ptr %24, align 4
  br label %1261

1004:                                             ; preds = %992
  %1005 = landingpad { ptr, i32 }
          cleanup
  %1006 = extractvalue { ptr, i32 } %1005, 0
  store ptr %1006, ptr %23, align 8
  %1007 = extractvalue { ptr, i32 } %1005, 1
  store i32 %1007, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %26) #9
  br label %1261

1008:                                             ; preds = %989, %986
  call void @llvm.lifetime.start.p0(i64 32, ptr %27) #9
  %1009 = load i32, ptr %14, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %27, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %1009, i1 noundef zeroext true)
          to label %1010 unwind label %1012

1010:                                             ; preds = %1008
  %1011 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %27) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %27) #9
  br label %1016

1012:                                             ; preds = %1008
  %1013 = landingpad { ptr, i32 }
          cleanup
  %1014 = extractvalue { ptr, i32 } %1013, 0
  store ptr %1014, ptr %23, align 8
  %1015 = extractvalue { ptr, i32 } %1013, 1
  store i32 %1015, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %27) #9
  br label %1261

1016:                                             ; preds = %1010, %994
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #9
  %1017 = load i32, ptr %12, align 4, !tbaa !16
  %1018 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %1017)
          to label %1019 unwind label %1038

1019:                                             ; preds = %1016
  store ptr %1018, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #9
  %1020 = load i32, ptr %14, align 4, !tbaa !16
  %1021 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %1020)
          to label %1022 unwind label %1042

1022:                                             ; preds = %1019
  store ptr %1021, ptr %29, align 8, !tbaa !5
  %1023 = load ptr, ptr %29, align 8, !tbaa !5
  %1024 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1023, i32 0, i32 4
  %1025 = load i32, ptr %1024, align 8, !tbaa !129
  %1026 = load ptr, ptr %28, align 8, !tbaa !5
  %1027 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1026, i32 0, i32 4
  %1028 = load i32, ptr %1027, align 8, !tbaa !129
  %1029 = icmp ugt i32 %1025, %1028
  br i1 %1029, label %1030, label %1055

1030:                                             ; preds = %1022
  call void @llvm.lifetime.start.p0(i64 32, ptr %30) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %31) #9
  %1031 = load ptr, ptr %28, align 8, !tbaa !5
  %1032 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1031, i32 0, i32 4
  %1033 = load i32, ptr %1032, align 8, !tbaa !129
  %1034 = call noundef ptr @_ZN11spirv_cross12CompilerGLSL14vector_swizzleEii(i32 noundef %1033, i32 noundef 0)
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EERKS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %31, ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef %1034)
          to label %1035 unwind label %1046

1035:                                             ; preds = %1030
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %30, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %31)
          to label %1036 unwind label %1050

1036:                                             ; preds = %1035
  %1037 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %30) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %31) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #9
  br label %1055

1038:                                             ; preds = %1016
  %1039 = landingpad { ptr, i32 }
          cleanup
  %1040 = extractvalue { ptr, i32 } %1039, 0
  store ptr %1040, ptr %23, align 8
  %1041 = extractvalue { ptr, i32 } %1039, 1
  store i32 %1041, ptr %24, align 4
  br label %1260

1042:                                             ; preds = %1096, %1091, %1089, %1085, %1082, %1067, %1019
  %1043 = landingpad { ptr, i32 }
          cleanup
  %1044 = extractvalue { ptr, i32 } %1043, 0
  store ptr %1044, ptr %23, align 8
  %1045 = extractvalue { ptr, i32 } %1043, 1
  store i32 %1045, ptr %24, align 4
  br label %1259

1046:                                             ; preds = %1030
  %1047 = landingpad { ptr, i32 }
          cleanup
  %1048 = extractvalue { ptr, i32 } %1047, 0
  store ptr %1048, ptr %23, align 8
  %1049 = extractvalue { ptr, i32 } %1047, 1
  store i32 %1049, ptr %24, align 4
  br label %1054

1050:                                             ; preds = %1035
  %1051 = landingpad { ptr, i32 }
          cleanup
  %1052 = extractvalue { ptr, i32 } %1051, 0
  store ptr %1052, ptr %23, align 8
  %1053 = extractvalue { ptr, i32 } %1051, 1
  store i32 %1053, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #9
  br label %1054

1054:                                             ; preds = %1050, %1046
  call void @llvm.lifetime.end.p0(i64 32, ptr %31) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #9
  br label %1259

1055:                                             ; preds = %1036, %1022
  %1056 = load i8, ptr %15, align 1, !tbaa !142, !range !127, !noundef !128
  %1057 = trunc i8 %1056 to i1
  br i1 %1057, label %1058, label %1067

1058:                                             ; preds = %1055
  %1059 = load ptr, ptr %20, align 8, !tbaa !5
  %1060 = icmp ne ptr %1059, null
  br i1 %1060, label %1061, label %1067

1061:                                             ; preds = %1058
  %1062 = load i8, ptr %19, align 1, !tbaa !142, !range !127, !noundef !128
  %1063 = trunc i8 %1062 to i1
  %1064 = load ptr, ptr %20, align 8, !tbaa !5
  %1065 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %1064, i32 0, i32 6
  %1066 = zext i1 %1063 to i8
  store i8 %1066, ptr %1065, align 1, !tbaa !143
  br label %1067

1067:                                             ; preds = %1061, %1058, %1055
  %1068 = load i32, ptr %14, align 4, !tbaa !16
  %1069 = load ptr, ptr %28, align 8, !tbaa !5
  %1070 = load ptr, ptr %885, align 8, !tbaa !145
  %1071 = getelementptr inbounds ptr, ptr %1070, i64 64
  %1072 = load ptr, ptr %1071, align 8
  invoke void %1072(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %1068, ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(336) %1069)
          to label %1073 unwind label %1042

1073:                                             ; preds = %1067
  %1074 = load i8, ptr %15, align 1, !tbaa !142, !range !127, !noundef !128
  %1075 = trunc i8 %1074 to i1
  br i1 %1075, label %1076, label %1082

1076:                                             ; preds = %1073
  %1077 = load ptr, ptr %20, align 8, !tbaa !5
  %1078 = icmp ne ptr %1077, null
  br i1 %1078, label %1079, label %1082

1079:                                             ; preds = %1076
  %1080 = load ptr, ptr %20, align 8, !tbaa !5
  %1081 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %1080, i32 0, i32 6
  store i8 0, ptr %1081, align 1, !tbaa !143
  br label %1082

1082:                                             ; preds = %1079, %1076, %1073
  %1083 = load i32, ptr %13, align 4, !tbaa !16
  %1084 = load i32, ptr %14, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL30unroll_array_from_complex_loadEjjRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %1083, i32 noundef %1084, ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %1085 unwind label %1042

1085:                                             ; preds = %1082
  %1086 = load ptr, ptr %28, align 8, !tbaa !5
  %1087 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler20type_is_opaque_valueERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %885, ptr noundef nonnull align 8 dereferenceable(336) %1086)
          to label %1088 unwind label %1042

1088:                                             ; preds = %1085
  br i1 %1087, label %1099, label %1089

1089:                                             ; preds = %1088
  %1090 = load i32, ptr %14, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %32, i32 noundef %1090)
          to label %1091 unwind label %1042

1091:                                             ; preds = %1089
  %1092 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %32, i32 0, i32 0
  %1093 = load i32, ptr %1092, align 4
  %1094 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 %1093, i32 noundef 5300)
          to label %1095 unwind label %1042

1095:                                             ; preds = %1091
  br i1 %1094, label %1096, label %1099

1096:                                             ; preds = %1095
  %1097 = load i32, ptr %14, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL30convert_non_uniform_expressionERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %21, i32 noundef %1097)
          to label %1098 unwind label %1042

1098:                                             ; preds = %1096
  br label %1099

1099:                                             ; preds = %1098, %1095, %1088
  %1100 = load i8, ptr %15, align 1, !tbaa !142, !range !127, !noundef !128
  %1101 = trunc i8 %1100 to i1
  br i1 %1101, label %1102, label %1111

1102:                                             ; preds = %1099
  %1103 = load ptr, ptr %20, align 8, !tbaa !5
  %1104 = icmp ne ptr %1103, null
  br i1 %1104, label %1105, label %1111

1105:                                             ; preds = %1102
  %1106 = load i8, ptr %19, align 1, !tbaa !142, !range !127, !noundef !128
  %1107 = trunc i8 %1106 to i1
  %1108 = load ptr, ptr %20, align 8, !tbaa !5
  %1109 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %1108, i32 0, i32 6
  %1110 = zext i1 %1107 to i8
  store i8 %1110, ptr %1109, align 1, !tbaa !143
  br label %1111

1111:                                             ; preds = %1105, %1102, %1099
  call void @llvm.lifetime.start.p0(i64 1, ptr %33) #9
  %1112 = load ptr, ptr %20, align 8, !tbaa !5
  %1113 = icmp ne ptr %1112, null
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #9
  br i1 %1113, label %1114, label %1123

1114:                                             ; preds = %1111
  %1115 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 25
  %1116 = load ptr, ptr %20, align 8, !tbaa !5
  %1117 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %1116, i32 0, i32 4
  %1118 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1117)
          to label %1119 unwind label %1150

1119:                                             ; preds = %1114
  store i32 %1118, ptr %34, align 4, !tbaa !16
  %1120 = invoke noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %1115, ptr noundef nonnull align 4 dereferenceable(4) %34)
          to label %1121 unwind label %1150

1121:                                             ; preds = %1119
  %1122 = icmp ne i64 %1120, 0
  br label %1123

1123:                                             ; preds = %1121, %1111
  %1124 = phi i1 [ false, %1111 ], [ %1122, %1121 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #9
  %1125 = zext i1 %1124 to i8
  store i8 %1125, ptr %33, align 1, !tbaa !142
  %1126 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 21
  %1127 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %1126, i32 0, i32 44
  %1128 = load i8, ptr %1127, align 1, !tbaa !147, !range !127, !noundef !128
  %1129 = trunc i8 %1128 to i1
  br i1 %1129, label %1130, label %1158

1130:                                             ; preds = %1123
  %1131 = load i32, ptr %14, align 4, !tbaa !16
  %1132 = load ptr, ptr %885, align 8, !tbaa !145
  %1133 = getelementptr inbounds ptr, ptr %1132, i64 40
  %1134 = load ptr, ptr %1133, align 8
  %1135 = invoke noundef zeroext i1 %1134(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %1131)
          to label %1136 unwind label %1154

1136:                                             ; preds = %1130
  br i1 %1135, label %1158, label %1137

1137:                                             ; preds = %1136
  %1138 = load i8, ptr %33, align 1, !tbaa !142, !range !127, !noundef !128
  %1139 = trunc i8 %1138 to i1
  br i1 %1139, label %1158, label %1140

1140:                                             ; preds = %1137
  %1141 = load i32, ptr %12, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %35, i32 noundef %1141)
          to label %1142 unwind label %1154

1142:                                             ; preds = %1140
  %1143 = load i32, ptr %14, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %36, i32 noundef %1143)
          to label %1144 unwind label %1154

1144:                                             ; preds = %1142
  %1145 = getelementptr inbounds %"class.spirv_cross::TypedID.281", ptr %35, i32 0, i32 0
  %1146 = load i32, ptr %1145, align 4
  %1147 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %36, i32 0, i32 0
  %1148 = load i32, ptr %1147, align 4
  invoke void @_ZN11spirv_cross12CompilerGLSL34rewrite_load_for_wrapped_row_majorERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_7TypedIDILNS_5TypesE1EEENS8_ILS9_0EEE(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %21, i32 %1146, i32 %1148)
          to label %1149 unwind label %1154

1149:                                             ; preds = %1144
  br label %1158

1150:                                             ; preds = %1119, %1114
  %1151 = landingpad { ptr, i32 }
          cleanup
  %1152 = extractvalue { ptr, i32 } %1151, 0
  store ptr %1152, ptr %23, align 8
  %1153 = extractvalue { ptr, i32 } %1151, 1
  store i32 %1153, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #9
  br label %1258

1154:                                             ; preds = %1144, %1142, %1140, %1130
  %1155 = landingpad { ptr, i32 }
          cleanup
  %1156 = extractvalue { ptr, i32 } %1155, 0
  store ptr %1156, ptr %23, align 8
  %1157 = extractvalue { ptr, i32 } %1155, 1
  store i32 %1157, ptr %24, align 4
  br label %1258

1158:                                             ; preds = %1149, %1137, %1136, %1123
  call void @llvm.lifetime.start.p0(i64 1, ptr %37) #9
  %1159 = load i8, ptr %33, align 1, !tbaa !142, !range !127, !noundef !128
  %1160 = trunc i8 %1159 to i1
  br i1 %1160, label %1161, label %1173

1161:                                             ; preds = %1158
  %1162 = load ptr, ptr %28, align 8, !tbaa !5
  %1163 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1162, i32 0, i32 2
  %1164 = load i32, ptr %1163, align 8, !tbaa !148
  %1165 = icmp eq i32 %1164, 15
  br i1 %1165, label %1171, label %1166

1166:                                             ; preds = %1161
  %1167 = load ptr, ptr %28, align 8, !tbaa !5
  %1168 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1167, i32 0, i32 5
  %1169 = load i32, ptr %1168, align 4, !tbaa !149
  %1170 = icmp ugt i32 %1169, 1
  br label %1171

1171:                                             ; preds = %1166, %1161
  %1172 = phi i1 [ true, %1161 ], [ %1170, %1166 ]
  br label %1173

1173:                                             ; preds = %1171, %1158
  %1174 = phi i1 [ false, %1158 ], [ %1172, %1171 ]
  %1175 = zext i1 %1174 to i8
  store i8 %1175, ptr %37, align 1, !tbaa !142
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #9
  store ptr null, ptr %38, align 8, !tbaa !5
  %1176 = load i8, ptr %15, align 1, !tbaa !142, !range !127, !noundef !128
  %1177 = trunc i8 %1176 to i1
  br i1 %1177, label %1201, label %1178

1178:                                             ; preds = %1173
  %1179 = load i32, ptr %14, align 4, !tbaa !16
  %1180 = invoke noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL34expression_is_non_value_type_arrayEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %1179)
          to label %1181 unwind label %1197

1181:                                             ; preds = %1178
  br i1 %1180, label %1182, label %1201

1182:                                             ; preds = %1181
  %1183 = load i32, ptr %12, align 4, !tbaa !16
  %1184 = load i32, ptr %13, align 4, !tbaa !16
  %1185 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL39emit_uninitialized_temporary_expressionEjj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %1183, i32 noundef %1184)
          to label %1186 unwind label %1197

1186:                                             ; preds = %1182
  store ptr %1185, ptr %38, align 8, !tbaa !5
  %1187 = load i32, ptr %13, align 4, !tbaa !16
  %1188 = load i32, ptr %14, align 4, !tbaa !16
  %1189 = load i32, ptr %14, align 4, !tbaa !16
  %1190 = invoke noundef i32 @_ZN11spirv_cross12CompilerGLSL38get_expression_effective_storage_classEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %1189)
          to label %1191 unwind label %1197

1191:                                             ; preds = %1186
  %1192 = load ptr, ptr %885, align 8, !tbaa !145
  %1193 = getelementptr inbounds ptr, ptr %1192, i64 55
  %1194 = load ptr, ptr %1193, align 8
  %1195 = invoke noundef zeroext i1 %1194(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef null, i32 noundef %1187, i32 noundef %1188, i32 noundef 7, i32 noundef %1190)
          to label %1196 unwind label %1197

1196:                                             ; preds = %1191
  br label %1211

1197:                                             ; preds = %1253, %1247, %1244, %1242, %1239, %1235, %1231, %1228, %1224, %1211, %1201, %1191, %1186, %1182, %1178
  %1198 = landingpad { ptr, i32 }
          cleanup
  %1199 = extractvalue { ptr, i32 } %1198, 0
  store ptr %1199, ptr %23, align 8
  %1200 = extractvalue { ptr, i32 } %1198, 1
  store i32 %1200, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %37) #9
  br label %1258

1201:                                             ; preds = %1181, %1173
  %1202 = load i32, ptr %12, align 4, !tbaa !16
  %1203 = load i32, ptr %13, align 4, !tbaa !16
  %1204 = load i8, ptr %15, align 1, !tbaa !142, !range !127, !noundef !128
  %1205 = trunc i8 %1204 to i1
  %1206 = load i8, ptr %37, align 1, !tbaa !142, !range !127, !noundef !128
  %1207 = trunc i8 %1206 to i1
  %1208 = xor i1 %1207, true
  %1209 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %1202, i32 noundef %1203, ptr noundef nonnull align 8 dereferenceable(32) %21, i1 noundef zeroext %1205, i1 noundef zeroext %1208)
          to label %1210 unwind label %1197

1210:                                             ; preds = %1201
  store ptr %1209, ptr %38, align 8, !tbaa !5
  br label %1211

1211:                                             ; preds = %1210, %1196
  %1212 = load i8, ptr %18, align 1, !tbaa !142, !range !127, !noundef !128
  %1213 = trunc i8 %1212 to i1
  %1214 = load ptr, ptr %38, align 8, !tbaa !5
  %1215 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %1214, i32 0, i32 6
  %1216 = zext i1 %1213 to i8
  store i8 %1216, ptr %1215, align 1, !tbaa !143
  %1217 = load i32, ptr %13, align 4, !tbaa !16
  %1218 = load i32, ptr %14, align 4, !tbaa !16
  %1219 = load i8, ptr %15, align 1, !tbaa !142, !range !127, !noundef !128
  %1220 = trunc i8 %1219 to i1
  invoke void @_ZN11spirv_cross8Compiler13register_readEjjb(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %1217, i32 noundef %1218, i1 noundef zeroext %1220)
          to label %1221 unwind label %1197

1221:                                             ; preds = %1211
  %1222 = load i8, ptr %15, align 1, !tbaa !142, !range !127, !noundef !128
  %1223 = trunc i8 %1222 to i1
  br i1 %1223, label %1224, label %1242

1224:                                             ; preds = %1221
  %1225 = load i32, ptr %14, align 4, !tbaa !16
  %1226 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler23has_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %1225, i32 noundef 2)
          to label %1227 unwind label %1197

1227:                                             ; preds = %1224
  br i1 %1226, label %1228, label %1231

1228:                                             ; preds = %1227
  %1229 = load i32, ptr %13, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross8Compiler23set_extended_decorationEjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %1229, i32 noundef 2, i32 noundef 0)
          to label %1230 unwind label %1197

1230:                                             ; preds = %1228
  br label %1231

1231:                                             ; preds = %1230, %1227
  %1232 = load i32, ptr %14, align 4, !tbaa !16
  %1233 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler23has_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %1232, i32 noundef 1)
          to label %1234 unwind label %1197

1234:                                             ; preds = %1231
  br i1 %1233, label %1235, label %1241

1235:                                             ; preds = %1234
  %1236 = load i32, ptr %13, align 4, !tbaa !16
  %1237 = load i32, ptr %14, align 4, !tbaa !16
  %1238 = invoke noundef i32 @_ZNK11spirv_cross8Compiler23get_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %1237, i32 noundef 1)
          to label %1239 unwind label %1197

1239:                                             ; preds = %1235
  invoke void @_ZN11spirv_cross8Compiler23set_extended_decorationEjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %1236, i32 noundef 1, i32 noundef %1238)
          to label %1240 unwind label %1197

1240:                                             ; preds = %1239
  br label %1241

1241:                                             ; preds = %1240, %1234
  br label %1247

1242:                                             ; preds = %1221
  %1243 = load i32, ptr %13, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross8Compiler25unset_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %1243, i32 noundef 2)
          to label %1244 unwind label %1197

1244:                                             ; preds = %1242
  %1245 = load i32, ptr %13, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross8Compiler25unset_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %1245, i32 noundef 1)
          to label %1246 unwind label %1197

1246:                                             ; preds = %1244
  br label %1247

1247:                                             ; preds = %1246, %1241
  %1248 = load i32, ptr %13, align 4, !tbaa !16
  %1249 = load i32, ptr %14, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %1248, i32 noundef %1249)
          to label %1250 unwind label %1197

1250:                                             ; preds = %1247
  %1251 = load i8, ptr %15, align 1, !tbaa !142, !range !127, !noundef !128
  %1252 = trunc i8 %1251 to i1
  br i1 %1252, label %1253, label %1257

1253:                                             ; preds = %1250
  %1254 = load ptr, ptr %38, align 8, !tbaa !5
  %1255 = load i32, ptr %14, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross8Compiler27add_implied_read_expressionERNS_14SPIRExpressionEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, ptr noundef nonnull align 8 dereferenceable(236) %1254, i32 noundef %1255)
          to label %1256 unwind label %1197

1256:                                             ; preds = %1253
  br label %1257

1257:                                             ; preds = %1256, %1250
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %37) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %33) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %21) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #9
  br label %11526

1258:                                             ; preds = %1197, %1154, %1150
  call void @llvm.lifetime.end.p0(i64 1, ptr %33) #9
  br label %1259

1259:                                             ; preds = %1258, %1054, %1042
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #9
  br label %1260

1260:                                             ; preds = %1259, %1038
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #9
  br label %1261

1261:                                             ; preds = %1260, %1012, %1004, %1000
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #9
  br label %1262

1262:                                             ; preds = %1261, %996
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %21) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #9
  br label %11527

1263:                                             ; preds = %919, %919, %919
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #9
  %1264 = load ptr, ptr %5, align 8, !tbaa !5
  %1265 = getelementptr inbounds i32, ptr %1264, i64 2
  %1266 = load i32, ptr %1265, align 4, !tbaa !16
  %1267 = call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_12SPIRVariableEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %1266)
  store ptr %1267, ptr %39, align 8, !tbaa !5
  %1268 = load ptr, ptr %39, align 8, !tbaa !5
  %1269 = icmp ne ptr %1268, null
  br i1 %1269, label %1270, label %1274

1270:                                             ; preds = %1263
  %1271 = load ptr, ptr %39, align 8, !tbaa !5
  %1272 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1271, i32 0, i32 1
  %1273 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1272)
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %1273)
  br label %1274

1274:                                             ; preds = %1270, %1263
  call void @llvm.lifetime.start.p0(i64 16, ptr %40) #9
  call void @_ZN11spirv_cross15AccessChainMetaC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %40) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %41) #9
  %1275 = load i32, ptr %6, align 4, !tbaa !13
  %1276 = icmp eq i32 %1275, 67
  %1277 = zext i1 %1276 to i8
  store i8 %1277, ptr %41, align 1, !tbaa !142
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #9
  %1278 = load ptr, ptr %5, align 8, !tbaa !5
  %1279 = getelementptr inbounds i32, ptr %1278, i64 0
  %1280 = load i32, ptr %1279, align 4, !tbaa !16
  %1281 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %1280)
  store ptr %1281, ptr %42, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %43) #9
  %1282 = load ptr, ptr %5, align 8, !tbaa !5
  %1283 = getelementptr inbounds i32, ptr %1282, i64 2
  %1284 = load i32, ptr %1283, align 4, !tbaa !16
  %1285 = load ptr, ptr %5, align 8, !tbaa !5
  %1286 = getelementptr inbounds i32, ptr %1285, i64 3
  %1287 = load i32, ptr %7, align 4, !tbaa !16
  %1288 = sub i32 %1287, 3
  %1289 = load ptr, ptr %42, align 8, !tbaa !5
  %1290 = load i8, ptr %41, align 1, !tbaa !142, !range !127, !noundef !128
  %1291 = trunc i8 %1290 to i1
  call void @_ZN11spirv_cross12CompilerGLSL12access_chainB5cxx11EjPKjjRKNS_8SPIRTypeEPNS_15AccessChainMetaEb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %43, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %1284, ptr noundef %1286, i32 noundef %1288, ptr noundef nonnull align 8 dereferenceable(336) %1289, ptr noundef %40, i1 noundef zeroext %1291)
  call void @llvm.lifetime.start.p0(i64 1, ptr %44) #9
  store i8 0, ptr %44, align 1, !tbaa !142
  %1292 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 25
  %1293 = load ptr, ptr %5, align 8, !tbaa !5
  %1294 = getelementptr inbounds i32, ptr %1293, i64 2
  %1295 = invoke noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %1292, ptr noundef nonnull align 4 dereferenceable(4) %1294)
          to label %1296 unwind label %1310

1296:                                             ; preds = %1274
  %1297 = icmp ne i64 %1295, 0
  br i1 %1297, label %1298, label %1314

1298:                                             ; preds = %1296
  %1299 = load ptr, ptr %42, align 8, !tbaa !5
  %1300 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1299, i32 0, i32 2
  %1301 = load i32, ptr %1300, align 8, !tbaa !148
  %1302 = icmp eq i32 %1301, 15
  br i1 %1302, label %1303, label %1314

1303:                                             ; preds = %1298
  %1304 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 21
  %1305 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %1304, i32 0, i32 25
  %1306 = load i8, ptr %1305, align 2, !tbaa !150, !range !127, !noundef !128
  %1307 = trunc i8 %1306 to i1
  %1308 = xor i1 %1307, true
  %1309 = zext i1 %1308 to i8
  store i8 %1309, ptr %44, align 1, !tbaa !142
  br label %1314

1310:                                             ; preds = %1274
  %1311 = landingpad { ptr, i32 }
          cleanup
  %1312 = extractvalue { ptr, i32 } %1311, 0
  store ptr %1312, ptr %23, align 8
  %1313 = extractvalue { ptr, i32 } %1311, 1
  store i32 %1313, ptr %24, align 4
  br label %1523

1314:                                             ; preds = %1303, %1298, %1296
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #9
  %1315 = load i8, ptr %44, align 1, !tbaa !142, !range !127, !noundef !128
  %1316 = trunc i8 %1315 to i1
  call void @llvm.lifetime.start.p0(i64 1, ptr %46) #9
  br i1 %1316, label %1317, label %1326

1317:                                             ; preds = %1314
  %1318 = load ptr, ptr %5, align 8, !tbaa !5
  %1319 = getelementptr inbounds i32, ptr %1318, i64 0
  %1320 = load i32, ptr %1319, align 4, !tbaa !16
  %1321 = load ptr, ptr %5, align 8, !tbaa !5
  %1322 = getelementptr inbounds i32, ptr %1321, i64 1
  %1323 = load i32, ptr %1322, align 4, !tbaa !16
  %1324 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %1320, i32 noundef %1323, ptr noundef nonnull align 8 dereferenceable(32) %43, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %1325 unwind label %1382

1325:                                             ; preds = %1317
  br label %1340

1326:                                             ; preds = %1314
  %1327 = load ptr, ptr %5, align 8, !tbaa !5
  %1328 = getelementptr inbounds i32, ptr %1327, i64 1
  %1329 = load i32, ptr %1328, align 4, !tbaa !16
  %1330 = load ptr, ptr %5, align 8, !tbaa !5
  %1331 = getelementptr inbounds i32, ptr %1330, i64 0
  %1332 = load ptr, ptr %5, align 8, !tbaa !5
  %1333 = getelementptr inbounds i32, ptr %1332, i64 2
  %1334 = load i32, ptr %1333, align 4, !tbaa !16
  %1335 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %1334)
          to label %1336 unwind label %1386

1336:                                             ; preds = %1326
  %1337 = zext i1 %1335 to i8
  store i8 %1337, ptr %46, align 1, !tbaa !142
  %1338 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross8Compiler3setINS_14SPIRExpressionEJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKjbEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %1329, ptr noundef nonnull align 8 dereferenceable(32) %43, ptr noundef nonnull align 4 dereferenceable(4) %1331, ptr noundef nonnull align 1 dereferenceable(1) %46)
          to label %1339 unwind label %1386

1339:                                             ; preds = %1336
  br label %1340

1340:                                             ; preds = %1339, %1325
  %1341 = phi ptr [ %1324, %1325 ], [ %1338, %1339 ]
  call void @llvm.lifetime.end.p0(i64 1, ptr %46) #9
  store ptr %1341, ptr %45, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #9
  %1342 = load ptr, ptr %5, align 8, !tbaa !5
  %1343 = getelementptr inbounds i32, ptr %1342, i64 2
  %1344 = load i32, ptr %1343, align 4, !tbaa !16
  %1345 = invoke noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %1344)
          to label %1346 unwind label %1390

1346:                                             ; preds = %1340
  store ptr %1345, ptr %47, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #9
  %1347 = load ptr, ptr %47, align 8, !tbaa !5
  %1348 = icmp ne ptr %1347, null
  br i1 %1348, label %1349, label %1352

1349:                                             ; preds = %1346
  %1350 = load ptr, ptr %47, align 8, !tbaa !5
  %1351 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1350, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %48, ptr align 8 %1351, i64 4, i1 false), !tbaa.struct !151
  br label %1357

1352:                                             ; preds = %1346
  %1353 = load ptr, ptr %5, align 8, !tbaa !5
  %1354 = getelementptr inbounds i32, ptr %1353, i64 2
  %1355 = load i32, ptr %1354, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %48, i32 noundef %1355)
          to label %1356 unwind label %1394

1356:                                             ; preds = %1352
  br label %1357

1357:                                             ; preds = %1356, %1349
  %1358 = load ptr, ptr %45, align 8, !tbaa !5
  %1359 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %1358, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1359, ptr align 4 %48, i64 4, i1 false), !tbaa.struct !151
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #9
  %1360 = getelementptr inbounds %"struct.spirv_cross::AccessChainMeta", ptr %40, i32 0, i32 1
  %1361 = load i8, ptr %1360, align 4, !tbaa !152, !range !127, !noundef !128
  %1362 = trunc i8 %1361 to i1
  %1363 = load ptr, ptr %45, align 8, !tbaa !5
  %1364 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %1363, i32 0, i32 6
  %1365 = zext i1 %1362 to i8
  store i8 %1365, ptr %1364, align 1, !tbaa !143
  %1366 = load ptr, ptr %45, align 8, !tbaa !5
  %1367 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %1366, i32 0, i32 7
  store i8 1, ptr %1367, align 2, !tbaa !155
  %1368 = getelementptr inbounds %"struct.spirv_cross::AccessChainMeta", ptr %40, i32 0, i32 6
  %1369 = load i8, ptr %1368, align 1, !tbaa !156, !range !127, !noundef !128
  %1370 = trunc i8 %1369 to i1
  %1371 = load ptr, ptr %45, align 8, !tbaa !5
  %1372 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %1371, i32 0, i32 8
  %1373 = zext i1 %1370 to i8
  store i8 %1373, ptr %1372, align 1, !tbaa !157
  %1374 = getelementptr inbounds %"struct.spirv_cross::AccessChainMeta", ptr %40, i32 0, i32 2
  %1375 = load i8, ptr %1374, align 1, !tbaa !158, !range !127, !noundef !128
  %1376 = trunc i8 %1375 to i1
  br i1 %1376, label %1377, label %1398

1377:                                             ; preds = %1357
  %1378 = load ptr, ptr %5, align 8, !tbaa !5
  %1379 = getelementptr inbounds i32, ptr %1378, i64 1
  %1380 = load i32, ptr %1379, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross8Compiler23set_extended_decorationEjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %1380, i32 noundef 2, i32 noundef 0)
          to label %1381 unwind label %1390

1381:                                             ; preds = %1377
  br label %1398

1382:                                             ; preds = %1317
  %1383 = landingpad { ptr, i32 }
          cleanup
  %1384 = extractvalue { ptr, i32 } %1383, 0
  store ptr %1384, ptr %23, align 8
  %1385 = extractvalue { ptr, i32 } %1383, 1
  store i32 %1385, ptr %24, align 4
  br label %1522

1386:                                             ; preds = %1336, %1326
  %1387 = landingpad { ptr, i32 }
          cleanup
  %1388 = extractvalue { ptr, i32 } %1387, 0
  store ptr %1388, ptr %23, align 8
  %1389 = extractvalue { ptr, i32 } %1387, 1
  store i32 %1389, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %46) #9
  br label %1522

1390:                                             ; preds = %1514, %1467, %1462, %1456, %1452, %1444, %1440, %1425, %1417, %1413, %1402, %1377, %1340
  %1391 = landingpad { ptr, i32 }
          cleanup
  %1392 = extractvalue { ptr, i32 } %1391, 0
  store ptr %1392, ptr %23, align 8
  %1393 = extractvalue { ptr, i32 } %1391, 1
  store i32 %1393, ptr %24, align 4
  br label %1521

1394:                                             ; preds = %1352
  %1395 = landingpad { ptr, i32 }
          cleanup
  %1396 = extractvalue { ptr, i32 } %1395, 0
  store ptr %1396, ptr %23, align 8
  %1397 = extractvalue { ptr, i32 } %1395, 1
  store i32 %1397, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #9
  br label %1521

1398:                                             ; preds = %1381, %1357
  %1399 = getelementptr inbounds %"struct.spirv_cross::AccessChainMeta", ptr %40, i32 0, i32 0
  %1400 = load i32, ptr %1399, align 4, !tbaa !159
  %1401 = icmp ne i32 %1400, 0
  br i1 %1401, label %1402, label %1409

1402:                                             ; preds = %1398
  %1403 = load ptr, ptr %5, align 8, !tbaa !5
  %1404 = getelementptr inbounds i32, ptr %1403, i64 1
  %1405 = load i32, ptr %1404, align 4, !tbaa !16
  %1406 = getelementptr inbounds %"struct.spirv_cross::AccessChainMeta", ptr %40, i32 0, i32 0
  %1407 = load i32, ptr %1406, align 4, !tbaa !159
  invoke void @_ZN11spirv_cross8Compiler23set_extended_decorationEjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %1405, i32 noundef 1, i32 noundef %1407)
          to label %1408 unwind label %1390

1408:                                             ; preds = %1402
  br label %1409

1409:                                             ; preds = %1408, %1398
  %1410 = getelementptr inbounds %"struct.spirv_cross::AccessChainMeta", ptr %40, i32 0, i32 3
  %1411 = load i8, ptr %1410, align 2, !tbaa !160, !range !127, !noundef !128
  %1412 = trunc i8 %1411 to i1
  br i1 %1412, label %1413, label %1421

1413:                                             ; preds = %1409
  %1414 = load ptr, ptr %5, align 8, !tbaa !5
  %1415 = getelementptr inbounds i32, ptr %1414, i64 1
  %1416 = load i32, ptr %1415, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %49, i32 noundef %1416)
          to label %1417 unwind label %1390

1417:                                             ; preds = %1413
  %1418 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %49, i32 0, i32 0
  %1419 = load i32, ptr %1418, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 %1419, i32 noundef 18, i32 noundef 0)
          to label %1420 unwind label %1390

1420:                                             ; preds = %1417
  br label %1421

1421:                                             ; preds = %1420, %1409
  %1422 = getelementptr inbounds %"struct.spirv_cross::AccessChainMeta", ptr %40, i32 0, i32 4
  %1423 = load i8, ptr %1422, align 1, !tbaa !161, !range !127, !noundef !128
  %1424 = trunc i8 %1423 to i1
  br i1 %1424, label %1425, label %1431

1425:                                             ; preds = %1421
  %1426 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 26
  %1427 = load ptr, ptr %5, align 8, !tbaa !5
  %1428 = getelementptr inbounds i32, ptr %1427, i64 1
  %1429 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt13unordered_mapIjbSt4hashIjESt8equal_toIjESaISt4pairIKjbEEEixERS5_(ptr noundef nonnull align 8 dereferenceable(56) %1426, ptr noundef nonnull align 4 dereferenceable(4) %1428)
          to label %1430 unwind label %1390

1430:                                             ; preds = %1425
  store i8 1, ptr %1429, align 1, !tbaa !142
  br label %1431

1431:                                             ; preds = %1430, %1421
  %1432 = getelementptr inbounds %"struct.spirv_cross::AccessChainMeta", ptr %40, i32 0, i32 5
  %1433 = load i8, ptr %1432, align 4, !tbaa !162, !range !127, !noundef !128
  %1434 = trunc i8 %1433 to i1
  br i1 %1434, label %1435, label %1448

1435:                                             ; preds = %1431
  %1436 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 21
  %1437 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %1436, i32 0, i32 49
  %1438 = load i8, ptr %1437, align 2, !tbaa !163, !range !127, !noundef !128
  %1439 = trunc i8 %1438 to i1
  br i1 %1439, label %1440, label %1448

1440:                                             ; preds = %1435
  %1441 = load ptr, ptr %5, align 8, !tbaa !5
  %1442 = getelementptr inbounds i32, ptr %1441, i64 1
  %1443 = load i32, ptr %1442, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %50, i32 noundef %1443)
          to label %1444 unwind label %1390

1444:                                             ; preds = %1440
  %1445 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %50, i32 0, i32 0
  %1446 = load i32, ptr %1445, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 %1446, i32 noundef 0, i32 noundef 0)
          to label %1447 unwind label %1390

1447:                                             ; preds = %1444
  br label %1448

1448:                                             ; preds = %1447, %1435, %1431
  %1449 = getelementptr inbounds %"struct.spirv_cross::AccessChainMeta", ptr %40, i32 0, i32 7
  %1450 = load i8, ptr %1449, align 2, !tbaa !164, !range !127, !noundef !128
  %1451 = trunc i8 %1450 to i1
  br i1 %1451, label %1452, label %1462

1452:                                             ; preds = %1448
  %1453 = load ptr, ptr %5, align 8, !tbaa !5
  %1454 = getelementptr inbounds i32, ptr %1453, i64 1
  %1455 = load i32, ptr %1454, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %51, i32 noundef %1455)
          to label %1456 unwind label %1390

1456:                                             ; preds = %1452
  %1457 = getelementptr inbounds %"struct.spirv_cross::AccessChainMeta", ptr %40, i32 0, i32 8
  %1458 = load i32, ptr %1457, align 4, !tbaa !165
  %1459 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %51, i32 0, i32 0
  %1460 = load i32, ptr %1459, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 %1460, i32 noundef 11, i32 noundef %1458)
          to label %1461 unwind label %1390

1461:                                             ; preds = %1456
  br label %1462

1462:                                             ; preds = %1461, %1448
  %1463 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %885, i32 0, i32 16
  %1464 = load ptr, ptr %5, align 8, !tbaa !5
  %1465 = getelementptr inbounds i32, ptr %1464, i64 1
  %1466 = invoke { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %1463, ptr noundef nonnull align 4 dereferenceable(4) %1465)
          to label %1467 unwind label %1390

1467:                                             ; preds = %1462
  %1468 = getelementptr inbounds { ptr, i8 }, ptr %52, i32 0, i32 0
  %1469 = extractvalue { ptr, i8 } %1466, 0
  store ptr %1469, ptr %1468, align 8
  %1470 = getelementptr inbounds { ptr, i8 }, ptr %52, i32 0, i32 1
  %1471 = extractvalue { ptr, i8 } %1466, 1
  store i8 %1471, ptr %1470, align 8
  %1472 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %885, i32 0, i32 17
  %1473 = load ptr, ptr %5, align 8, !tbaa !5
  %1474 = getelementptr inbounds i32, ptr %1473, i64 1
  %1475 = invoke { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %1472, ptr noundef nonnull align 4 dereferenceable(4) %1474)
          to label %1476 unwind label %1390

1476:                                             ; preds = %1467
  %1477 = getelementptr inbounds { ptr, i8 }, ptr %53, i32 0, i32 0
  %1478 = extractvalue { ptr, i8 } %1475, 0
  store ptr %1478, ptr %1477, align 8
  %1479 = getelementptr inbounds { ptr, i8 }, ptr %53, i32 0, i32 1
  %1480 = extractvalue { ptr, i8 } %1475, 1
  store i8 %1480, ptr %1479, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #9
  store i32 2, ptr %54, align 4, !tbaa !16
  br label %1481

1481:                                             ; preds = %1503, %1476
  %1482 = load i32, ptr %54, align 4, !tbaa !16
  %1483 = load i32, ptr %7, align 4, !tbaa !16
  %1484 = icmp ult i32 %1482, %1483
  br i1 %1484, label %1486, label %1485

1485:                                             ; preds = %1481
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #9
  br label %1510

1486:                                             ; preds = %1481
  %1487 = load ptr, ptr %5, align 8, !tbaa !5
  %1488 = getelementptr inbounds i32, ptr %1487, i64 1
  %1489 = load i32, ptr %1488, align 4, !tbaa !16
  %1490 = load ptr, ptr %5, align 8, !tbaa !5
  %1491 = load i32, ptr %54, align 4, !tbaa !16
  %1492 = zext i32 %1491 to i64
  %1493 = getelementptr inbounds i32, ptr %1490, i64 %1492
  %1494 = load i32, ptr %1493, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %1489, i32 noundef %1494)
          to label %1495 unwind label %1506

1495:                                             ; preds = %1486
  %1496 = load ptr, ptr %45, align 8, !tbaa !5
  %1497 = load ptr, ptr %5, align 8, !tbaa !5
  %1498 = load i32, ptr %54, align 4, !tbaa !16
  %1499 = zext i32 %1498 to i64
  %1500 = getelementptr inbounds i32, ptr %1497, i64 %1499
  %1501 = load i32, ptr %1500, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross8Compiler27add_implied_read_expressionERNS_14SPIRExpressionEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, ptr noundef nonnull align 8 dereferenceable(236) %1496, i32 noundef %1501)
          to label %1502 unwind label %1506

1502:                                             ; preds = %1495
  br label %1503

1503:                                             ; preds = %1502
  %1504 = load i32, ptr %54, align 4, !tbaa !16
  %1505 = add i32 %1504, 1
  store i32 %1505, ptr %54, align 4, !tbaa !16
  br label %1481, !llvm.loop !166

1506:                                             ; preds = %1495, %1486
  %1507 = landingpad { ptr, i32 }
          cleanup
  %1508 = extractvalue { ptr, i32 } %1507, 0
  store ptr %1508, ptr %23, align 8
  %1509 = extractvalue { ptr, i32 } %1507, 1
  store i32 %1509, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #9
  br label %1521

1510:                                             ; preds = %1485
  %1511 = load ptr, ptr %45, align 8, !tbaa !5
  %1512 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %1511, i32 0, i32 10
  %1513 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %1512) #9
  br i1 %1513, label %1514, label %1520

1514:                                             ; preds = %1510
  %1515 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %885, i32 0, i32 16
  %1516 = load ptr, ptr %5, align 8, !tbaa !5
  %1517 = getelementptr inbounds i32, ptr %1516, i64 1
  %1518 = invoke noundef i64 @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5eraseERKj(ptr noundef nonnull align 8 dereferenceable(56) %1515, ptr noundef nonnull align 4 dereferenceable(4) %1517)
          to label %1519 unwind label %1390

1519:                                             ; preds = %1514
  br label %1520

1520:                                             ; preds = %1519, %1510
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %44) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %43) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %41) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %40) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #9
  br label %11526

1521:                                             ; preds = %1506, %1394, %1390
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #9
  br label %1522

1522:                                             ; preds = %1521, %1386, %1382
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #9
  br label %1523

1523:                                             ; preds = %1522, %1310
  call void @llvm.lifetime.end.p0(i64 1, ptr %44) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %43) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %41) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %40) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #9
  br label %11527

1524:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #9
  %1525 = load ptr, ptr %5, align 8, !tbaa !5
  %1526 = getelementptr inbounds i32, ptr %1525, i64 0
  %1527 = load i32, ptr %1526, align 4, !tbaa !16
  %1528 = call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_12SPIRVariableEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %1527)
  store ptr %1528, ptr %55, align 8, !tbaa !5
  %1529 = load ptr, ptr %55, align 8, !tbaa !5
  %1530 = icmp ne ptr %1529, null
  br i1 %1530, label %1531, label %1542

1531:                                             ; preds = %1524
  %1532 = load ptr, ptr %55, align 8, !tbaa !5
  %1533 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %1532, i32 0, i32 8
  %1534 = load i8, ptr %1533, align 1, !tbaa !168, !range !127, !noundef !128
  %1535 = trunc i8 %1534 to i1
  br i1 %1535, label %1536, label %1542

1536:                                             ; preds = %1531
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #9
  %1537 = load ptr, ptr %5, align 8, !tbaa !5
  %1538 = getelementptr inbounds i32, ptr %1537, i64 1
  %1539 = load i32, ptr %1538, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %56, i32 noundef %1539)
  %1540 = load ptr, ptr %55, align 8, !tbaa !5
  %1541 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %1540, i32 0, i32 9
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1541, ptr align 4 %56, i64 4, i1 false), !tbaa.struct !151
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #9
  br label %1604

1542:                                             ; preds = %1531, %1524
  %1543 = load ptr, ptr %55, align 8, !tbaa !5
  %1544 = icmp ne ptr %1543, null
  br i1 %1544, label %1545, label %1561

1545:                                             ; preds = %1542
  %1546 = load ptr, ptr %55, align 8, !tbaa !5
  %1547 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %1546, i32 0, i32 17
  %1548 = load i8, ptr %1547, align 4, !tbaa !172, !range !127, !noundef !128
  %1549 = trunc i8 %1548 to i1
  br i1 %1549, label %1550, label %1561

1550:                                             ; preds = %1545
  %1551 = load ptr, ptr %55, align 8, !tbaa !5
  %1552 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %1551, i32 0, i32 18
  %1553 = load i8, ptr %1552, align 1, !tbaa !173, !range !127, !noundef !128
  %1554 = trunc i8 %1553 to i1
  br i1 %1554, label %1561, label %1555

1555:                                             ; preds = %1550
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #9
  %1556 = load ptr, ptr %5, align 8, !tbaa !5
  %1557 = getelementptr inbounds i32, ptr %1556, i64 1
  %1558 = load i32, ptr %1557, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %57, i32 noundef %1558)
  %1559 = load ptr, ptr %55, align 8, !tbaa !5
  %1560 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %1559, i32 0, i32 9
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1560, ptr align 4 %57, i64 4, i1 false), !tbaa.struct !151
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #9
  br label %1603

1561:                                             ; preds = %1550, %1545, %1542
  %1562 = load ptr, ptr %55, align 8, !tbaa !5
  %1563 = icmp ne ptr %1562, null
  br i1 %1563, label %1564, label %1575

1564:                                             ; preds = %1561
  %1565 = load ptr, ptr %55, align 8, !tbaa !5
  %1566 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %1565, i32 0, i32 14
  %1567 = load i8, ptr %1566, align 1, !tbaa !174, !range !127, !noundef !128
  %1568 = trunc i8 %1567 to i1
  br i1 %1568, label %1569, label %1575

1569:                                             ; preds = %1564
  %1570 = load ptr, ptr %55, align 8, !tbaa !5
  %1571 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %1570, i32 0, i32 9
  %1572 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1571)
  %1573 = icmp ne i32 %1572, 0
  br i1 %1573, label %1574, label %1575

1574:                                             ; preds = %1569
  br label %1602

1575:                                             ; preds = %1569, %1564, %1561
  %1576 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 26
  %1577 = load ptr, ptr %5, align 8, !tbaa !5
  %1578 = getelementptr inbounds i32, ptr %1577, i64 0
  %1579 = call noundef i64 @_ZNKSt13unordered_mapIjbSt4hashIjESt8equal_toIjESaISt4pairIKjbEEE5countERS5_(ptr noundef nonnull align 8 dereferenceable(56) %1576, ptr noundef nonnull align 4 dereferenceable(4) %1578)
  %1580 = icmp ne i64 %1579, 0
  br i1 %1580, label %1581, label %1591

1581:                                             ; preds = %1575
  %1582 = load ptr, ptr %5, align 8, !tbaa !5
  %1583 = getelementptr inbounds i32, ptr %1582, i64 0
  %1584 = load i32, ptr %1583, align 4, !tbaa !16
  %1585 = load ptr, ptr %5, align 8, !tbaa !5
  %1586 = getelementptr inbounds i32, ptr %1585, i64 1
  %1587 = load i32, ptr %1586, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL22store_flattened_structEjj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %1584, i32 noundef %1587)
  %1588 = load ptr, ptr %5, align 8, !tbaa !5
  %1589 = getelementptr inbounds i32, ptr %1588, i64 0
  %1590 = load i32, ptr %1589, align 4, !tbaa !16
  call void @_ZN11spirv_cross8Compiler14register_writeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %1590)
  br label %1601

1591:                                             ; preds = %1575
  %1592 = load ptr, ptr %5, align 8, !tbaa !5
  %1593 = getelementptr inbounds i32, ptr %1592, i64 0
  %1594 = load i32, ptr %1593, align 4, !tbaa !16
  %1595 = load ptr, ptr %5, align 8, !tbaa !5
  %1596 = getelementptr inbounds i32, ptr %1595, i64 1
  %1597 = load i32, ptr %1596, align 4, !tbaa !16
  %1598 = load ptr, ptr %885, align 8, !tbaa !145
  %1599 = getelementptr inbounds ptr, ptr %1598, i64 65
  %1600 = load ptr, ptr %1599, align 8
  call void %1600(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %1594, i32 noundef %1597)
  br label %1601

1601:                                             ; preds = %1591, %1581
  br label %1602

1602:                                             ; preds = %1601, %1574
  br label %1603

1603:                                             ; preds = %1602, %1555
  br label %1604

1604:                                             ; preds = %1603, %1536
  %1605 = load ptr, ptr %5, align 8, !tbaa !5
  %1606 = getelementptr inbounds i32, ptr %1605, i64 1
  %1607 = load i32, ptr %1606, align 4, !tbaa !16
  %1608 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %1607)
  %1609 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1608, i32 0, i32 9
  %1610 = load i8, ptr %1609, align 4, !tbaa !175, !range !127, !noundef !128
  %1611 = trunc i8 %1610 to i1
  br i1 %1611, label %1612, label %1616

1612:                                             ; preds = %1604
  %1613 = load ptr, ptr %5, align 8, !tbaa !5
  %1614 = getelementptr inbounds i32, ptr %1613, i64 1
  %1615 = load i32, ptr %1614, align 4, !tbaa !16
  call void @_ZN11spirv_cross8Compiler14register_writeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %1615)
  br label %1616

1616:                                             ; preds = %1612, %1604
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #9
  br label %11526

1617:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #9
  %1618 = load ptr, ptr %5, align 8, !tbaa !5
  %1619 = getelementptr inbounds i32, ptr %1618, i64 0
  %1620 = load i32, ptr %1619, align 4, !tbaa !16
  store i32 %1620, ptr %58, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #9
  %1621 = load ptr, ptr %5, align 8, !tbaa !5
  %1622 = getelementptr inbounds i32, ptr %1621, i64 1
  %1623 = load i32, ptr %1622, align 4, !tbaa !16
  store i32 %1623, ptr %59, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %60) #9
  %1624 = load ptr, ptr %5, align 8, !tbaa !5
  %1625 = getelementptr inbounds i32, ptr %1624, i64 2
  %1626 = load i32, ptr %1625, align 4, !tbaa !16
  %1627 = load ptr, ptr %5, align 8, !tbaa !5
  %1628 = getelementptr inbounds i32, ptr %1627, i64 3
  %1629 = load i32, ptr %7, align 4, !tbaa !16
  %1630 = sub i32 %1629, 3
  call void @_ZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %60, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %1626, ptr noundef %1628, i32 noundef %1630, i32 noundef 1, ptr noundef null)
  %1631 = load ptr, ptr %5, align 8, !tbaa !5
  %1632 = getelementptr inbounds i32, ptr %1631, i64 2
  %1633 = load i32, ptr %1632, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %61, i32 noundef %1633)
          to label %1634 unwind label %1644

1634:                                             ; preds = %1617
  %1635 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %61, i32 0, i32 0
  %1636 = load i32, ptr %1635, align 4
  %1637 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 %1636, i32 noundef 5300)
          to label %1638 unwind label %1644

1638:                                             ; preds = %1634
  br i1 %1637, label %1639, label %1648

1639:                                             ; preds = %1638
  %1640 = load ptr, ptr %5, align 8, !tbaa !5
  %1641 = getelementptr inbounds i32, ptr %1640, i64 2
  %1642 = load i32, ptr %1641, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL30convert_non_uniform_expressionERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %60, i32 noundef %1642)
          to label %1643 unwind label %1644

1643:                                             ; preds = %1639
  br label %1648

1644:                                             ; preds = %1639, %1634, %1617
  %1645 = landingpad { ptr, i32 }
          cleanup
  %1646 = extractvalue { ptr, i32 } %1645, 0
  store ptr %1646, ptr %23, align 8
  %1647 = extractvalue { ptr, i32 } %1645, 1
  store i32 %1647, ptr %24, align 4
  br label %1674

1648:                                             ; preds = %1643, %1638
  %1649 = load i32, ptr %59, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %62) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %63) #9
  %1650 = load i32, ptr %58, align 4, !tbaa !16
  %1651 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %1650)
          to label %1652 unwind label %1660

1652:                                             ; preds = %1648
  %1653 = load ptr, ptr %885, align 8, !tbaa !145
  %1654 = getelementptr inbounds ptr, ptr %1653, i64 19
  %1655 = load ptr, ptr %1654, align 8
  invoke void %1655(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %63, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(336) %1651, i32 noundef 0)
          to label %1656 unwind label %1660

1656:                                             ; preds = %1652
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRS6_RA11_S7_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %62, ptr noundef nonnull align 8 dereferenceable(32) %63, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %60, ptr noundef nonnull align 1 dereferenceable(11) @.str.1384)
          to label %1657 unwind label %1664

1657:                                             ; preds = %1656
  call void @llvm.lifetime.start.p0(i64 1, ptr %64) #9
  store i8 1, ptr %64, align 1, !tbaa !142
  %1658 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross8Compiler3setINS_14SPIRExpressionEJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERjbEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %1649, ptr noundef nonnull align 8 dereferenceable(32) %62, ptr noundef nonnull align 4 dereferenceable(4) %58, ptr noundef nonnull align 1 dereferenceable(1) %64)
          to label %1659 unwind label %1668

1659:                                             ; preds = %1657
  call void @llvm.lifetime.end.p0(i64 1, ptr %64) #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 %63) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %62) #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 %60) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #9
  br label %11526

1660:                                             ; preds = %1652, %1648
  %1661 = landingpad { ptr, i32 }
          cleanup
  %1662 = extractvalue { ptr, i32 } %1661, 0
  store ptr %1662, ptr %23, align 8
  %1663 = extractvalue { ptr, i32 } %1661, 1
  store i32 %1663, ptr %24, align 4
  br label %1673

1664:                                             ; preds = %1656
  %1665 = landingpad { ptr, i32 }
          cleanup
  %1666 = extractvalue { ptr, i32 } %1665, 0
  store ptr %1666, ptr %23, align 8
  %1667 = extractvalue { ptr, i32 } %1665, 1
  store i32 %1667, ptr %24, align 4
  br label %1672

1668:                                             ; preds = %1657
  %1669 = landingpad { ptr, i32 }
          cleanup
  %1670 = extractvalue { ptr, i32 } %1669, 0
  store ptr %1670, ptr %23, align 8
  %1671 = extractvalue { ptr, i32 } %1669, 1
  store i32 %1671, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %64) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #9
  br label %1672

1672:                                             ; preds = %1668, %1664
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #9
  br label %1673

1673:                                             ; preds = %1672, %1660
  call void @llvm.lifetime.end.p0(i64 32, ptr %63) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %62) #9
  br label %1674

1674:                                             ; preds = %1673, %1644
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #9
  call void @llvm.lifetime.end.p0(i64 32, 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
  br label %11527

1675:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #9
  %1676 = load ptr, ptr %5, align 8, !tbaa !5
  %1677 = getelementptr inbounds i32, ptr %1676, i64 0
  %1678 = load i32, ptr %1677, align 4, !tbaa !16
  store i32 %1678, ptr %65, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #9
  %1679 = load ptr, ptr %5, align 8, !tbaa !5
  %1680 = getelementptr inbounds i32, ptr %1679, i64 1
  %1681 = load i32, ptr %1680, align 4, !tbaa !16
  store i32 %1681, ptr %66, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #9
  %1682 = load ptr, ptr %5, align 8, !tbaa !5
  %1683 = getelementptr inbounds i32, ptr %1682, i64 2
  %1684 = load i32, ptr %1683, align 4, !tbaa !16
  store i32 %1684, ptr %67, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #9
  %1685 = load ptr, ptr %5, align 8, !tbaa !5
  %1686 = getelementptr inbounds i32, ptr %1685, i64 3
  store ptr %1686, ptr %68, align 8, !tbaa !5
  %1687 = load i32, ptr %7, align 4, !tbaa !16
  %1688 = sub i32 %1687, 3
  store i32 %1688, ptr %7, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #9
  %1689 = load i32, ptr %67, align 4, !tbaa !16
  %1690 = call noundef nonnull align 8 dereferenceable(795) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRFunctionEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %1689)
  store ptr %1690, ptr %69, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #9
  %1691 = load ptr, ptr %69, align 8, !tbaa !5
  %1692 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %1691, i32 0, i32 1
  %1693 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1692)
  %1694 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %1693)
  store ptr %1694, ptr %70, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %71) #9
  %1695 = load ptr, ptr %69, align 8, !tbaa !5
  %1696 = call noundef zeroext i1 @_ZN11spirv_cross8Compiler16function_is_pureERKNS_12SPIRFunctionE(ptr noundef nonnull align 8 dereferenceable(3176) %885, ptr noundef nonnull align 8 dereferenceable(795) %1695)
  %1697 = zext i1 %1696 to i8
  store i8 %1697, ptr %71, align 1, !tbaa !142
  call void @llvm.lifetime.start.p0(i64 1, ptr %72) #9
  %1698 = load ptr, ptr %69, align 8, !tbaa !5
  %1699 = call noundef zeroext i1 @_ZN11spirv_cross8Compiler29function_is_control_dependentERKNS_12SPIRFunctionE(ptr noundef nonnull align 8 dereferenceable(3176) %885, ptr noundef nonnull align 8 dereferenceable(795) %1698)
  %1700 = zext i1 %1699 to i8
  store i8 %1700, ptr %72, align 1, !tbaa !142
  call void @llvm.lifetime.start.p0(i64 1, ptr %73) #9
  store i8 0, ptr %73, align 1, !tbaa !142
  call void @llvm.lifetime.start.p0(i64 1, ptr %74) #9
  store i8 0, ptr %74, align 1, !tbaa !142
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #9
  store i32 0, ptr %75, align 4, !tbaa !16
  br label %1701

1701:                                             ; preds = %1727, %1675
  %1702 = load i32, ptr %75, align 4, !tbaa !16
  %1703 = load i32, ptr %7, align 4, !tbaa !16
  %1704 = icmp ult i32 %1702, %1703
  br i1 %1704, label %1706, label %1705

1705:                                             ; preds = %1701
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #9
  br label %1730

1706:                                             ; preds = %1701
  %1707 = load ptr, ptr %69, align 8, !tbaa !5
  %1708 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %1707, i32 0, i32 4
  %1709 = load i32, ptr %75, align 4, !tbaa !16
  %1710 = zext i32 %1709 to i64
  %1711 = call noundef nonnull align 4 dereferenceable(17) ptr @_ZN11spirv_cross10VectorViewINS_12SPIRFunction9ParameterEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %1708, i64 noundef %1710) #9
  %1712 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction::Parameter", ptr %1711, i32 0, i32 3
  %1713 = load i32, ptr %1712, align 4, !tbaa !176
  %1714 = icmp ne i32 %1713, 0
  br i1 %1714, label %1715, label %1721

1715:                                             ; preds = %1706
  %1716 = load ptr, ptr %68, align 8, !tbaa !5
  %1717 = load i32, ptr %75, align 4, !tbaa !16
  %1718 = zext i32 %1717 to i64
  %1719 = getelementptr inbounds i32, ptr %1716, i64 %1718
  %1720 = load i32, ptr %1719, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL26register_call_out_argumentEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %1720)
  store i8 1, ptr %73, align 1, !tbaa !142
  br label %1721

1721:                                             ; preds = %1715, %1706
  %1722 = load ptr, ptr %68, align 8, !tbaa !5
  %1723 = load i32, ptr %75, align 4, !tbaa !16
  %1724 = zext i32 %1723 to i64
  %1725 = getelementptr inbounds i32, ptr %1722, i64 %1724
  %1726 = load i32, ptr %1725, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %1726)
  br label %1727

1727:                                             ; preds = %1721
  %1728 = load i32, ptr %75, align 4, !tbaa !16
  %1729 = add i32 %1728, 1
  store i32 %1729, ptr %75, align 4, !tbaa !16
  br label %1701, !llvm.loop !178

1730:                                             ; preds = %1705
  %1731 = load ptr, ptr %70, align 8, !tbaa !5
  %1732 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1731, i32 0, i32 6
  %1733 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %1732) #9
  br i1 %1733, label %1740, label %1734

1734:                                             ; preds = %1730
  %1735 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 21
  %1736 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %1735, i32 0, i32 33
  %1737 = load i8, ptr %1736, align 2, !tbaa !179, !range !127, !noundef !128
  %1738 = trunc i8 %1737 to i1
  br i1 %1738, label %1740, label %1739

1739:                                             ; preds = %1734
  store i8 1, ptr %73, align 1, !tbaa !142
  store i8 1, ptr %74, align 1, !tbaa !142
  br label %1740

1740:                                             ; preds = %1739, %1734, %1730
  %1741 = load i8, ptr %71, align 1, !tbaa !142, !range !127, !noundef !128
  %1742 = trunc i8 %1741 to i1
  br i1 %1742, label %1744, label %1743

1743:                                             ; preds = %1740
  call void @_ZN11spirv_cross12CompilerGLSL29register_impure_function_callEv(ptr noundef nonnull align 8 dereferenceable(9848) %885)
  br label %1744

1744:                                             ; preds = %1743, %1740
  call void @llvm.lifetime.start.p0(i64 32, ptr %76) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %76) #9
  call void @llvm.lifetime.start.p0(i64 280, ptr %77) #9
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEC2Ev(ptr noundef nonnull align 8 dereferenceable(280) %77) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %78) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %79) #9
  %1745 = load i32, ptr %67, align 4, !tbaa !16
  %1746 = load ptr, ptr %885, align 8, !tbaa !145
  %1747 = getelementptr inbounds ptr, ptr %1746, i64 6
  %1748 = load ptr, ptr %1747, align 8
  invoke void %1748(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %79, ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %1745, i1 noundef zeroext true)
          to label %1749 unwind label %1777

1749:                                             ; preds = %1744
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %78, ptr noundef nonnull align 8 dereferenceable(32) %79, ptr noundef @.str.718)
          to label %1750 unwind label %1781

1750:                                             ; preds = %1749
  %1751 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %76, ptr noundef nonnull align 8 dereferenceable(32) %78)
          to label %1752 unwind label %1785

1752:                                             ; preds = %1750
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %78) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %79) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %79) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %78) #9
  %1753 = load i8, ptr %74, align 1, !tbaa !142, !range !127, !noundef !128
  %1754 = trunc i8 %1753 to i1
  br i1 %1754, label %1755, label %1814

1755:                                             ; preds = %1752
  call void @llvm.lifetime.start.p0(i64 32, ptr %80) #9
  %1756 = load ptr, ptr %70, align 8, !tbaa !5
  %1757 = load ptr, ptr %885, align 8, !tbaa !145
  %1758 = getelementptr inbounds ptr, ptr %1757, i64 19
  %1759 = load ptr, ptr %1758, align 8
  invoke void %1759(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %80, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(336) %1756, i32 noundef 0)
          to label %1760 unwind label %1791

1760:                                             ; preds = %1755
  call void @llvm.lifetime.start.p0(i64 32, ptr %81) #9
  %1761 = load i32, ptr %66, align 4, !tbaa !16
  %1762 = load ptr, ptr %885, align 8, !tbaa !145
  %1763 = getelementptr inbounds ptr, ptr %1762, i64 6
  %1764 = load ptr, ptr %1763, align 8
  invoke void %1764(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %81, ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %1761, i1 noundef zeroext true)
          to label %1765 unwind label %1795

1765:                                             ; preds = %1760
  call void @llvm.lifetime.start.p0(i64 32, ptr %82) #9
  %1766 = load ptr, ptr %70, align 8, !tbaa !5
  %1767 = load ptr, ptr %885, align 8, !tbaa !145
  %1768 = getelementptr inbounds ptr, ptr %1767, i64 38
  %1769 = load ptr, ptr %1768, align 8
  invoke void %1769(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %82, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(336) %1766, i32 noundef 0)
          to label %1770 unwind label %1799

1770:                                             ; preds = %1765
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_S7_SA_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %80, ptr noundef nonnull align 1 dereferenceable(2) @.str.307, ptr noundef nonnull align 8 dereferenceable(32) %81, ptr noundef nonnull align 8 dereferenceable(32) %82, ptr noundef nonnull align 1 dereferenceable(2) @.str.298)
          to label %1771 unwind label %1803

1771:                                             ; preds = %1770
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %82) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %82) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %81) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %81) #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 %80) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %83) #9
  %1772 = load i32, ptr %66, align 4, !tbaa !16
  %1773 = load ptr, ptr %885, align 8, !tbaa !145
  %1774 = getelementptr inbounds ptr, ptr %1773, i64 6
  %1775 = load ptr, ptr %1774, align 8
  invoke void %1775(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %83, ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %1772, i1 noundef zeroext true)
          to label %1776 unwind label %1810

1776:                                             ; preds = %1771
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %77, ptr noundef nonnull align 8 dereferenceable(32) %83) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %83) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %83) #9
  br label %1814

1777:                                             ; preds = %1744
  %1778 = landingpad { ptr, i32 }
          cleanup
  %1779 = extractvalue { ptr, i32 } %1778, 0
  store ptr %1779, ptr %23, align 8
  %1780 = extractvalue { ptr, i32 } %1778, 1
  store i32 %1780, ptr %24, align 4
  br label %1790

1781:                                             ; preds = %1749
  %1782 = landingpad { ptr, i32 }
          cleanup
  %1783 = extractvalue { ptr, i32 } %1782, 0
  store ptr %1783, ptr %23, align 8
  %1784 = extractvalue { ptr, i32 } %1782, 1
  store i32 %1784, ptr %24, align 4
  br label %1789

1785:                                             ; preds = %1750
  %1786 = landingpad { ptr, i32 }
          cleanup
  %1787 = extractvalue { ptr, i32 } %1786, 0
  store ptr %1787, ptr %23, align 8
  %1788 = extractvalue { ptr, i32 } %1786, 1
  store i32 %1788, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %78) #9
  br label %1789

1789:                                             ; preds = %1785, %1781
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %79) #9
  br label %1790

1790:                                             ; preds = %1789, %1777
  call void @llvm.lifetime.end.p0(i64 32, ptr %79) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %78) #9
  br label %2071

1791:                                             ; preds = %1755
  %1792 = landingpad { ptr, i32 }
          cleanup
  %1793 = extractvalue { ptr, i32 } %1792, 0
  store ptr %1793, ptr %23, align 8
  %1794 = extractvalue { ptr, i32 } %1792, 1
  store i32 %1794, ptr %24, align 4
  br label %1809

1795:                                             ; preds = %1760
  %1796 = landingpad { ptr, i32 }
          cleanup
  %1797 = extractvalue { ptr, i32 } %1796, 0
  store ptr %1797, ptr %23, align 8
  %1798 = extractvalue { ptr, i32 } %1796, 1
  store i32 %1798, ptr %24, align 4
  br label %1808

1799:                                             ; preds = %1765
  %1800 = landingpad { ptr, i32 }
          cleanup
  %1801 = extractvalue { ptr, i32 } %1800, 0
  store ptr %1801, ptr %23, align 8
  %1802 = extractvalue { ptr, i32 } %1800, 1
  store i32 %1802, ptr %24, align 4
  br label %1807

1803:                                             ; preds = %1770
  %1804 = landingpad { ptr, i32 }
          cleanup
  %1805 = extractvalue { ptr, i32 } %1804, 0
  store ptr %1805, ptr %23, align 8
  %1806 = extractvalue { ptr, i32 } %1804, 1
  store i32 %1806, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %82) #9
  br label %1807

1807:                                             ; preds = %1803, %1799
  call void @llvm.lifetime.end.p0(i64 32, ptr %82) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %81) #9
  br label %1808

1808:                                             ; preds = %1807, %1795
  call void @llvm.lifetime.end.p0(i64 32, ptr %81) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %80) #9
  br label %1809

1809:                                             ; preds = %1808, %1791
  call void @llvm.lifetime.end.p0(i64 32, ptr %80) #9
  br label %2071

1810:                                             ; preds = %1771
  %1811 = landingpad { ptr, i32 }
          cleanup
  %1812 = extractvalue { ptr, i32 } %1811, 0
  store ptr %1812, ptr %23, align 8
  %1813 = extractvalue { ptr, i32 } %1811, 1
  store i32 %1813, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %83) #9
  br label %2071

1814:                                             ; preds = %1776, %1752
  call void @llvm.lifetime.start.p0(i64 4, ptr %84) #9
  store i32 0, ptr %84, align 4, !tbaa !16
  br label %1815

1815:                                             ; preds = %1851, %1814
  %1816 = load i32, ptr %84, align 4, !tbaa !16
  %1817 = load i32, ptr %7, align 4, !tbaa !16
  %1818 = icmp ult i32 %1816, %1817
  br i1 %1818, label %1820, label %1819

1819:                                             ; preds = %1815
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #9
  br label %1859

1820:                                             ; preds = %1815
  %1821 = load ptr, ptr %68, align 8, !tbaa !5
  %1822 = load i32, ptr %84, align 4, !tbaa !16
  %1823 = zext i32 %1822 to i64
  %1824 = getelementptr inbounds i32, ptr %1821, i64 %1823
  %1825 = load i32, ptr %1824, align 4, !tbaa !16
  %1826 = load ptr, ptr %885, align 8, !tbaa !145
  %1827 = getelementptr inbounds ptr, ptr %1826, i64 54
  %1828 = load ptr, ptr %1827, align 8
  %1829 = invoke noundef zeroext i1 %1828(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %1825)
          to label %1830 unwind label %1832

1830:                                             ; preds = %1820
  br i1 %1829, label %1831, label %1836

1831:                                             ; preds = %1830
  br label %1851

1832:                                             ; preds = %1820
  %1833 = landingpad { ptr, i32 }
          cleanup
  %1834 = extractvalue { ptr, i32 } %1833, 0
  store ptr %1834, ptr %23, align 8
  %1835 = extractvalue { ptr, i32 } %1833, 1
  store i32 %1835, ptr %24, align 4
  br label %1858

1836:                                             ; preds = %1830
  call void @llvm.lifetime.start.p0(i64 32, ptr %85) #9
  %1837 = load ptr, ptr %69, align 8, !tbaa !5
  %1838 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %1837, i32 0, i32 4
  %1839 = load i32, ptr %84, align 4, !tbaa !16
  %1840 = zext i32 %1839 to i64
  %1841 = call noundef nonnull align 4 dereferenceable(17) ptr @_ZN11spirv_cross10VectorViewINS_12SPIRFunction9ParameterEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %1838, i64 noundef %1840) #9
  %1842 = load ptr, ptr %68, align 8, !tbaa !5
  %1843 = load i32, ptr %84, align 4, !tbaa !16
  %1844 = zext i32 %1843 to i64
  %1845 = getelementptr inbounds i32, ptr %1842, i64 %1844
  %1846 = load i32, ptr %1845, align 4, !tbaa !16
  %1847 = load ptr, ptr %885, align 8, !tbaa !145
  %1848 = getelementptr inbounds ptr, ptr %1847, i64 29
  %1849 = load ptr, ptr %1848, align 8
  invoke void %1849(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %85, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 4 dereferenceable(17) %1841, i32 noundef %1846)
          to label %1850 unwind label %1854

1850:                                             ; preds = %1836
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %77, ptr noundef nonnull align 8 dereferenceable(32) %85) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %85) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %85) #9
  br label %1851

1851:                                             ; preds = %1850, %1831
  %1852 = load i32, ptr %84, align 4, !tbaa !16
  %1853 = add i32 %1852, 1
  store i32 %1853, ptr %84, align 4, !tbaa !16
  br label %1815, !llvm.loop !180

1854:                                             ; preds = %1836
  %1855 = landingpad { ptr, i32 }
          cleanup
  %1856 = extractvalue { ptr, i32 } %1855, 0
  store ptr %1856, ptr %23, align 8
  %1857 = extractvalue { ptr, i32 } %1855, 1
  store i32 %1857, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %85) #9
  br label %1858

1858:                                             ; preds = %1854, %1832
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #9
  br label %2071

1859:                                             ; preds = %1819
  call void @llvm.lifetime.start.p0(i64 8, ptr %86) #9
  %1860 = load ptr, ptr %69, align 8, !tbaa !5
  %1861 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %1860, i32 0, i32 10
  store ptr %1861, ptr %86, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %87) #9
  %1862 = load ptr, ptr %86, align 8, !tbaa !5
  %1863 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_12SPIRFunction29CombinedImageSamplerParameterEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %1862) #9
  store ptr %1863, ptr %87, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %88) #9
  %1864 = load ptr, ptr %86, align 8, !tbaa !5
  %1865 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_12SPIRFunction29CombinedImageSamplerParameterEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %1864) #9
  store ptr %1865, ptr %88, align 8, !tbaa !5
  br label %1866

1866:                                             ; preds = %1914, %1859
  %1867 = load ptr, ptr %87, align 8, !tbaa !5
  %1868 = load ptr, ptr %88, align 8, !tbaa !5
  %1869 = icmp ne ptr %1867, %1868
  br i1 %1869, label %1871, label %1870

1870:                                             ; preds = %1866
  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 8, ptr %86) #9
  br label %1931

1871:                                             ; preds = %1866
  call void @llvm.lifetime.start.p0(i64 8, ptr %89) #9
  %1872 = load ptr, ptr %87, align 8, !tbaa !5
  store ptr %1872, ptr %89, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %90) #9
  %1873 = load ptr, ptr %89, align 8, !tbaa !5
  %1874 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction::CombinedImageSamplerParameter", ptr %1873, i32 0, i32 3
  %1875 = load i8, ptr %1874, align 4, !tbaa !181, !range !127, !noundef !128
  %1876 = trunc i8 %1875 to i1
  br i1 %1876, label %1877, label %1880

1877:                                             ; preds = %1871
  %1878 = load ptr, ptr %89, align 8, !tbaa !5
  %1879 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction::CombinedImageSamplerParameter", ptr %1878, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %90, ptr align 4 %1879, i64 4, i1 false), !tbaa.struct !151
  br label %1890

1880:                                             ; preds = %1871
  %1881 = load ptr, ptr %68, align 8, !tbaa !5
  %1882 = load ptr, ptr %89, align 8, !tbaa !5
  %1883 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction::CombinedImageSamplerParameter", ptr %1882, i32 0, i32 1
  %1884 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1883)
          to label %1885 unwind label %1917

1885:                                             ; preds = %1880
  %1886 = zext i32 %1884 to i64
  %1887 = getelementptr inbounds i32, ptr %1881, i64 %1886
  %1888 = load i32, ptr %1887, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %90, i32 noundef %1888)
          to label %1889 unwind label %1917

1889:                                             ; preds = %1885
  br label %1890

1890:                                             ; preds = %1889, %1877
  call void @llvm.lifetime.start.p0(i64 4, ptr %91) #9
  %1891 = load ptr, ptr %89, align 8, !tbaa !5
  %1892 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction::CombinedImageSamplerParameter", ptr %1891, i32 0, i32 4
  %1893 = load i8, ptr %1892, align 1, !tbaa !183, !range !127, !noundef !128
  %1894 = trunc i8 %1893 to i1
  br i1 %1894, label %1895, label %1898

1895:                                             ; preds = %1890
  %1896 = load ptr, ptr %89, align 8, !tbaa !5
  %1897 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction::CombinedImageSamplerParameter", ptr %1896, i32 0, i32 2
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %91, ptr align 4 %1897, i64 4, i1 false), !tbaa.struct !151
  br label %1908

1898:                                             ; preds = %1890
  %1899 = load ptr, ptr %68, align 8, !tbaa !5
  %1900 = load ptr, ptr %89, align 8, !tbaa !5
  %1901 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction::CombinedImageSamplerParameter", ptr %1900, i32 0, i32 2
  %1902 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1901)
          to label %1903 unwind label %1921

1903:                                             ; preds = %1898
  %1904 = zext i32 %1902 to i64
  %1905 = getelementptr inbounds i32, ptr %1899, i64 %1904
  %1906 = load i32, ptr %1905, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %91, i32 noundef %1906)
          to label %1907 unwind label %1921

1907:                                             ; preds = %1903
  br label %1908

1908:                                             ; preds = %1907, %1895
  call void @llvm.lifetime.start.p0(i64 32, ptr %92) #9
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %93, ptr align 4 %90, i64 4, i1 false), !tbaa.struct !151
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %94, ptr align 4 %91, i64 4, i1 false), !tbaa.struct !151
  %1909 = getelementptr inbounds %"class.spirv_cross::TypedID.282", ptr %93, i32 0, i32 0
  %1910 = load i32, ptr %1909, align 4
  %1911 = getelementptr inbounds %"class.spirv_cross::TypedID.282", ptr %94, i32 0, i32 0
  %1912 = load i32, ptr %1911, align 4
  invoke void @_ZN11spirv_cross12CompilerGLSL25to_combined_image_samplerB5cxx11ENS_7TypedIDILNS_5TypesE2EEES3_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %92, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 %1910, i32 %1912)
          to label %1913 unwind label %1925

1913:                                             ; preds = %1908
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %77, ptr noundef nonnull align 8 dereferenceable(32) %92) #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 %92) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %91) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %90) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %89) #9
  br label %1914

1914:                                             ; preds = %1913
  %1915 = load ptr, ptr %87, align 8, !tbaa !5
  %1916 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction::CombinedImageSamplerParameter", ptr %1915, i32 1
  store ptr %1916, ptr %87, align 8, !tbaa !5
  br label %1866

1917:                                             ; preds = %1885, %1880
  %1918 = landingpad { ptr, i32 }
          cleanup
  %1919 = extractvalue { ptr, i32 } %1918, 0
  store ptr %1919, ptr %23, align 8
  %1920 = extractvalue { ptr, i32 } %1918, 1
  store i32 %1920, ptr %24, align 4
  br label %1930

1921:                                             ; preds = %1903, %1898
  %1922 = landingpad { ptr, i32 }
          cleanup
  %1923 = extractvalue { ptr, i32 } %1922, 0
  store ptr %1923, ptr %23, align 8
  %1924 = extractvalue { ptr, i32 } %1922, 1
  store i32 %1924, ptr %24, align 4
  br label %1929

1925:                                             ; preds = %1908
  %1926 = landingpad { ptr, i32 }
          cleanup
  %1927 = extractvalue { ptr, i32 } %1926, 0
  store ptr %1927, ptr %23, align 8
  %1928 = extractvalue { ptr, i32 } %1926, 1
  store i32 %1928, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %92) #9
  br label %1929

1929:                                             ; preds = %1925, %1921
  call void @llvm.lifetime.end.p0(i64 4, ptr %91) #9
  br label %1930

1930:                                             ; preds = %1929, %1917
  call void @llvm.lifetime.end.p0(i64 4, ptr %90) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %89) #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 8, ptr %86) #9
  br label %2071

1931:                                             ; preds = %1870
  %1932 = load ptr, ptr %69, align 8, !tbaa !5
  %1933 = load i32, ptr %7, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL23append_global_func_argsERKNS_12SPIRFunctionEjRNS_11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(795) %1932, i32 noundef %1933, ptr noundef nonnull align 8 dereferenceable(280) %77)
          to label %1934 unwind label %1988

1934:                                             ; preds = %1931
  call void @llvm.lifetime.start.p0(i64 32, ptr %95) #9
  invoke void @_ZN11spirv_cross5mergeERKNS_11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEEPKc(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %95, ptr noundef nonnull align 8 dereferenceable(280) %77, ptr noundef @.str.177)
          to label %1935 unwind label %1992

1935:                                             ; preds = %1934
  %1936 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %76, ptr noundef nonnull align 8 dereferenceable(32) %95)
          to label %1937 unwind label %1996

1937:                                             ; preds = %1935
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %95) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %95) #9
  %1938 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %76, ptr noundef @.str.135)
          to label %1939 unwind label %1988

1939:                                             ; preds = %1937
  %1940 = load ptr, ptr %68, align 8, !tbaa !5
  %1941 = load i32, ptr %7, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL31check_function_call_constraintsEPKjj(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef %1940, i32 noundef %1941)
          to label %1942 unwind label %1988

1942:                                             ; preds = %1939
  %1943 = load ptr, ptr %70, align 8, !tbaa !5
  %1944 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1943, i32 0, i32 2
  %1945 = load i32, ptr %1944, align 8, !tbaa !148
  %1946 = icmp ne i32 %1945, 1
  br i1 %1946, label %1947, label %2062

1947:                                             ; preds = %1942
  call void @llvm.lifetime.start.p0(i64 1, ptr %96) #9
  %1948 = load i32, ptr %66, align 4, !tbaa !16
  %1949 = load ptr, ptr %68, align 8, !tbaa !5
  %1950 = load i32, ptr %7, align 4, !tbaa !16
  %1951 = load i8, ptr %71, align 1, !tbaa !142, !range !127, !noundef !128
  %1952 = trunc i8 %1951 to i1
  call void @llvm.lifetime.start.p0(i64 8, ptr %97) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %98) #9
  %1953 = invoke noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL17args_will_forwardEjPKjjb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %1948, ptr noundef %1949, i32 noundef %1950, i1 noundef zeroext %1952)
          to label %1954 unwind label %2001

1954:                                             ; preds = %1947
  br i1 %1953, label %1955, label %1973

1955:                                             ; preds = %1954
  %1956 = load i8, ptr %73, align 1, !tbaa !142, !range !127, !noundef !128
  %1957 = trunc i8 %1956 to i1
  br i1 %1957, label %1973, label %1958

1958:                                             ; preds = %1955
  %1959 = load i8, ptr %71, align 1, !tbaa !142, !range !127, !noundef !128
  %1960 = trunc i8 %1959 to i1
  br i1 %1960, label %1961, label %1973

1961:                                             ; preds = %1958
  %1962 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %885, i32 0, i32 15
  %1963 = invoke ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE4findERKj(ptr noundef nonnull align 8 dereferenceable(56) %1962, ptr noundef nonnull align 4 dereferenceable(4) %66)
          to label %1964 unwind label %2005

1964:                                             ; preds = %1961
  %1965 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.364", ptr %97, i32 0, i32 0
  %1966 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.365", ptr %1965, i32 0, i32 0
  store ptr %1963, ptr %1966, align 8
  %1967 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %885, i32 0, i32 15
  %1968 = invoke ptr @_ZSt3endISt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(56) %1967)
          to label %1969 unwind label %2009

1969:                                             ; preds = %1964
  %1970 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.364", ptr %98, i32 0, i32 0
  %1971 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.365", ptr %1970, i32 0, i32 0
  store ptr %1968, ptr %1971, align 8
  %1972 = call noundef zeroext i1 @_ZNSt8__detaileqERKNS_19_Node_iterator_baseIjLb0EEES3_(ptr noundef nonnull align 8 dereferenceable(8) %97, ptr noundef nonnull align 8 dereferenceable(8) %98) #9
  br label %1973

1973:                                             ; preds = %1969, %1958, %1955, %1954
  %1974 = phi i1 [ false, %1958 ], [ false, %1955 ], [ false, %1954 ], [ %1972, %1969 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %97) #9
  %1975 = zext i1 %1974 to i8
  store i8 %1975, ptr %96, align 1, !tbaa !142
  %1976 = load i8, ptr %74, align 1, !tbaa !142, !range !127, !noundef !128
  %1977 = trunc i8 %1976 to i1
  br i1 %1977, label %1978, label %2023

1978:                                             ; preds = %1973
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %76, ptr noundef nonnull align 1 dereferenceable(2) @.str.298)
          to label %1979 unwind label %2001

1979:                                             ; preds = %1978
  %1980 = load i32, ptr %66, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %99) #9
  %1981 = load i32, ptr %66, align 4, !tbaa !16
  %1982 = load ptr, ptr %885, align 8, !tbaa !145
  %1983 = getelementptr inbounds ptr, ptr %1982, i64 6
  %1984 = load ptr, ptr %1983, align 8
  invoke void %1984(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %99, ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %1981, i1 noundef zeroext true)
          to label %1985 unwind label %2014

1985:                                             ; preds = %1979
  call void @llvm.lifetime.start.p0(i64 1, ptr %100) #9
  store i8 1, ptr %100, align 1, !tbaa !142
  %1986 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross8Compiler3setINS_14SPIRExpressionEJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERjbEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %1980, ptr noundef nonnull align 8 dereferenceable(32) %99, ptr noundef nonnull align 4 dereferenceable(4) %65, ptr noundef nonnull align 1 dereferenceable(1) %100)
          to label %1987 unwind label %2018

1987:                                             ; preds = %1985
  call void @llvm.lifetime.end.p0(i64 1, ptr %100) #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 %99) #9
  br label %2030

1988:                                             ; preds = %2067, %2062, %1939, %1937, %1931
  %1989 = landingpad { ptr, i32 }
          cleanup
  %1990 = extractvalue { ptr, i32 } %1989, 0
  store ptr %1990, ptr %23, align 8
  %1991 = extractvalue { ptr, i32 } %1989, 1
  store i32 %1991, ptr %24, align 4
  br label %2071

1992:                                             ; preds = %1934
  %1993 = landingpad { ptr, i32 }
          cleanup
  %1994 = extractvalue { ptr, i32 } %1993, 0
  store ptr %1994, ptr %23, align 8
  %1995 = extractvalue { ptr, i32 } %1993, 1
  store i32 %1995, ptr %24, align 4
  br label %2000

1996:                                             ; preds = %1935
  %1997 = landingpad { ptr, i32 }
          cleanup
  %1998 = extractvalue { ptr, i32 } %1997, 0
  store ptr %1998, ptr %23, align 8
  %1999 = extractvalue { ptr, i32 } %1997, 1
  store i32 %1999, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %95) #9
  br label %2000

2000:                                             ; preds = %1996, %1992
  call void @llvm.lifetime.end.p0(i64 32, ptr %95) #9
  br label %2071

2001:                                             ; preds = %2056, %2023, %1978, %1947
  %2002 = landingpad { ptr, i32 }
          cleanup
  %2003 = extractvalue { ptr, i32 } %2002, 0
  store ptr %2003, ptr %23, align 8
  %2004 = extractvalue { ptr, i32 } %2002, 1
  store i32 %2004, ptr %24, align 4
  br label %2061

2005:                                             ; preds = %1961
  %2006 = landingpad { ptr, i32 }
          cleanup
  %2007 = extractvalue { ptr, i32 } %2006, 0
  store ptr %2007, ptr %23, align 8
  %2008 = extractvalue { ptr, i32 } %2006, 1
  store i32 %2008, ptr %24, align 4
  br label %2013

2009:                                             ; preds = %1964
  %2010 = landingpad { ptr, i32 }
          cleanup
  %2011 = extractvalue { ptr, i32 } %2010, 0
  store ptr %2011, ptr %23, align 8
  %2012 = extractvalue { ptr, i32 } %2010, 1
  store i32 %2012, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #9
  br label %2013

2013:                                             ; preds = %2009, %2005
  call void @llvm.lifetime.end.p0(i64 8, ptr %97) #9
  br label %2061

2014:                                             ; preds = %1979
  %2015 = landingpad { ptr, i32 }
          cleanup
  %2016 = extractvalue { ptr, i32 } %2015, 0
  store ptr %2016, ptr %23, align 8
  %2017 = extractvalue { ptr, i32 } %2015, 1
  store i32 %2017, ptr %24, align 4
  br label %2022

2018:                                             ; preds = %1985
  %2019 = landingpad { ptr, i32 }
          cleanup
  %2020 = extractvalue { ptr, i32 } %2019, 0
  store ptr %2020, ptr %23, align 8
  %2021 = extractvalue { ptr, i32 } %2019, 1
  store i32 %2021, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %100) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %99) #9
  br label %2022

2022:                                             ; preds = %2018, %2014
  call void @llvm.lifetime.end.p0(i64 32, ptr %99) #9
  br label %2061

2023:                                             ; preds = %1973
  %2024 = load i32, ptr %65, align 4, !tbaa !16
  %2025 = load i32, ptr %66, align 4, !tbaa !16
  %2026 = load i8, ptr %96, align 1, !tbaa !142, !range !127, !noundef !128
  %2027 = trunc i8 %2026 to i1
  %2028 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %2024, i32 noundef %2025, ptr noundef nonnull align 8 dereferenceable(32) %76, i1 noundef zeroext %2027, i1 noundef zeroext false)
          to label %2029 unwind label %2001

2029:                                             ; preds = %2023
  br label %2030

2030:                                             ; preds = %2029, %1987
  call void @llvm.lifetime.start.p0(i64 4, ptr %101) #9
  store i32 0, ptr %101, align 4, !tbaa !16
  br label %2031

2031:                                             ; preds = %2046, %2030
  %2032 = load i32, ptr %101, align 4, !tbaa !16
  %2033 = load i32, ptr %7, align 4, !tbaa !16
  %2034 = icmp ult i32 %2032, %2033
  br i1 %2034, label %2036, label %2035

2035:                                             ; preds = %2031
  call void @llvm.lifetime.end.p0(i64 4, ptr %101) #9
  br label %2053

2036:                                             ; preds = %2031
  %2037 = load i32, ptr %66, align 4, !tbaa !16
  %2038 = load ptr, ptr %68, align 8, !tbaa !5
  %2039 = load i32, ptr %101, align 4, !tbaa !16
  %2040 = zext i32 %2039 to i64
  %2041 = getelementptr inbounds i32, ptr %2038, i64 %2040
  %2042 = load i32, ptr %2041, align 4, !tbaa !16
  %2043 = load i8, ptr %96, align 1, !tbaa !142, !range !127, !noundef !128
  %2044 = trunc i8 %2043 to i1
  invoke void @_ZN11spirv_cross8Compiler13register_readEjjb(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %2037, i32 noundef %2042, i1 noundef zeroext %2044)
          to label %2045 unwind label %2049

2045:                                             ; preds = %2036
  br label %2046

2046:                                             ; preds = %2045
  %2047 = load i32, ptr %101, align 4, !tbaa !16
  %2048 = add i32 %2047, 1
  store i32 %2048, ptr %101, align 4, !tbaa !16
  br label %2031, !llvm.loop !184

2049:                                             ; preds = %2036
  %2050 = landingpad { ptr, i32 }
          cleanup
  %2051 = extractvalue { ptr, i32 } %2050, 0
  store ptr %2051, ptr %23, align 8
  %2052 = extractvalue { ptr, i32 } %2050, 1
  store i32 %2052, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %101) #9
  br label %2061

2053:                                             ; preds = %2035
  %2054 = load i8, ptr %96, align 1, !tbaa !142, !range !127, !noundef !128
  %2055 = trunc i8 %2054 to i1
  br i1 %2055, label %2056, label %2060

2056:                                             ; preds = %2053
  %2057 = load ptr, ptr %69, align 8, !tbaa !5
  %2058 = load i32, ptr %66, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross8Compiler33register_global_read_dependenciesERKNS_12SPIRFunctionEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, ptr noundef nonnull align 8 dereferenceable(795) %2057, i32 noundef %2058)
          to label %2059 unwind label %2001

2059:                                             ; preds = %2056
  br label %2060

2060:                                             ; preds = %2059, %2053
  call void @llvm.lifetime.end.p0(i64 1, ptr %96) #9
  br label %2064

2061:                                             ; preds = %2049, %2022, %2013, %2001
  call void @llvm.lifetime.end.p0(i64 1, ptr %96) #9
  br label %2071

2062:                                             ; preds = %1942
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %76, ptr noundef nonnull align 1 dereferenceable(2) @.str.298)
          to label %2063 unwind label %1988

2063:                                             ; preds = %2062
  br label %2064

2064:                                             ; preds = %2063, %2060
  %2065 = load i8, ptr %72, align 1, !tbaa !142, !range !127, !noundef !128
  %2066 = trunc i8 %2065 to i1
  br i1 %2066, label %2067, label %2070

2067:                                             ; preds = %2064
  %2068 = load i32, ptr %66, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %2068)
          to label %2069 unwind label %1988

2069:                                             ; preds = %2067
  br label %2070

2070:                                             ; preds = %2069, %2064
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(280) %77) #9
  call void @llvm.lifetime.end.p0(i64 280, ptr %77) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %76) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %76) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %74) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %73) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %72) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %71) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #9
  call void @llvm.lifetime.end.p0(i64 8, 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
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #9
  br label %11526

2071:                                             ; preds = %2061, %2000, %1988, %1930, %1858, %1810, %1809, %1790
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(280) %77) #9
  call void @llvm.lifetime.end.p0(i64 280, ptr %77) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %76) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %76) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %74) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %73) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %72) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %71) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #9
  call void @llvm.lifetime.end.p0(i64 8, 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
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #9
  br label %11527

2072:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %102) #9
  %2073 = load ptr, ptr %5, align 8, !tbaa !5
  %2074 = getelementptr inbounds i32, ptr %2073, i64 0
  %2075 = load i32, ptr %2074, align 4, !tbaa !16
  store i32 %2075, ptr %102, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %103) #9
  %2076 = load ptr, ptr %5, align 8, !tbaa !5
  %2077 = getelementptr inbounds i32, ptr %2076, i64 1
  %2078 = load i32, ptr %2077, align 4, !tbaa !16
  store i32 %2078, ptr %103, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %104) #9
  %2079 = load ptr, ptr %5, align 8, !tbaa !5
  %2080 = getelementptr inbounds i32, ptr %2079, i64 2
  store ptr %2080, ptr %104, align 8, !tbaa !5
  %2081 = load i32, ptr %7, align 4, !tbaa !16
  %2082 = sub i32 %2081, 2
  store i32 %2082, ptr %7, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 1, ptr %105) #9
  store i8 1, ptr %105, align 1, !tbaa !142
  call void @llvm.lifetime.start.p0(i64 4, ptr %106) #9
  store i32 0, ptr %106, align 4, !tbaa !16
  br label %2083

2083:                                             ; preds = %2101, %2072
  %2084 = load i32, ptr %106, align 4, !tbaa !16
  %2085 = load i32, ptr %7, align 4, !tbaa !16
  %2086 = icmp ult i32 %2084, %2085
  br i1 %2086, label %2088, label %2087

2087:                                             ; preds = %2083
  call void @llvm.lifetime.end.p0(i64 4, ptr %106) #9
  br label %2104

2088:                                             ; preds = %2083
  %2089 = load i8, ptr %105, align 1, !tbaa !142, !range !127, !noundef !128
  %2090 = trunc i8 %2089 to i1
  br i1 %2090, label %2091, label %2098

2091:                                             ; preds = %2088
  %2092 = load ptr, ptr %104, align 8, !tbaa !5
  %2093 = load i32, ptr %106, align 4, !tbaa !16
  %2094 = zext i32 %2093 to i64
  %2095 = getelementptr inbounds i32, ptr %2092, i64 %2094
  %2096 = load i32, ptr %2095, align 4, !tbaa !16
  %2097 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %2096)
  br label %2098

2098:                                             ; preds = %2091, %2088
  %2099 = phi i1 [ false, %2088 ], [ %2097, %2091 ]
  %2100 = zext i1 %2099 to i8
  store i8 %2100, ptr %105, align 1, !tbaa !142
  br label %2101

2101:                                             ; preds = %2098
  %2102 = load i32, ptr %106, align 4, !tbaa !16
  %2103 = add i32 %2102, 1
  store i32 %2103, ptr %106, align 4, !tbaa !16
  br label %2083, !llvm.loop !185

2104:                                             ; preds = %2087
  call void @llvm.lifetime.start.p0(i64 8, ptr %107) #9
  %2105 = load i32, ptr %102, align 4, !tbaa !16
  %2106 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %2105)
  store ptr %2106, ptr %107, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %108) #9
  %2107 = load i32, ptr %7, align 4, !tbaa !16
  %2108 = icmp ugt i32 %2107, 0
  br i1 %2108, label %2109, label %2114

2109:                                             ; preds = %2104
  %2110 = load ptr, ptr %104, align 8, !tbaa !5
  %2111 = getelementptr inbounds i32, ptr %2110, i64 0
  %2112 = load i32, ptr %2111, align 4, !tbaa !16
  %2113 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %2112)
  br label %2115

2114:                                             ; preds = %2104
  br label %2115

2115:                                             ; preds = %2114, %2109
  %2116 = phi ptr [ %2113, %2109 ], [ null, %2114 ]
  store ptr %2116, ptr %108, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %109) #9
  %2117 = load ptr, ptr %107, align 8, !tbaa !5
  %2118 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %2117, i32 0, i32 6
  %2119 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %2118) #9
  br i1 %2119, label %2120, label %2125

2120:                                             ; preds = %2115
  %2121 = load ptr, ptr %107, align 8, !tbaa !5
  %2122 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %2121, i32 0, i32 2
  %2123 = load i32, ptr %2122, align 8, !tbaa !148
  %2124 = icmp eq i32 %2123, 15
  br label %2125

2125:                                             ; preds = %2120, %2115
  %2126 = phi i1 [ true, %2115 ], [ %2124, %2120 ]
  %2127 = zext i1 %2126 to i8
  store i8 %2127, ptr %109, align 1, !tbaa !142
  call void @llvm.lifetime.start.p0(i64 1, ptr %110) #9
  store i8 0, ptr %110, align 1, !tbaa !142
  call void @llvm.lifetime.start.p0(i64 1, ptr %111) #9
  store i8 0, ptr %111, align 1, !tbaa !142
  %2128 = load ptr, ptr %108, align 8, !tbaa !5
  %2129 = icmp ne ptr %2128, null
  br i1 %2129, label %2130, label %2182

2130:                                             ; preds = %2125
  %2131 = load ptr, ptr %108, align 8, !tbaa !5
  %2132 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %2131, i32 0, i32 4
  %2133 = load i32, ptr %2132, align 8, !tbaa !129
  %2134 = icmp eq i32 %2133, 1
  br i1 %2134, label %2135, label %2148

2135:                                             ; preds = %2130
  %2136 = load ptr, ptr %108, align 8, !tbaa !5
  %2137 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %2136, i32 0, i32 5
  %2138 = load i32, ptr %2137, align 4, !tbaa !149
  %2139 = icmp eq i32 %2138, 1
  br i1 %2139, label %2140, label %2148

2140:                                             ; preds = %2135
  %2141 = load i8, ptr %109, align 1, !tbaa !142, !range !127, !noundef !128
  %2142 = trunc i8 %2141 to i1
  br i1 %2142, label %2148, label %2143

2143:                                             ; preds = %2140
  %2144 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 21
  %2145 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %2144, i32 0, i32 28
  %2146 = load i8, ptr %2145, align 1, !tbaa !186, !range !127, !noundef !128
  %2147 = trunc i8 %2146 to i1
  br label %2148

2148:                                             ; preds = %2143, %2140, %2135, %2130
  %2149 = phi i1 [ false, %2140 ], [ false, %2135 ], [ false, %2130 ], [ %2147, %2143 ]
  %2150 = zext i1 %2149 to i8
  store i8 %2150, ptr %110, align 1, !tbaa !142
  %2151 = load ptr, ptr %108, align 8, !tbaa !5
  %2152 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %2151, i32 0, i32 4
  %2153 = load i32, ptr %2152, align 8, !tbaa !129
  %2154 = icmp eq i32 %2153, 1
  br i1 %2154, label %2155, label %2165

2155:                                             ; preds = %2148
  %2156 = load ptr, ptr %108, align 8, !tbaa !5
  %2157 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %2156, i32 0, i32 5
  %2158 = load i32, ptr %2157, align 4, !tbaa !149
  %2159 = icmp eq i32 %2158, 1
  br i1 %2159, label %2160, label %2165

2160:                                             ; preds = %2155
  %2161 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 21
  %2162 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %2161, i32 0, i32 30
  %2163 = load i8, ptr %2162, align 1, !tbaa !187, !range !127, !noundef !128
  %2164 = trunc i8 %2163 to i1
  br label %2165

2165:                                             ; preds = %2160, %2155, %2148
  %2166 = phi i1 [ false, %2155 ], [ false, %2148 ], [ %2164, %2160 ]
  %2167 = zext i1 %2166 to i8
  store i8 %2167, ptr %111, align 1, !tbaa !142
  %2168 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %885, i32 0, i32 1
  %2169 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %2168, i32 0, i32 2
  %2170 = load ptr, ptr %104, align 8, !tbaa !5
  %2171 = getelementptr inbounds i32, ptr %2170, i64 0
  %2172 = load i32, ptr %2171, align 4, !tbaa !16
  %2173 = zext i32 %2172 to i64
  %2174 = call noundef nonnull align 8 dereferenceable(21) ptr @_ZN11spirv_cross10VectorViewINS_7VariantEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %2169, i64 noundef %2173) #9
  %2175 = call noundef i32 @_ZNK11spirv_cross7Variant8get_typeEv(ptr noundef nonnull align 8 dereferenceable(21) %2174)
  %2176 = icmp eq i32 %2175, 3
  br i1 %2176, label %2177, label %2181

2177:                                             ; preds = %2165
  %2178 = load ptr, ptr %108, align 8, !tbaa !5
  %2179 = call noundef zeroext i1 @_ZN11spirv_crossL22type_is_floating_pointERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(336) %2178)
  br i1 %2179, label %2181, label %2180

2180:                                             ; preds = %2177
  store i8 0, ptr %111, align 1, !tbaa !142
  br label %2181

2181:                                             ; preds = %2180, %2177, %2165
  br label %2182

2182:                                             ; preds = %2181, %2125
  %2183 = load i8, ptr %110, align 1, !tbaa !142, !range !127, !noundef !128
  %2184 = trunc i8 %2183 to i1
  br i1 %2184, label %2188, label %2185

2185:                                             ; preds = %2182
  %2186 = load i8, ptr %111, align 1, !tbaa !142, !range !127, !noundef !128
  %2187 = trunc i8 %2186 to i1
  br i1 %2187, label %2188, label %2211

2188:                                             ; preds = %2185, %2182
  call void @llvm.lifetime.start.p0(i64 4, ptr %112) #9
  %2189 = load ptr, ptr %104, align 8, !tbaa !5
  %2190 = getelementptr inbounds i32, ptr %2189, i64 0
  %2191 = load i32, ptr %2190, align 4, !tbaa !16
  store i32 %2191, ptr %112, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %113) #9
  store i32 0, ptr %113, align 4, !tbaa !16
  br label %2192

2192:                                             ; preds = %2207, %2188
  %2193 = load i32, ptr %113, align 4, !tbaa !16
  %2194 = load i32, ptr %7, align 4, !tbaa !16
  %2195 = icmp ult i32 %2193, %2194
  br i1 %2195, label %2197, label %2196

2196:                                             ; preds = %2192
  call void @llvm.lifetime.end.p0(i64 4, ptr %113) #9
  br label %2210

2197:                                             ; preds = %2192
  %2198 = load i32, ptr %112, align 4, !tbaa !16
  %2199 = load ptr, ptr %104, align 8, !tbaa !5
  %2200 = load i32, ptr %113, align 4, !tbaa !16
  %2201 = zext i32 %2200 to i64
  %2202 = getelementptr inbounds i32, ptr %2199, i64 %2201
  %2203 = load i32, ptr %2202, align 4, !tbaa !16
  %2204 = icmp ne i32 %2198, %2203
  br i1 %2204, label %2205, label %2206

2205:                                             ; preds = %2197
  store i8 0, ptr %110, align 1, !tbaa !142
  store i8 0, ptr %111, align 1, !tbaa !142
  br label %2206

2206:                                             ; preds = %2205, %2197
  br label %2207

2207:                                             ; preds = %2206
  %2208 = load i32, ptr %113, align 4, !tbaa !16
  %2209 = add i32 %2208, 1
  store i32 %2209, ptr %113, align 4, !tbaa !16
  br label %2192, !llvm.loop !188

2210:                                             ; preds = %2196
  call void @llvm.lifetime.end.p0(i64 4, ptr %112) #9
  br label %2211

2211:                                             ; preds = %2210, %2185
  %2212 = load ptr, ptr %107, align 8, !tbaa !5
  %2213 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %2212, i32 0, i32 2
  %2214 = load i32, ptr %2213, align 8, !tbaa !148
  %2215 = icmp eq i32 %2214, 15
  br i1 %2215, label %2216, label %2222

2216:                                             ; preds = %2211
  %2217 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 21
  %2218 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %2217, i32 0, i32 25
  %2219 = load i8, ptr %2218, align 2, !tbaa !150, !range !127, !noundef !128
  %2220 = trunc i8 %2219 to i1
  br i1 %2220, label %2222, label %2221

2221:                                             ; preds = %2216
  store i8 0, ptr %105, align 1, !tbaa !142
  br label %2222

2222:                                             ; preds = %2221, %2216, %2211
  %2223 = load ptr, ptr %107, align 8, !tbaa !5
  %2224 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %2223, i32 0, i32 6
  %2225 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %2224) #9
  br i1 %2225, label %2232, label %2226

2226:                                             ; preds = %2222
  %2227 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 21
  %2228 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %2227, i32 0, i32 26
  %2229 = load i8, ptr %2228, align 1, !tbaa !189, !range !127, !noundef !128
  %2230 = trunc i8 %2229 to i1
  br i1 %2230, label %2232, label %2231

2231:                                             ; preds = %2226
  store i8 0, ptr %105, align 1, !tbaa !142
  br label %2232

2232:                                             ; preds = %2231, %2226, %2222
  %2233 = load ptr, ptr %107, align 8, !tbaa !5
  %2234 = call noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL13type_is_emptyERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(336) %2233)
  br i1 %2234, label %2235, label %2241

2235:                                             ; preds = %2232
  %2236 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 21
  %2237 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %2236, i32 0, i32 36
  %2238 = load i8, ptr %2237, align 1, !tbaa !190, !range !127, !noundef !128
  %2239 = trunc i8 %2238 to i1
  br i1 %2239, label %2241, label %2240

2240:                                             ; preds = %2235
  store i8 0, ptr %105, align 1, !tbaa !142
  br label %2241

2241:                                             ; preds = %2240, %2235, %2232
  call void @llvm.lifetime.start.p0(i64 32, ptr %114) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %114) #9
  %2242 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 21
  %2243 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %2242, i32 0, i32 23
  %2244 = load i8, ptr %2243, align 8, !tbaa !191, !range !127, !noundef !128
  %2245 = trunc i8 %2244 to i1
  br i1 %2245, label %2246, label %2379

2246:                                             ; preds = %2241
  %2247 = load i8, ptr %109, align 1, !tbaa !142, !range !127, !noundef !128
  %2248 = trunc i8 %2247 to i1
  br i1 %2248, label %2249, label %2379

2249:                                             ; preds = %2246
  call void @llvm.lifetime.start.p0(i64 1, ptr %115) #9
  store i8 0, ptr %115, align 1, !tbaa !142
  %2250 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 21
  %2251 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %2250, i32 0, i32 24
  %2252 = load i8, ptr %2251, align 1, !tbaa !192, !range !127, !noundef !128
  %2253 = trunc i8 %2252 to i1
  br i1 %2253, label %2254, label %2279

2254:                                             ; preds = %2249
  %2255 = load ptr, ptr %107, align 8, !tbaa !5
  %2256 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %2255, i32 0, i32 2
  %2257 = load i32, ptr %2256, align 8, !tbaa !148
  %2258 = icmp eq i32 %2257, 15
  br i1 %2258, label %2259, label %2279

2259:                                             ; preds = %2254
  %2260 = load ptr, ptr %107, align 8, !tbaa !5
  %2261 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %2260, i32 0, i32 6
  %2262 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %2261) #9
  br i1 %2262, label %2263, label %2279

2263:                                             ; preds = %2259
  call void @llvm.lifetime.start.p0(i64 32, ptr %116) #9
  %2264 = load i32, ptr %102, align 4, !tbaa !16
  %2265 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %2264)
          to label %2266 unwind label %2270

2266:                                             ; preds = %2263
  invoke void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %116, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(336) %2265)
          to label %2267 unwind label %2270

2267:                                             ; preds = %2266
  %2268 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %114, ptr noundef nonnull align 8 dereferenceable(32) %116)
          to label %2269 unwind label %2274

2269:                                             ; preds = %2267
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %116) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %116) #9
  br label %2316

2270:                                             ; preds = %2266, %2263
  %2271 = landingpad { ptr, i32 }
          cleanup
  %2272 = extractvalue { ptr, i32 } %2271, 0
  store ptr %2272, ptr %23, align 8
  %2273 = extractvalue { ptr, i32 } %2271, 1
  store i32 %2273, ptr %24, align 4
  br label %2278

2274:                                             ; preds = %2267
  %2275 = landingpad { ptr, i32 }
          cleanup
  %2276 = extractvalue { ptr, i32 } %2275, 0
  store ptr %2276, ptr %23, align 8
  %2277 = extractvalue { ptr, i32 } %2275, 1
  store i32 %2277, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %116) #9
  br label %2278

2278:                                             ; preds = %2274, %2270
  call void @llvm.lifetime.end.p0(i64 32, ptr %116) #9
  br label %2378

2279:                                             ; preds = %2259, %2254, %2249
  %2280 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 21
  %2281 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %2280, i32 0, i32 24
  %2282 = load i8, ptr %2281, align 1, !tbaa !192, !range !127, !noundef !128
  %2283 = trunc i8 %2282 to i1
  br i1 %2283, label %2284, label %2315

2284:                                             ; preds = %2279
  %2285 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 21
  %2286 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %2285, i32 0, i32 37
  %2287 = load i8, ptr %2286, align 2, !tbaa !193, !range !127, !noundef !128
  %2288 = trunc i8 %2287 to i1
  br i1 %2288, label %2289, label %2315

2289:                                             ; preds = %2284
  %2290 = load ptr, ptr %107, align 8, !tbaa !5
  %2291 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %2290, i32 0, i32 6
  %2292 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %2291) #9
  br i1 %2292, label %2315, label %2293

2293:                                             ; preds = %2289
  call void @llvm.lifetime.start.p0(i64 32, ptr %117) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %118) #9
  %2294 = load i32, ptr %102, align 4, !tbaa !16
  %2295 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %2294)
          to label %2296 unwind label %2301

2296:                                             ; preds = %2293
  invoke void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %118, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(336) %2295)
          to label %2297 unwind label %2301

2297:                                             ; preds = %2296
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %117, ptr noundef nonnull align 8 dereferenceable(32) %118, ptr noundef @.str.718)
          to label %2298 unwind label %2305

2298:                                             ; preds = %2297
  %2299 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %114, ptr noundef nonnull align 8 dereferenceable(32) %117)
          to label %2300 unwind label %2309

2300:                                             ; preds = %2298
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %117) #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 %118) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %117) #9
  store i8 1, ptr %115, align 1, !tbaa !142
  br label %2315

2301:                                             ; preds = %2296, %2293
  %2302 = landingpad { ptr, i32 }
          cleanup
  %2303 = extractvalue { ptr, i32 } %2302, 0
  store ptr %2303, ptr %23, align 8
  %2304 = extractvalue { ptr, i32 } %2302, 1
  store i32 %2304, ptr %24, align 4
  br label %2314

2305:                                             ; preds = %2297
  %2306 = landingpad { ptr, i32 }
          cleanup
  %2307 = extractvalue { ptr, i32 } %2306, 0
  store ptr %2307, ptr %23, align 8
  %2308 = extractvalue { ptr, i32 } %2306, 1
  store i32 %2308, ptr %24, align 4
  br label %2313

2309:                                             ; preds = %2298
  %2310 = landingpad { ptr, i32 }
          cleanup
  %2311 = extractvalue { ptr, i32 } %2310, 0
  store ptr %2311, ptr %23, align 8
  %2312 = extractvalue { ptr, i32 } %2310, 1
  store i32 %2312, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %117) #9
  br label %2313

2313:                                             ; preds = %2309, %2305
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %118) #9
  br label %2314

2314:                                             ; preds = %2313, %2301
  call void @llvm.lifetime.end.p0(i64 32, ptr %118) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %117) #9
  br label %2378

2315:                                             ; preds = %2300, %2289, %2284, %2279
  br label %2316

2316:                                             ; preds = %2315, %2269
  %2317 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %114, ptr noundef @.str.946)
          to label %2318 unwind label %2329

2318:                                             ; preds = %2316
  %2319 = load ptr, ptr %107, align 8, !tbaa !5
  %2320 = call noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL13type_is_emptyERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(336) %2319)
  br i1 %2320, label %2321, label %2333

2321:                                             ; preds = %2318
  %2322 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 21
  %2323 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %2322, i32 0, i32 36
  %2324 = load i8, ptr %2323, align 1, !tbaa !190, !range !127, !noundef !128
  %2325 = trunc i8 %2324 to i1
  br i1 %2325, label %2333, label %2326

2326:                                             ; preds = %2321
  %2327 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %114, ptr noundef @.str.760)
          to label %2328 unwind label %2329

2328:                                             ; preds = %2326
  br label %2369

2329:                                             ; preds = %2374, %2369, %2326, %2316
  %2330 = landingpad { ptr, i32 }
          cleanup
  %2331 = extractvalue { ptr, i32 } %2330, 0
  store ptr %2331, ptr %23, align 8
  %2332 = extractvalue { ptr, i32 } %2330, 1
  store i32 %2332, ptr %24, align 4
  br label %2378

2333:                                             ; preds = %2321, %2318
  %2334 = load i8, ptr %110, align 1, !tbaa !142, !range !127, !noundef !128
  %2335 = trunc i8 %2334 to i1
  br i1 %2335, label %2336, label %2352

2336:                                             ; preds = %2333
  call void @llvm.lifetime.start.p0(i64 32, ptr %119) #9
  %2337 = load ptr, ptr %104, align 8, !tbaa !5
  %2338 = getelementptr inbounds i32, ptr %2337, i64 0
  %2339 = load i32, ptr %2338, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %119, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %2339, i1 noundef zeroext true)
          to label %2340 unwind label %2343

2340:                                             ; preds = %2336
  %2341 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %114, ptr noundef nonnull align 8 dereferenceable(32) %119)
          to label %2342 unwind label %2347

2342:                                             ; preds = %2340
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %119) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %119) #9
  br label %2368

2343:                                             ; preds = %2336
  %2344 = landingpad { ptr, i32 }
          cleanup
  %2345 = extractvalue { ptr, i32 } %2344, 0
  store ptr %2345, ptr %23, align 8
  %2346 = extractvalue { ptr, i32 } %2344, 1
  store i32 %2346, ptr %24, align 4
  br label %2351

2347:                                             ; preds = %2340
  %2348 = landingpad { ptr, i32 }
          cleanup
  %2349 = extractvalue { ptr, i32 } %2348, 0
  store ptr %2349, ptr %23, align 8
  %2350 = extractvalue { ptr, i32 } %2348, 1
  store i32 %2350, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %119) #9
  br label %2351

2351:                                             ; preds = %2347, %2343
  call void @llvm.lifetime.end.p0(i64 32, ptr %119) #9
  br label %2378

2352:                                             ; preds = %2333
  call void @llvm.lifetime.start.p0(i64 32, ptr %120) #9
  %2353 = load i32, ptr %102, align 4, !tbaa !16
  %2354 = load ptr, ptr %104, align 8, !tbaa !5
  %2355 = load i32, ptr %7, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL24build_composite_combinerB5cxx11EjPKjj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %120, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %2353, ptr noundef %2354, i32 noundef %2355)
          to label %2356 unwind label %2359

2356:                                             ; preds = %2352
  %2357 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %114, ptr noundef nonnull align 8 dereferenceable(32) %120)
          to label %2358 unwind label %2363

2358:                                             ; preds = %2356
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %120) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %120) #9
  br label %2368

2359:                                             ; preds = %2352
  %2360 = landingpad { ptr, i32 }
          cleanup
  %2361 = extractvalue { ptr, i32 } %2360, 0
  store ptr %2361, ptr %23, align 8
  %2362 = extractvalue { ptr, i32 } %2360, 1
  store i32 %2362, ptr %24, align 4
  br label %2367

2363:                                             ; preds = %2356
  %2364 = landingpad { ptr, i32 }
          cleanup
  %2365 = extractvalue { ptr, i32 } %2364, 0
  store ptr %2365, ptr %23, align 8
  %2366 = extractvalue { ptr, i32 } %2364, 1
  store i32 %2366, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %120) #9
  br label %2367

2367:                                             ; preds = %2363, %2359
  call void @llvm.lifetime.end.p0(i64 32, ptr %120) #9
  br label %2378

2368:                                             ; preds = %2358, %2342
  br label %2369

2369:                                             ; preds = %2368, %2328
  %2370 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %114, ptr noundef @.str.947)
          to label %2371 unwind label %2329

2371:                                             ; preds = %2369
  %2372 = load i8, ptr %115, align 1, !tbaa !142, !range !127, !noundef !128
  %2373 = trunc i8 %2372 to i1
  br i1 %2373, label %2374, label %2377

2374:                                             ; preds = %2371
  %2375 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %114, ptr noundef @.str.135)
          to label %2376 unwind label %2329

2376:                                             ; preds = %2374
  br label %2377

2377:                                             ; preds = %2376, %2371
  call void @llvm.lifetime.end.p0(i64 1, ptr %115) #9
  br label %2479

2378:                                             ; preds = %2367, %2351, %2329, %2314, %2278
  call void @llvm.lifetime.end.p0(i64 1, ptr %115) #9
  br label %2510

2379:                                             ; preds = %2246, %2241
  %2380 = load i8, ptr %111, align 1, !tbaa !142, !range !127, !noundef !128
  %2381 = trunc i8 %2380 to i1
  br i1 %2381, label %2382, label %2409

2382:                                             ; preds = %2379
  %2383 = load i8, ptr %109, align 1, !tbaa !142, !range !127, !noundef !128
  %2384 = trunc i8 %2383 to i1
  br i1 %2384, label %2409, label %2385

2385:                                             ; preds = %2382
  call void @llvm.lifetime.start.p0(i64 32, ptr %121) #9
  %2386 = load i32, ptr %102, align 4, !tbaa !16
  %2387 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %2386)
          to label %2388 unwind label %2395

2388:                                             ; preds = %2385
  call void @llvm.lifetime.start.p0(i64 32, ptr %122) #9
  %2389 = load ptr, ptr %104, align 8, !tbaa !5
  %2390 = getelementptr inbounds i32, ptr %2389, i64 0
  %2391 = load i32, ptr %2390, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %122, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %2391, i1 noundef zeroext true)
          to label %2392 unwind label %2399

2392:                                             ; preds = %2388
  invoke void @_ZN11spirv_cross12CompilerGLSL13remap_swizzleERKNS_8SPIRTypeEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %121, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(336) %2387, i32 noundef 1, ptr noundef nonnull align 8 dereferenceable(32) %122)
          to label %2393 unwind label %2403

2393:                                             ; preds = %2392
  %2394 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %114, ptr noundef nonnull align 8 dereferenceable(32) %121) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %121) #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 %122) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %121) #9
  br label %2478

2395:                                             ; preds = %2385
  %2396 = landingpad { ptr, i32 }
          cleanup
  %2397 = extractvalue { ptr, i32 } %2396, 0
  store ptr %2397, ptr %23, align 8
  %2398 = extractvalue { ptr, i32 } %2396, 1
  store i32 %2398, ptr %24, align 4
  br label %2408

2399:                                             ; preds = %2388
  %2400 = landingpad { ptr, i32 }
          cleanup
  %2401 = extractvalue { ptr, i32 } %2400, 0
  store ptr %2401, ptr %23, align 8
  %2402 = extractvalue { ptr, i32 } %2400, 1
  store i32 %2402, ptr %24, align 4
  br label %2407

2403:                                             ; preds = %2392
  %2404 = landingpad { ptr, i32 }
          cleanup
  %2405 = extractvalue { ptr, i32 } %2404, 0
  store ptr %2405, ptr %23, align 8
  %2406 = extractvalue { ptr, i32 } %2404, 1
  store i32 %2406, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %122) #9
  br label %2407

2407:                                             ; preds = %2403, %2399
  call void @llvm.lifetime.end.p0(i64 32, ptr %122) #9
  br label %2408

2408:                                             ; preds = %2407, %2395
  call void @llvm.lifetime.end.p0(i64 32, ptr %121) #9
  br label %2510

2409:                                             ; preds = %2382, %2379
  call void @llvm.lifetime.start.p0(i64 32, ptr %123) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %124) #9
  %2410 = load i32, ptr %102, align 4, !tbaa !16
  %2411 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %2410)
          to label %2412 unwind label %2426

2412:                                             ; preds = %2409
  invoke void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %124, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(336) %2411)
          to label %2413 unwind label %2426

2413:                                             ; preds = %2412
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %123, ptr noundef nonnull align 8 dereferenceable(32) %124, ptr noundef @.str.718)
          to label %2414 unwind label %2430

2414:                                             ; preds = %2413
  %2415 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %114, ptr noundef nonnull align 8 dereferenceable(32) %123) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %123) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %124) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %124) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %123) #9
  %2416 = load ptr, ptr %107, align 8, !tbaa !5
  %2417 = call noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL13type_is_emptyERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(336) %2416)
  br i1 %2417, label %2418, label %2439

2418:                                             ; preds = %2414
  %2419 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 21
  %2420 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %2419, i32 0, i32 36
  %2421 = load i8, ptr %2420, align 1, !tbaa !190, !range !127, !noundef !128
  %2422 = trunc i8 %2421 to i1
  br i1 %2422, label %2439, label %2423

2423:                                             ; preds = %2418
  %2424 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %114, ptr noundef @.str.760)
          to label %2425 unwind label %2435

2425:                                             ; preds = %2423
  br label %2475

2426:                                             ; preds = %2412, %2409
  %2427 = landingpad { ptr, i32 }
          cleanup
  %2428 = extractvalue { ptr, i32 } %2427, 0
  store ptr %2428, ptr %23, align 8
  %2429 = extractvalue { ptr, i32 } %2427, 1
  store i32 %2429, ptr %24, align 4
  br label %2434

2430:                                             ; preds = %2413
  %2431 = landingpad { ptr, i32 }
          cleanup
  %2432 = extractvalue { ptr, i32 } %2431, 0
  store ptr %2432, ptr %23, align 8
  %2433 = extractvalue { ptr, i32 } %2431, 1
  store i32 %2433, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %124) #9
  br label %2434

2434:                                             ; preds = %2430, %2426
  call void @llvm.lifetime.end.p0(i64 32, ptr %124) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %123) #9
  br label %2510

2435:                                             ; preds = %2481, %2475, %2423
  %2436 = landingpad { ptr, i32 }
          cleanup
  %2437 = extractvalue { ptr, i32 } %2436, 0
  store ptr %2437, ptr %23, align 8
  %2438 = extractvalue { ptr, i32 } %2436, 1
  store i32 %2438, ptr %24, align 4
  br label %2510

2439:                                             ; preds = %2418, %2414
  %2440 = load i8, ptr %110, align 1, !tbaa !142, !range !127, !noundef !128
  %2441 = trunc i8 %2440 to i1
  br i1 %2441, label %2442, label %2458

2442:                                             ; preds = %2439
  call void @llvm.lifetime.start.p0(i64 32, ptr %125) #9
  %2443 = load ptr, ptr %104, align 8, !tbaa !5
  %2444 = getelementptr inbounds i32, ptr %2443, i64 0
  %2445 = load i32, ptr %2444, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %125, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %2445, i1 noundef zeroext true)
          to label %2446 unwind label %2449

2446:                                             ; preds = %2442
  %2447 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %114, ptr noundef nonnull align 8 dereferenceable(32) %125)
          to label %2448 unwind label %2453

2448:                                             ; preds = %2446
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %125) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %125) #9
  br label %2474

2449:                                             ; preds = %2442
  %2450 = landingpad { ptr, i32 }
          cleanup
  %2451 = extractvalue { ptr, i32 } %2450, 0
  store ptr %2451, ptr %23, align 8
  %2452 = extractvalue { ptr, i32 } %2450, 1
  store i32 %2452, ptr %24, align 4
  br label %2457

2453:                                             ; preds = %2446
  %2454 = landingpad { ptr, i32 }
          cleanup
  %2455 = extractvalue { ptr, i32 } %2454, 0
  store ptr %2455, ptr %23, align 8
  %2456 = extractvalue { ptr, i32 } %2454, 1
  store i32 %2456, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %125) #9
  br label %2457

2457:                                             ; preds = %2453, %2449
  call void @llvm.lifetime.end.p0(i64 32, ptr %125) #9
  br label %2510

2458:                                             ; preds = %2439
  call void @llvm.lifetime.start.p0(i64 32, ptr %126) #9
  %2459 = load i32, ptr %102, align 4, !tbaa !16
  %2460 = load ptr, ptr %104, align 8, !tbaa !5
  %2461 = load i32, ptr %7, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL24build_composite_combinerB5cxx11EjPKjj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %126, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %2459, ptr noundef %2460, i32 noundef %2461)
          to label %2462 unwind label %2465

2462:                                             ; preds = %2458
  %2463 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %114, ptr noundef nonnull align 8 dereferenceable(32) %126)
          to label %2464 unwind label %2469

2464:                                             ; preds = %2462
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %126) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %126) #9
  br label %2474

2465:                                             ; preds = %2458
  %2466 = landingpad { ptr, i32 }
          cleanup
  %2467 = extractvalue { ptr, i32 } %2466, 0
  store ptr %2467, ptr %23, align 8
  %2468 = extractvalue { ptr, i32 } %2466, 1
  store i32 %2468, ptr %24, align 4
  br label %2473

2469:                                             ; preds = %2462
  %2470 = landingpad { ptr, i32 }
          cleanup
  %2471 = extractvalue { ptr, i32 } %2470, 0
  store ptr %2471, ptr %23, align 8
  %2472 = extractvalue { ptr, i32 } %2470, 1
  store i32 %2472, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %126) #9
  br label %2473

2473:                                             ; preds = %2469, %2465
  call void @llvm.lifetime.end.p0(i64 32, ptr %126) #9
  br label %2510

2474:                                             ; preds = %2464, %2448
  br label %2475

2475:                                             ; preds = %2474, %2425
  %2476 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %114, ptr noundef @.str.135)
          to label %2477 unwind label %2435

2477:                                             ; preds = %2475
  br label %2478

2478:                                             ; preds = %2477, %2393
  br label %2479

2479:                                             ; preds = %2478, %2377
  %2480 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %114) #9
  br i1 %2480, label %2509, label %2481

2481:                                             ; preds = %2479
  %2482 = load i32, ptr %102, align 4, !tbaa !16
  %2483 = load i32, ptr %103, align 4, !tbaa !16
  %2484 = load i8, ptr %105, align 1, !tbaa !142, !range !127, !noundef !128
  %2485 = trunc i8 %2484 to i1
  %2486 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %2482, i32 noundef %2483, ptr noundef nonnull align 8 dereferenceable(32) %114, i1 noundef zeroext %2485, i1 noundef zeroext false)
          to label %2487 unwind label %2435

2487:                                             ; preds = %2481
  call void @llvm.lifetime.start.p0(i64 4, ptr %127) #9
  store i32 0, ptr %127, align 4, !tbaa !16
  br label %2488

2488:                                             ; preds = %2501, %2487
  %2489 = load i32, ptr %127, align 4, !tbaa !16
  %2490 = load i32, ptr %7, align 4, !tbaa !16
  %2491 = icmp ult i32 %2489, %2490
  br i1 %2491, label %2493, label %2492

2492:                                             ; preds = %2488
  call void @llvm.lifetime.end.p0(i64 4, ptr %127) #9
  br label %2508

2493:                                             ; preds = %2488
  %2494 = load i32, ptr %103, align 4, !tbaa !16
  %2495 = load ptr, ptr %104, align 8, !tbaa !5
  %2496 = load i32, ptr %127, align 4, !tbaa !16
  %2497 = zext i32 %2496 to i64
  %2498 = getelementptr inbounds i32, ptr %2495, i64 %2497
  %2499 = load i32, ptr %2498, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %2494, i32 noundef %2499)
          to label %2500 unwind label %2504

2500:                                             ; preds = %2493
  br label %2501

2501:                                             ; preds = %2500
  %2502 = load i32, ptr %127, align 4, !tbaa !16
  %2503 = add i32 %2502, 1
  store i32 %2503, ptr %127, align 4, !tbaa !16
  br label %2488, !llvm.loop !194

2504:                                             ; preds = %2493
  %2505 = landingpad { ptr, i32 }
          cleanup
  %2506 = extractvalue { ptr, i32 } %2505, 0
  store ptr %2506, ptr %23, align 8
  %2507 = extractvalue { ptr, i32 } %2505, 1
  store i32 %2507, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %127) #9
  br label %2510

2508:                                             ; preds = %2492
  br label %2509

2509:                                             ; preds = %2508, %2479
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %114) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %114) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %111) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %110) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %109) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %107) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %105) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %103) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %102) #9
  br label %11526

2510:                                             ; preds = %2504, %2473, %2457, %2435, %2434, %2408, %2378
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %114) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %114) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %111) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %110) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %109) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %107) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %105) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %103) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %102) #9
  br label %11527

2511:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %128) #9
  %2512 = load ptr, ptr %5, align 8, !tbaa !5
  %2513 = getelementptr inbounds i32, ptr %2512, i64 0
  %2514 = load i32, ptr %2513, align 4, !tbaa !16
  store i32 %2514, ptr %128, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %129) #9
  %2515 = load ptr, ptr %5, align 8, !tbaa !5
  %2516 = getelementptr inbounds i32, ptr %2515, i64 1
  %2517 = load i32, ptr %2516, align 4, !tbaa !16
  store i32 %2517, ptr %129, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %130) #9
  %2518 = load ptr, ptr %5, align 8, !tbaa !5
  %2519 = getelementptr inbounds i32, ptr %2518, i64 2
  %2520 = load i32, ptr %2519, align 4, !tbaa !16
  store i32 %2520, ptr %130, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %131) #9
  %2521 = load ptr, ptr %5, align 8, !tbaa !5
  %2522 = getelementptr inbounds i32, ptr %2521, i64 3
  %2523 = load i32, ptr %2522, align 4, !tbaa !16
  store i32 %2523, ptr %131, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %132) #9
  %2524 = load ptr, ptr %5, align 8, !tbaa !5
  %2525 = getelementptr inbounds i32, ptr %2524, i64 4
  %2526 = load i32, ptr %2525, align 4, !tbaa !16
  store i32 %2526, ptr %132, align 4, !tbaa !16
  %2527 = load i32, ptr %130, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %2527)
  call void @llvm.lifetime.start.p0(i64 32, ptr %133) #9
  %2528 = load i32, ptr %128, align 4, !tbaa !16
  %2529 = load i32, ptr %129, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL17declare_temporaryB5cxx11Ejj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %133, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %2528, i32 noundef %2529)
  call void @llvm.lifetime.start.p0(i64 32, ptr %134) #9
  %2530 = load i32, ptr %130, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %134, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %2530, i1 noundef zeroext true)
          to label %2531 unwind label %2544

2531:                                             ; preds = %2511
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_RA2_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %133, ptr noundef nonnull align 8 dereferenceable(32) %134, ptr noundef nonnull align 1 dereferenceable(2) @.str.298)
          to label %2532 unwind label %2548

2532:                                             ; preds = %2531
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %134) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %134) #9
  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
  %2533 = load i32, ptr %129, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %135) #9
  %2534 = load i32, ptr %129, align 4, !tbaa !16
  %2535 = load ptr, ptr %885, align 8, !tbaa !145
  %2536 = getelementptr inbounds ptr, ptr %2535, i64 6
  %2537 = load ptr, ptr %2536, align 8
  call void %2537(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %135, ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %2534, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 1, ptr %136) #9
  store i8 1, ptr %136, align 1, !tbaa !142
  %2538 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross8Compiler3setINS_14SPIRExpressionEJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERjbEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %2533, ptr noundef nonnull align 8 dereferenceable(32) %135, ptr noundef nonnull align 4 dereferenceable(4) %128, ptr noundef nonnull align 1 dereferenceable(1) %136)
          to label %2539 unwind label %2553

2539:                                             ; preds = %2532
  call void @llvm.lifetime.end.p0(i64 1, ptr %136) #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.start.p0(i64 32, ptr %137) #9
  %2540 = load i32, ptr %129, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %137, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %2540, ptr noundef %132, i32 noundef 1, i32 noundef 0, ptr noundef null)
  call void @llvm.lifetime.start.p0(i64 32, ptr %138) #9
  %2541 = load i32, ptr %131, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %138, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %2541, i1 noundef zeroext true)
          to label %2542 unwind label %2557

2542:                                             ; preds = %2539
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS7_RA2_S9_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %137, ptr noundef nonnull align 1 dereferenceable(4) @.str.335, ptr noundef nonnull align 8 dereferenceable(32) %138, ptr noundef nonnull align 1 dereferenceable(2) @.str.298)
          to label %2543 unwind label %2561

2543:                                             ; preds = %2542
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %138) #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 4, ptr %132) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %131) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %130) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %129) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %128) #9
  br label %11526

2544:                                             ; preds = %2511
  %2545 = landingpad { ptr, i32 }
          cleanup
  %2546 = extractvalue { ptr, i32 } %2545, 0
  store ptr %2546, ptr %23, align 8
  %2547 = extractvalue { ptr, i32 } %2545, 1
  store i32 %2547, ptr %24, align 4
  br label %2552

2548:                                             ; preds = %2531
  %2549 = landingpad { ptr, i32 }
          cleanup
  %2550 = extractvalue { ptr, i32 } %2549, 0
  store ptr %2550, ptr %23, align 8
  %2551 = extractvalue { ptr, i32 } %2549, 1
  store i32 %2551, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %134) #9
  br label %2552

2552:                                             ; preds = %2548, %2544
  call void @llvm.lifetime.end.p0(i64 32, ptr %134) #9
  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 %2566

2553:                                             ; preds = %2532
  %2554 = landingpad { ptr, i32 }
          cleanup
  %2555 = extractvalue { ptr, i32 } %2554, 0
  store ptr %2555, ptr %23, align 8
  %2556 = extractvalue { ptr, i32 } %2554, 1
  store i32 %2556, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %136) #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
  br label %2566

2557:                                             ; preds = %2539
  %2558 = landingpad { ptr, i32 }
          cleanup
  %2559 = extractvalue { ptr, i32 } %2558, 0
  store ptr %2559, ptr %23, align 8
  %2560 = extractvalue { ptr, i32 } %2558, 1
  store i32 %2560, ptr %24, align 4
  br label %2565

2561:                                             ; preds = %2542
  %2562 = landingpad { ptr, i32 }
          cleanup
  %2563 = extractvalue { ptr, i32 } %2562, 0
  store ptr %2563, ptr %23, align 8
  %2564 = extractvalue { ptr, i32 } %2562, 1
  store i32 %2564, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %138) #9
  br label %2565

2565:                                             ; preds = %2561, %2557
  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
  br label %2566

2566:                                             ; preds = %2565, %2553, %2552
  call void @llvm.lifetime.end.p0(i64 4, ptr %132) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %131) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %130) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %129) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %128) #9
  br label %11527

2567:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %139) #9
  %2568 = load ptr, ptr %5, align 8, !tbaa !5
  %2569 = getelementptr inbounds i32, ptr %2568, i64 0
  %2570 = load i32, ptr %2569, align 4, !tbaa !16
  store i32 %2570, ptr %139, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %140) #9
  %2571 = load ptr, ptr %5, align 8, !tbaa !5
  %2572 = getelementptr inbounds i32, ptr %2571, i64 1
  %2573 = load i32, ptr %2572, align 4, !tbaa !16
  store i32 %2573, ptr %140, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %141) #9
  %2574 = load ptr, ptr %5, align 8, !tbaa !5
  %2575 = getelementptr inbounds i32, ptr %2574, i64 2
  %2576 = load i32, ptr %2575, align 4, !tbaa !16
  %2577 = load ptr, ptr %5, align 8, !tbaa !5
  %2578 = getelementptr inbounds i32, ptr %2577, i64 3
  call void @_ZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %141, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %2576, ptr noundef %2578, i32 noundef 1, i32 noundef 0, ptr noundef null)
  %2579 = load i32, ptr %139, align 4, !tbaa !16
  %2580 = load i32, ptr %140, align 4, !tbaa !16
  %2581 = load ptr, ptr %5, align 8, !tbaa !5
  %2582 = getelementptr inbounds i32, ptr %2581, i64 2
  %2583 = load i32, ptr %2582, align 4, !tbaa !16
  %2584 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %2583)
          to label %2585 unwind label %2598

2585:                                             ; preds = %2567
  %2586 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %2579, i32 noundef %2580, ptr noundef nonnull align 8 dereferenceable(32) %141, i1 noundef zeroext %2584, i1 noundef zeroext false)
          to label %2587 unwind label %2598

2587:                                             ; preds = %2585
  %2588 = load i32, ptr %140, align 4, !tbaa !16
  %2589 = load ptr, ptr %5, align 8, !tbaa !5
  %2590 = getelementptr inbounds i32, ptr %2589, i64 2
  %2591 = load i32, ptr %2590, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %2588, i32 noundef %2591)
          to label %2592 unwind label %2598

2592:                                             ; preds = %2587
  %2593 = load i32, ptr %140, align 4, !tbaa !16
  %2594 = load ptr, ptr %5, align 8, !tbaa !5
  %2595 = getelementptr inbounds i32, ptr %2594, i64 3
  %2596 = load i32, ptr %2595, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %2593, i32 noundef %2596)
          to label %2597 unwind label %2598

2597:                                             ; preds = %2592
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %141) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %141) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %140) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %139) #9
  br label %11526

2598:                                             ; preds = %2592, %2587, %2585, %2567
  %2599 = landingpad { ptr, i32 }
          cleanup
  %2600 = extractvalue { ptr, i32 } %2599, 0
  store ptr %2600, ptr %23, align 8
  %2601 = extractvalue { ptr, i32 } %2599, 1
  store i32 %2601, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %141) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %141) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %140) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %139) #9
  br label %11527

2602:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %142) #9
  %2603 = load ptr, ptr %5, align 8, !tbaa !5
  %2604 = getelementptr inbounds i32, ptr %2603, i64 0
  %2605 = load i32, ptr %2604, align 4, !tbaa !16
  store i32 %2605, ptr %142, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %143) #9
  %2606 = load ptr, ptr %5, align 8, !tbaa !5
  %2607 = getelementptr inbounds i32, ptr %2606, i64 1
  %2608 = load i32, ptr %2607, align 4, !tbaa !16
  store i32 %2608, ptr %143, align 4, !tbaa !16
  %2609 = load i32, ptr %7, align 4, !tbaa !16
  %2610 = sub i32 %2609, 3
  store i32 %2610, ptr %7, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %144) #9
  %2611 = load i32, ptr %142, align 4, !tbaa !16
  %2612 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %2611)
  store ptr %2612, ptr %144, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %145) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %146) #9
  %2613 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %885, i32 0, i32 15
  %2614 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE4findERKj(ptr noundef nonnull align 8 dereferenceable(56) %2613, ptr noundef nonnull align 4 dereferenceable(4) %143)
  %2615 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.364", ptr %146, i32 0, i32 0
  %2616 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.365", ptr %2615, i32 0, i32 0
  store ptr %2614, ptr %2616, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %147) #9
  %2617 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %885, i32 0, i32 15
  %2618 = call ptr @_ZSt3endISt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(56) %2617)
  %2619 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.364", ptr %147, i32 0, i32 0
  %2620 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.365", ptr %2619, i32 0, i32 0
  store ptr %2618, ptr %2620, align 8
  %2621 = call noundef zeroext i1 @_ZNSt8__detaileqERKNS_19_Node_iterator_baseIjLb0EEES3_(ptr noundef nonnull align 8 dereferenceable(8) %146, ptr noundef nonnull align 8 dereferenceable(8) %147) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %147) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %146) #9
  %2622 = zext i1 %2621 to i8
  store i8 %2622, ptr %145, align 1, !tbaa !142
  call void @llvm.lifetime.start.p0(i64 8, ptr %148) #9
  %2623 = load ptr, ptr %5, align 8, !tbaa !5
  %2624 = getelementptr inbounds i32, ptr %2623, i64 2
  %2625 = load i32, ptr %2624, align 4, !tbaa !16
  %2626 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %2625)
  store ptr %2626, ptr %148, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %149) #9
  %2627 = load ptr, ptr %148, align 8, !tbaa !5
  %2628 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %2627, i32 0, i32 2
  %2629 = load i32, ptr %2628, align 8, !tbaa !148
  %2630 = icmp eq i32 %2629, 15
  br i1 %2630, label %2636, label %2631

2631:                                             ; preds = %2602
  %2632 = load ptr, ptr %148, align 8, !tbaa !5
  %2633 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %2632, i32 0, i32 6
  %2634 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %2633) #9
  %2635 = xor i1 %2634, true
  br label %2636

2636:                                             ; preds = %2631, %2602
  %2637 = phi i1 [ true, %2602 ], [ %2635, %2631 ]
  %2638 = zext i1 %2637 to i8
  store i8 %2638, ptr %149, align 1, !tbaa !142
  %2639 = load i8, ptr %149, align 1, !tbaa !142, !range !127, !noundef !128
  %2640 = trunc i8 %2639 to i1
  br i1 %2640, label %2641, label %2642

2641:                                             ; preds = %2636
  store i8 0, ptr %145, align 1, !tbaa !142
  br label %2642

2642:                                             ; preds = %2641, %2636
  %2643 = load ptr, ptr %5, align 8, !tbaa !5
  %2644 = getelementptr inbounds i32, ptr %2643, i64 2
  %2645 = load i32, ptr %2644, align 4, !tbaa !16
  %2646 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler23has_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %2645, i32 noundef 2)
  br i1 %2646, label %2652, label %2647

2647:                                             ; preds = %2642
  %2648 = load ptr, ptr %5, align 8, !tbaa !5
  %2649 = getelementptr inbounds i32, ptr %2648, i64 2
  %2650 = load i32, ptr %2649, align 4, !tbaa !16
  %2651 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler23has_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %2650, i32 noundef 1)
  br i1 %2651, label %2652, label %2653

2652:                                             ; preds = %2647, %2642
  store i8 0, ptr %145, align 1, !tbaa !142
  br label %2653

2653:                                             ; preds = %2652, %2647
  %2654 = load ptr, ptr %5, align 8, !tbaa !5
  %2655 = getelementptr inbounds i32, ptr %2654, i64 2
  %2656 = load i32, ptr %2655, align 4, !tbaa !16
  %2657 = load ptr, ptr %885, align 8, !tbaa !145
  %2658 = getelementptr inbounds ptr, ptr %2657, i64 40
  %2659 = load ptr, ptr %2658, align 8
  %2660 = call noundef zeroext i1 %2659(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %2656)
  br i1 %2660, label %2661, label %2662

2661:                                             ; preds = %2653
  store i8 0, ptr %145, align 1, !tbaa !142
  br label %2662

2662:                                             ; preds = %2661, %2653
  call void @llvm.lifetime.start.p0(i64 16, ptr %150) #9
  call void @_ZN11spirv_cross15AccessChainMetaC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %150) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %151) #9
  store ptr null, ptr %151, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %152) #9
  %2663 = load ptr, ptr %5, align 8, !tbaa !5
  %2664 = getelementptr inbounds i32, ptr %2663, i64 2
  %2665 = load i32, ptr %2664, align 4, !tbaa !16
  %2666 = call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_12SPIRConstantEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %2665)
  store ptr %2666, ptr %152, align 8, !tbaa !5
  %2667 = load ptr, ptr %152, align 8, !tbaa !5
  %2668 = icmp ne ptr %2667, null
  br i1 %2668, label %2669, label %2691

2669:                                             ; preds = %2662
  %2670 = load ptr, ptr %152, align 8, !tbaa !5
  %2671 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %2670, i32 0, i32 3
  %2672 = load i8, ptr %2671, align 8, !tbaa !195, !range !127, !noundef !128
  %2673 = trunc i8 %2672 to i1
  br i1 %2673, label %2691, label %2674

2674:                                             ; preds = %2669
  %2675 = load i8, ptr %149, align 1, !tbaa !142, !range !127, !noundef !128
  %2676 = trunc i8 %2675 to i1
  br i1 %2676, label %2691, label %2677

2677:                                             ; preds = %2674
  call void @llvm.lifetime.start.p0(i64 32, ptr %153) #9
  %2678 = load i32, ptr %142, align 4, !tbaa !16
  %2679 = load ptr, ptr %152, align 8, !tbaa !5
  %2680 = load ptr, ptr %5, align 8, !tbaa !5
  %2681 = getelementptr inbounds i32, ptr %2680, i64 3
  %2682 = load i32, ptr %7, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL40to_extract_constant_composite_expressionB5cxx11EjRKNS_12SPIRConstantEPKjj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %153, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %2678, ptr noundef nonnull align 8 dereferenceable(360) %2679, ptr noundef %2681, i32 noundef %2682)
  %2683 = load i32, ptr %142, align 4, !tbaa !16
  %2684 = load i32, ptr %143, align 4, !tbaa !16
  %2685 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %2683, i32 noundef %2684, ptr noundef nonnull align 8 dereferenceable(32) %153, i1 noundef zeroext true, i1 noundef zeroext true)
          to label %2686 unwind label %2687

2686:                                             ; preds = %2677
  store ptr %2685, ptr %151, align 8, !tbaa !5
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %153) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %153) #9
  br label %2796

2687:                                             ; preds = %2677
  %2688 = landingpad { ptr, i32 }
          cleanup
  %2689 = extractvalue { ptr, i32 } %2688, 0
  store ptr %2689, ptr %23, align 8
  %2690 = extractvalue { ptr, i32 } %2688, 1
  store i32 %2690, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %153) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %153) #9
  br label %2825

2691:                                             ; preds = %2674, %2669, %2662
  %2692 = load i8, ptr %145, align 1, !tbaa !142, !range !127, !noundef !128
  %2693 = trunc i8 %2692 to i1
  br i1 %2693, label %2694, label %2765

2694:                                             ; preds = %2691
  %2695 = load ptr, ptr %5, align 8, !tbaa !5
  %2696 = getelementptr inbounds i32, ptr %2695, i64 2
  %2697 = load i32, ptr %2696, align 4, !tbaa !16
  %2698 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %2697)
  br i1 %2698, label %2699, label %2765

2699:                                             ; preds = %2694
  %2700 = load ptr, ptr %144, align 8, !tbaa !5
  %2701 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %2700, i32 0, i32 4
  %2702 = load i32, ptr %2701, align 8, !tbaa !129
  %2703 = icmp eq i32 %2702, 1
  br i1 %2703, label %2704, label %2765

2704:                                             ; preds = %2699
  %2705 = load ptr, ptr %144, align 8, !tbaa !5
  %2706 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %2705, i32 0, i32 5
  %2707 = load i32, ptr %2706, align 4, !tbaa !149
  %2708 = icmp eq i32 %2707, 1
  br i1 %2708, label %2709, label %2765

2709:                                             ; preds = %2704
  %2710 = load i32, ptr %7, align 4, !tbaa !16
  %2711 = icmp eq i32 %2710, 1
  br i1 %2711, label %2712, label %2765

2712:                                             ; preds = %2709
  call void @llvm.lifetime.start.p0(i64 32, ptr %154) #9
  %2713 = load ptr, ptr %5, align 8, !tbaa !5
  %2714 = getelementptr inbounds i32, ptr %2713, i64 2
  %2715 = load i32, ptr %2714, align 4, !tbaa !16
  %2716 = load ptr, ptr %5, align 8, !tbaa !5
  %2717 = getelementptr inbounds i32, ptr %2716, i64 3
  %2718 = load i32, ptr %7, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %154, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %2715, ptr noundef %2717, i32 noundef %2718, i32 noundef 67, ptr noundef %150)
  %2719 = load i32, ptr %142, align 4, !tbaa !16
  %2720 = load i32, ptr %143, align 4, !tbaa !16
  %2721 = load ptr, ptr %5, align 8, !tbaa !5
  %2722 = getelementptr inbounds i32, ptr %2721, i64 2
  %2723 = load i32, ptr %2722, align 4, !tbaa !16
  %2724 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL30should_suppress_usage_trackingEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %2723)
          to label %2725 unwind label %2755

2725:                                             ; preds = %2712
  %2726 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %2719, i32 noundef %2720, ptr noundef nonnull align 8 dereferenceable(32) %154, i1 noundef zeroext true, i1 noundef zeroext %2724)
          to label %2727 unwind label %2755

2727:                                             ; preds = %2725
  store ptr %2726, ptr %151, align 8, !tbaa !5
  %2728 = load i32, ptr %143, align 4, !tbaa !16
  %2729 = load ptr, ptr %5, align 8, !tbaa !5
  %2730 = getelementptr inbounds i32, ptr %2729, i64 2
  %2731 = load i32, ptr %2730, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %2728, i32 noundef %2731)
          to label %2732 unwind label %2755

2732:                                             ; preds = %2727
  call void @llvm.lifetime.start.p0(i64 4, ptr %155) #9
  %2733 = load ptr, ptr %5, align 8, !tbaa !5
  %2734 = getelementptr inbounds i32, ptr %2733, i64 2
  %2735 = load i32, ptr %2734, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %155, i32 noundef %2735)
          to label %2736 unwind label %2759

2736:                                             ; preds = %2732
  %2737 = load ptr, ptr %151, align 8, !tbaa !5
  %2738 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %2737, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %2738, ptr align 4 %155, i64 4, i1 false), !tbaa.struct !151
  call void @llvm.lifetime.end.p0(i64 4, ptr %155) #9
  %2739 = getelementptr inbounds %"struct.spirv_cross::AccessChainMeta", ptr %150, i32 0, i32 5
  %2740 = load i8, ptr %2739, align 4, !tbaa !162, !range !127, !noundef !128
  %2741 = trunc i8 %2740 to i1
  br i1 %2741, label %2742, label %2763

2742:                                             ; preds = %2736
  %2743 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 21
  %2744 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %2743, i32 0, i32 49
  %2745 = load i8, ptr %2744, align 2, !tbaa !163, !range !127, !noundef !128
  %2746 = trunc i8 %2745 to i1
  br i1 %2746, label %2747, label %2763

2747:                                             ; preds = %2742
  %2748 = load ptr, ptr %5, align 8, !tbaa !5
  %2749 = getelementptr inbounds i32, ptr %2748, i64 1
  %2750 = load i32, ptr %2749, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %156, i32 noundef %2750)
          to label %2751 unwind label %2755

2751:                                             ; preds = %2747
  %2752 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %156, i32 0, i32 0
  %2753 = load i32, ptr %2752, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 %2753, i32 noundef 0, i32 noundef 0)
          to label %2754 unwind label %2755

2754:                                             ; preds = %2751
  br label %2763

2755:                                             ; preds = %2751, %2747, %2727, %2725, %2712
  %2756 = landingpad { ptr, i32 }
          cleanup
  %2757 = extractvalue { ptr, i32 } %2756, 0
  store ptr %2757, ptr %23, align 8
  %2758 = extractvalue { ptr, i32 } %2756, 1
  store i32 %2758, ptr %24, align 4
  br label %2764

2759:                                             ; preds = %2732
  %2760 = landingpad { ptr, i32 }
          cleanup
  %2761 = extractvalue { ptr, i32 } %2760, 0
  store ptr %2761, ptr %23, align 8
  %2762 = extractvalue { ptr, i32 } %2760, 1
  store i32 %2762, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %155) #9
  br label %2764

2763:                                             ; preds = %2754, %2742, %2736
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %154) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %154) #9
  br label %2795

2764:                                             ; preds = %2759, %2755
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %154) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %154) #9
  br label %2825

2765:                                             ; preds = %2709, %2704, %2699, %2694, %2691
  call void @llvm.lifetime.start.p0(i64 32, ptr %157) #9
  %2766 = load ptr, ptr %5, align 8, !tbaa !5
  %2767 = getelementptr inbounds i32, ptr %2766, i64 2
  %2768 = load i32, ptr %2767, align 4, !tbaa !16
  %2769 = load ptr, ptr %5, align 8, !tbaa !5
  %2770 = getelementptr inbounds i32, ptr %2769, i64 3
  %2771 = load i32, ptr %7, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %157, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %2768, ptr noundef %2770, i32 noundef %2771, i32 noundef 65, ptr noundef %150)
  %2772 = load i32, ptr %142, align 4, !tbaa !16
  %2773 = load i32, ptr %143, align 4, !tbaa !16
  %2774 = load ptr, ptr %5, align 8, !tbaa !5
  %2775 = getelementptr inbounds i32, ptr %2774, i64 2
  %2776 = load i32, ptr %2775, align 4, !tbaa !16
  %2777 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %2776)
          to label %2778 unwind label %2791

2778:                                             ; preds = %2765
  %2779 = load ptr, ptr %5, align 8, !tbaa !5
  %2780 = getelementptr inbounds i32, ptr %2779, i64 2
  %2781 = load i32, ptr %2780, align 4, !tbaa !16
  %2782 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL30should_suppress_usage_trackingEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %2781)
          to label %2783 unwind label %2791

2783:                                             ; preds = %2778
  %2784 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %2772, i32 noundef %2773, ptr noundef nonnull align 8 dereferenceable(32) %157, i1 noundef zeroext %2777, i1 noundef zeroext %2782)
          to label %2785 unwind label %2791

2785:                                             ; preds = %2783
  store ptr %2784, ptr %151, align 8, !tbaa !5
  %2786 = load i32, ptr %143, align 4, !tbaa !16
  %2787 = load ptr, ptr %5, align 8, !tbaa !5
  %2788 = getelementptr inbounds i32, ptr %2787, i64 2
  %2789 = load i32, ptr %2788, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %2786, i32 noundef %2789)
          to label %2790 unwind label %2791

2790:                                             ; preds = %2785
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %157) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %157) #9
  br label %2795

2791:                                             ; preds = %2785, %2783, %2778, %2765
  %2792 = landingpad { ptr, i32 }
          cleanup
  %2793 = extractvalue { ptr, i32 } %2792, 0
  store ptr %2793, ptr %23, align 8
  %2794 = extractvalue { ptr, i32 } %2792, 1
  store i32 %2794, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %157) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %157) #9
  br label %2825

2795:                                             ; preds = %2790, %2763
  br label %2796

2796:                                             ; preds = %2795, %2686
  %2797 = getelementptr inbounds %"struct.spirv_cross::AccessChainMeta", ptr %150, i32 0, i32 1
  %2798 = load i8, ptr %2797, align 4, !tbaa !152, !range !127, !noundef !128
  %2799 = trunc i8 %2798 to i1
  %2800 = load ptr, ptr %151, align 8, !tbaa !5
  %2801 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %2800, i32 0, i32 6
  %2802 = zext i1 %2799 to i8
  store i8 %2802, ptr %2801, align 1, !tbaa !143
  %2803 = getelementptr inbounds %"struct.spirv_cross::AccessChainMeta", ptr %150, i32 0, i32 2
  %2804 = load i8, ptr %2803, align 1, !tbaa !158, !range !127, !noundef !128
  %2805 = trunc i8 %2804 to i1
  br i1 %2805, label %2806, label %2808

2806:                                             ; preds = %2796
  %2807 = load i32, ptr %143, align 4, !tbaa !16
  call void @_ZN11spirv_cross8Compiler23set_extended_decorationEjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %2807, i32 noundef 2, i32 noundef 0)
  br label %2808

2808:                                             ; preds = %2806, %2796
  %2809 = getelementptr inbounds %"struct.spirv_cross::AccessChainMeta", ptr %150, i32 0, i32 0
  %2810 = load i32, ptr %2809, align 4, !tbaa !159
  %2811 = icmp ne i32 %2810, 0
  br i1 %2811, label %2812, label %2816

2812:                                             ; preds = %2808
  %2813 = load i32, ptr %143, align 4, !tbaa !16
  %2814 = getelementptr inbounds %"struct.spirv_cross::AccessChainMeta", ptr %150, i32 0, i32 0
  %2815 = load i32, ptr %2814, align 4, !tbaa !159
  call void @_ZN11spirv_cross8Compiler23set_extended_decorationEjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %2813, i32 noundef 1, i32 noundef %2815)
  br label %2816

2816:                                             ; preds = %2812, %2808
  %2817 = getelementptr inbounds %"struct.spirv_cross::AccessChainMeta", ptr %150, i32 0, i32 3
  %2818 = load i8, ptr %2817, align 2, !tbaa !160, !range !127, !noundef !128
  %2819 = trunc i8 %2818 to i1
  br i1 %2819, label %2820, label %2824

2820:                                             ; preds = %2816
  %2821 = load i32, ptr %143, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %158, i32 noundef %2821)
  %2822 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %158, i32 0, i32 0
  %2823 = load i32, ptr %2822, align 4
  call void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 %2823, i32 noundef 18, i32 noundef 0)
  br label %2824

2824:                                             ; preds = %2820, %2816
  call void @llvm.lifetime.end.p0(i64 8, ptr %152) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %151) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %150) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %149) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %148) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %145) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %144) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %143) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %142) #9
  br label %11526

2825:                                             ; preds = %2791, %2764, %2687
  call void @llvm.lifetime.end.p0(i64 8, ptr %152) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %151) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %150) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %149) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %148) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %145) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %144) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %143) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %142) #9
  br label %11527

2826:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %159) #9
  %2827 = load ptr, ptr %5, align 8, !tbaa !5
  %2828 = getelementptr inbounds i32, ptr %2827, i64 0
  %2829 = load i32, ptr %2828, align 4, !tbaa !16
  store i32 %2829, ptr %159, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %160) #9
  %2830 = load ptr, ptr %5, align 8, !tbaa !5
  %2831 = getelementptr inbounds i32, ptr %2830, i64 1
  %2832 = load i32, ptr %2831, align 4, !tbaa !16
  store i32 %2832, ptr %160, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %161) #9
  %2833 = load ptr, ptr %5, align 8, !tbaa !5
  %2834 = getelementptr inbounds i32, ptr %2833, i64 2
  %2835 = load i32, ptr %2834, align 4, !tbaa !16
  store i32 %2835, ptr %161, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %162) #9
  %2836 = load ptr, ptr %5, align 8, !tbaa !5
  %2837 = getelementptr inbounds i32, ptr %2836, i64 3
  %2838 = load i32, ptr %2837, align 4, !tbaa !16
  store i32 %2838, ptr %162, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %163) #9
  %2839 = load ptr, ptr %5, align 8, !tbaa !5
  %2840 = getelementptr inbounds i32, ptr %2839, i64 4
  store ptr %2840, ptr %163, align 8, !tbaa !5
  %2841 = load i32, ptr %7, align 4, !tbaa !16
  %2842 = sub i32 %2841, 4
  store i32 %2842, ptr %7, align 4, !tbaa !16
  %2843 = load i32, ptr %162, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %2843)
  call void @llvm.lifetime.start.p0(i64 1, ptr %164) #9
  store i8 1, ptr %164, align 1, !tbaa !142
  %2844 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %885, i32 0, i32 15
  %2845 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %2844, ptr noundef nonnull align 4 dereferenceable(4) %160)
  %2846 = getelementptr inbounds { ptr, i8 }, ptr %165, i32 0, i32 0
  %2847 = extractvalue { ptr, i8 } %2845, 0
  store ptr %2847, ptr %2846, align 8
  %2848 = getelementptr inbounds { ptr, i8 }, ptr %165, i32 0, i32 1
  %2849 = extractvalue { ptr, i8 } %2845, 1
  store i8 %2849, ptr %2848, align 8
  %2850 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %885, i32 0, i32 9
  %2851 = call noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %2850, ptr noundef nonnull align 4 dereferenceable(4) %162)
  %2852 = icmp ne i64 %2851, 0
  br i1 %2852, label %2869, label %2853

2853:                                             ; preds = %2826
  %2854 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 44
  %2855 = call noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %2854, ptr noundef nonnull align 4 dereferenceable(4) %162)
  %2856 = icmp ne i64 %2855, 0
  br i1 %2856, label %2869, label %2857

2857:                                             ; preds = %2853
  %2858 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %885, i32 0, i32 18
  %2859 = call noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %2858, ptr noundef nonnull align 4 dereferenceable(4) %160)
  %2860 = icmp ne i64 %2859, 0
  br i1 %2860, label %2869, label %2861

2861:                                             ; preds = %2857
  %2862 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %885, i32 0, i32 18
  %2863 = call noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %2862, ptr noundef nonnull align 4 dereferenceable(4) %162)
  %2864 = icmp ne i64 %2863, 0
  br i1 %2864, label %2869, label %2865

2865:                                             ; preds = %2861
  %2866 = load i32, ptr %162, align 4, !tbaa !16
  %2867 = call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_14SPIRExpressionEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %2866)
  %2868 = icmp eq ptr %2867, null
  br i1 %2868, label %2869, label %2870

2869:                                             ; preds = %2865, %2861, %2857, %2853, %2826
  store i8 0, ptr %164, align 1, !tbaa !142
  br label %2895

2870:                                             ; preds = %2865
  %2871 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 21
  %2872 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %2871, i32 0, i32 49
  %2873 = load i8, ptr %2872, align 2, !tbaa !163, !range !127, !noundef !128
  %2874 = trunc i8 %2873 to i1
  br i1 %2874, label %2875, label %2894

2875:                                             ; preds = %2870
  %2876 = load i32, ptr %162, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %166, i32 noundef %2876)
  %2877 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %166, i32 0, i32 0
  %2878 = load i32, ptr %2877, align 4
  %2879 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 %2878, i32 noundef 0)
  %2880 = zext i1 %2879 to i32
  %2881 = load i32, ptr %160, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %167, i32 noundef %2881)
  %2882 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %167, i32 0, i32 0
  %2883 = load i32, ptr %2882, align 4
  %2884 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 %2883, i32 noundef 0)
  %2885 = zext i1 %2884 to i32
  %2886 = icmp ne i32 %2880, %2885
  br i1 %2886, label %2887, label %2894

2887:                                             ; preds = %2875
  %2888 = load i32, ptr %159, align 4, !tbaa !16
  %2889 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %2888)
  %2890 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %2889, i32 0, i32 2
  %2891 = load i32, ptr %2890, align 8, !tbaa !148
  %2892 = icmp ne i32 %2891, 15
  br i1 %2892, label %2893, label %2894

2893:                                             ; preds = %2887
  store i8 0, ptr %164, align 1, !tbaa !142
  br label %2894

2894:                                             ; preds = %2893, %2887, %2875, %2870
  br label %2895

2895:                                             ; preds = %2894, %2869
  %2896 = load i8, ptr %164, align 1, !tbaa !142, !range !127, !noundef !128
  %2897 = trunc i8 %2896 to i1
  br i1 %2897, label %2898, label %2953

2898:                                             ; preds = %2895
  %2899 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %885, i32 0, i32 15
  %2900 = call noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %2899, ptr noundef nonnull align 4 dereferenceable(4) %162)
  %2901 = icmp ne i64 %2900, 0
  br i1 %2901, label %2904, label %2902

2902:                                             ; preds = %2898
  %2903 = load i32, ptr %162, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL29force_temporary_and_recompileEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %2903)
  br label %2904

2904:                                             ; preds = %2902, %2898
  call void @llvm.lifetime.start.p0(i64 32, ptr %168) #9
  %2905 = load i32, ptr %162, align 4, !tbaa !16
  %2906 = load ptr, ptr %163, align 8, !tbaa !5
  %2907 = load i32, ptr %7, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %168, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %2905, ptr noundef %2906, i32 noundef %2907, i32 noundef 1, ptr noundef null)
  call void @llvm.lifetime.start.p0(i64 32, ptr %169) #9
  %2908 = load i32, ptr %161, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %169, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %2908, i1 noundef zeroext true)
          to label %2909 unwind label %2930

2909:                                             ; preds = %2904
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS7_RA2_S9_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %168, ptr noundef nonnull align 1 dereferenceable(4) @.str.335, ptr noundef nonnull align 8 dereferenceable(32) %169, ptr noundef nonnull align 1 dereferenceable(2) @.str.298)
          to label %2910 unwind label %2934

2910:                                             ; preds = %2909
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %169) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %169) #9
  %2911 = load i32, ptr %160, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %170) #9
  %2912 = load i32, ptr %162, align 4, !tbaa !16
  invoke 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) %885, i32 noundef %2912, i1 noundef zeroext true)
          to label %2913 unwind label %2939

2913:                                             ; preds = %2910
  call void @llvm.lifetime.start.p0(i64 1, ptr %171) #9
  store i8 1, ptr %171, align 1, !tbaa !142
  %2914 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross8Compiler3setINS_14SPIRExpressionEJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERjbEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %2911, ptr noundef nonnull align 8 dereferenceable(32) %170, ptr noundef nonnull align 4 dereferenceable(4) %159, ptr noundef nonnull align 1 dereferenceable(1) %171)
          to label %2915 unwind label %2943

2915:                                             ; preds = %2913
  call void @llvm.lifetime.end.p0(i64 1, 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
  %2916 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %885, i32 0, i32 9
  %2917 = invoke { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %2916, ptr noundef nonnull align 4 dereferenceable(4) %162)
          to label %2918 unwind label %2948

2918:                                             ; preds = %2915
  %2919 = getelementptr inbounds { ptr, i8 }, ptr %172, i32 0, i32 0
  %2920 = extractvalue { ptr, i8 } %2917, 0
  store ptr %2920, ptr %2919, align 8
  %2921 = getelementptr inbounds { ptr, i8 }, ptr %172, i32 0, i32 1
  %2922 = extractvalue { ptr, i8 } %2917, 1
  store i8 %2922, ptr %2921, align 8
  %2923 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 43
  %2924 = invoke { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %2923, ptr noundef nonnull align 4 dereferenceable(4) %162)
          to label %2925 unwind label %2948

2925:                                             ; preds = %2918
  %2926 = getelementptr inbounds { ptr, i8 }, ptr %173, i32 0, i32 0
  %2927 = extractvalue { ptr, i8 } %2924, 0
  store ptr %2927, ptr %2926, align 8
  %2928 = getelementptr inbounds { ptr, i8 }, ptr %173, i32 0, i32 1
  %2929 = extractvalue { ptr, i8 } %2924, 1
  store i8 %2929, ptr %2928, align 8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %168) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %168) #9
  br label %3003

2930:                                             ; preds = %2904
  %2931 = landingpad { ptr, i32 }
          cleanup
  %2932 = extractvalue { ptr, i32 } %2931, 0
  store ptr %2932, ptr %23, align 8
  %2933 = extractvalue { ptr, i32 } %2931, 1
  store i32 %2933, ptr %24, align 4
  br label %2938

2934:                                             ; preds = %2909
  %2935 = landingpad { ptr, i32 }
          cleanup
  %2936 = extractvalue { ptr, i32 } %2935, 0
  store ptr %2936, ptr %23, align 8
  %2937 = extractvalue { ptr, i32 } %2935, 1
  store i32 %2937, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %169) #9
  br label %2938

2938:                                             ; preds = %2934, %2930
  call void @llvm.lifetime.end.p0(i64 32, ptr %169) #9
  br label %2952

2939:                                             ; preds = %2910
  %2940 = landingpad { ptr, i32 }
          cleanup
  %2941 = extractvalue { ptr, i32 } %2940, 0
  store ptr %2941, ptr %23, align 8
  %2942 = extractvalue { ptr, i32 } %2940, 1
  store i32 %2942, ptr %24, align 4
  br label %2947

2943:                                             ; preds = %2913
  %2944 = landingpad { ptr, i32 }
          cleanup
  %2945 = extractvalue { ptr, i32 } %2944, 0
  store ptr %2945, ptr %23, align 8
  %2946 = extractvalue { ptr, i32 } %2944, 1
  store i32 %2946, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %171) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %170) #9
  br label %2947

2947:                                             ; preds = %2943, %2939
  call void @llvm.lifetime.end.p0(i64 32, ptr %170) #9
  br label %2952

2948:                                             ; preds = %2918, %2915
  %2949 = landingpad { ptr, i32 }
          cleanup
  %2950 = extractvalue { ptr, i32 } %2949, 0
  store ptr %2950, ptr %23, align 8
  %2951 = extractvalue { ptr, i32 } %2949, 1
  store i32 %2951, ptr %24, align 4
  br label %2952

2952:                                             ; preds = %2948, %2947, %2938
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %168) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %168) #9
  br label %3004

2953:                                             ; preds = %2895
  %2954 = load i32, ptr %162, align 4, !tbaa !16
  %2955 = call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_9SPIRUndefEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %2954)
  %2956 = icmp ne ptr %2955, null
  br i1 %2956, label %2957, label %2961

2957:                                             ; preds = %2953
  %2958 = load i32, ptr %159, align 4, !tbaa !16
  %2959 = load i32, ptr %160, align 4, !tbaa !16
  %2960 = call noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL39emit_uninitialized_temporary_expressionEjj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %2958, i32 noundef %2959)
  br label %2987

2961:                                             ; preds = %2953
  call void @llvm.lifetime.start.p0(i64 32, ptr %174) #9
  %2962 = load i32, ptr %159, align 4, !tbaa !16
  %2963 = load i32, ptr %160, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL17declare_temporaryB5cxx11Ejj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %174, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %2962, i32 noundef %2963)
  call void @llvm.lifetime.start.p0(i64 32, ptr %175) #9
  %2964 = load i32, ptr %162, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %175, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %2964, i1 noundef zeroext true)
          to label %2965 unwind label %2974

2965:                                             ; preds = %2961
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_RA2_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %174, ptr noundef nonnull align 8 dereferenceable(32) %175, ptr noundef nonnull align 1 dereferenceable(2) @.str.298)
          to label %2966 unwind label %2978

2966:                                             ; preds = %2965
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %175) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %175) #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 %174) #9
  %2967 = load i32, ptr %160, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %176) #9
  %2968 = load i32, ptr %160, align 4, !tbaa !16
  %2969 = load ptr, ptr %885, align 8, !tbaa !145
  %2970 = getelementptr inbounds ptr, ptr %2969, i64 6
  %2971 = load ptr, ptr %2970, align 8
  call void %2971(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %176, ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %2968, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 1, ptr %177) #9
  store i8 1, ptr %177, align 1, !tbaa !142
  %2972 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross8Compiler3setINS_14SPIRExpressionEJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERjbEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %2967, ptr noundef nonnull align 8 dereferenceable(32) %176, ptr noundef nonnull align 4 dereferenceable(4) %159, ptr noundef nonnull align 1 dereferenceable(1) %177)
          to label %2973 unwind label %2983

2973:                                             ; preds = %2966
  call void @llvm.lifetime.end.p0(i64 1, ptr %177) #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 %176) #9
  br label %2987

2974:                                             ; preds = %2961
  %2975 = landingpad { ptr, i32 }
          cleanup
  %2976 = extractvalue { ptr, i32 } %2975, 0
  store ptr %2976, ptr %23, align 8
  %2977 = extractvalue { ptr, i32 } %2975, 1
  store i32 %2977, ptr %24, align 4
  br label %2982

2978:                                             ; preds = %2965
  %2979 = landingpad { ptr, i32 }
          cleanup
  %2980 = extractvalue { ptr, i32 } %2979, 0
  store ptr %2980, ptr %23, align 8
  %2981 = extractvalue { ptr, i32 } %2979, 1
  store i32 %2981, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %175) #9
  br label %2982

2982:                                             ; preds = %2978, %2974
  call void @llvm.lifetime.end.p0(i64 32, ptr %175) #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 %174) #9
  br label %3004

2983:                                             ; preds = %2966
  %2984 = landingpad { ptr, i32 }
          cleanup
  %2985 = extractvalue { ptr, i32 } %2984, 0
  store ptr %2985, ptr %23, align 8
  %2986 = extractvalue { ptr, i32 } %2984, 1
  store i32 %2986, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %177) #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 %176) #9
  br label %3004

2987:                                             ; preds = %2973, %2957
  call void @llvm.lifetime.start.p0(i64 32, ptr %178) #9
  %2988 = load i32, ptr %160, align 4, !tbaa !16
  %2989 = load ptr, ptr %163, align 8, !tbaa !5
  %2990 = load i32, ptr %7, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %178, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %2988, ptr noundef %2989, i32 noundef %2990, i32 noundef 1, ptr noundef null)
  call void @llvm.lifetime.start.p0(i64 32, ptr %179) #9
  %2991 = load i32, ptr %161, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %179, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %2991, i1 noundef zeroext true)
          to label %2992 unwind label %2994

2992:                                             ; preds = %2987
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS7_RA2_S9_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %178, ptr noundef nonnull align 1 dereferenceable(4) @.str.335, ptr noundef nonnull align 8 dereferenceable(32) %179, ptr noundef nonnull align 1 dereferenceable(2) @.str.298)
          to label %2993 unwind label %2998

2993:                                             ; preds = %2992
  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 @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %178) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %178) #9
  br label %3003

2994:                                             ; preds = %2987
  %2995 = landingpad { ptr, i32 }
          cleanup
  %2996 = extractvalue { ptr, i32 } %2995, 0
  store ptr %2996, ptr %23, align 8
  %2997 = extractvalue { ptr, i32 } %2995, 1
  store i32 %2997, ptr %24, align 4
  br label %3002

2998:                                             ; preds = %2992
  %2999 = landingpad { ptr, i32 }
          cleanup
  %3000 = extractvalue { ptr, i32 } %2999, 0
  store ptr %3000, ptr %23, align 8
  %3001 = extractvalue { ptr, i32 } %2999, 1
  store i32 %3001, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %179) #9
  br label %3002

3002:                                             ; preds = %2998, %2994
  call void @llvm.lifetime.end.p0(i64 32, ptr %179) #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 %178) #9
  br label %3004

3003:                                             ; preds = %2993, %2925
  call void @llvm.lifetime.end.p0(i64 1, ptr %164) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %163) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %162) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %161) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %160) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %159) #9
  br label %11526

3004:                                             ; preds = %3002, %2983, %2982, %2952
  call void @llvm.lifetime.end.p0(i64 1, ptr %164) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %163) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %162) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %161) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %160) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %159) #9
  br label %11527

3005:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %180) #9
  %3006 = load ptr, ptr %5, align 8, !tbaa !5
  %3007 = getelementptr inbounds i32, ptr %3006, i64 0
  %3008 = load i32, ptr %3007, align 4, !tbaa !16
  store i32 %3008, ptr %180, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %181) #9
  %3009 = load ptr, ptr %5, align 8, !tbaa !5
  %3010 = getelementptr inbounds i32, ptr %3009, i64 1
  %3011 = load i32, ptr %3010, align 4, !tbaa !16
  store i32 %3011, ptr %181, align 4, !tbaa !16
  %3012 = load i32, ptr %180, align 4, !tbaa !16
  %3013 = load i32, ptr %181, align 4, !tbaa !16
  %3014 = icmp ne i32 %3012, %3013
  br i1 %3014, label %3015, label %3057

3015:                                             ; preds = %3005
  call void @llvm.lifetime.start.p0(i64 8, ptr %182) #9
  %3016 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 31
  call void @llvm.lifetime.start.p0(i64 4, ptr %183) #9
  %3017 = load ptr, ptr %4, align 8, !tbaa !5
  %3018 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %3017, i32 0, i32 2
  %3019 = load i32, ptr %3018, align 4, !tbaa !201
  %3020 = or i32 %3019, 268435456
  store i32 %3020, ptr %183, align 4, !tbaa !16
  %3021 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %3016, ptr noundef nonnull align 4 dereferenceable(4) %183)
  call void @llvm.lifetime.end.p0(i64 4, ptr %183) #9
  store ptr %3021, ptr %182, align 8, !tbaa !5
  %3022 = load ptr, ptr %182, align 8, !tbaa !5
  %3023 = load i32, ptr %3022, align 4, !tbaa !16
  %3024 = icmp ne i32 %3023, 0
  br i1 %3024, label %3029, label %3025

3025:                                             ; preds = %3015
  %3026 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %885, i32 0, i32 1
  %3027 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %3026, i32 noundef 1)
  %3028 = load ptr, ptr %182, align 8, !tbaa !5
  store i32 %3027, ptr %3028, align 4, !tbaa !16
  br label %3029

3029:                                             ; preds = %3025, %3015
  call void @llvm.lifetime.start.p0(i64 4, ptr %184) #9
  %3030 = load i32, ptr %181, align 4, !tbaa !16
  %3031 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %3030)
  %3032 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %3031, i32 0, i32 16
  %3033 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %3032)
  store i32 %3033, ptr %184, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 72, ptr %185) #9
  call void @_ZN11spirv_cross19EmbeddedInstructionC2Ev(ptr noundef nonnull align 8 dereferenceable(72) %185) #9
  call void @llvm.lifetime.start.p0(i64 72, ptr %186) #9
  call void @_ZN11spirv_cross19EmbeddedInstructionC2Ev(ptr noundef nonnull align 8 dereferenceable(72) %186) #9
  %3034 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %185, i32 0, i32 0
  store i16 61, ptr %3034, align 8, !tbaa !9
  %3035 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %185, i32 0, i32 3
  store i32 3, ptr %3035, align 8, !tbaa !15
  %3036 = getelementptr inbounds %"struct.spirv_cross::EmbeddedInstruction", ptr %185, i32 0, i32 1
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backERKj(ptr noundef nonnull align 8 dereferenceable(56) %3036, ptr noundef nonnull align 4 dereferenceable(4) %184) #9
  %3037 = getelementptr inbounds %"struct.spirv_cross::EmbeddedInstruction", ptr %185, i32 0, i32 1
  %3038 = load ptr, ptr %182, align 8, !tbaa !5
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backERKj(ptr noundef nonnull align 8 dereferenceable(56) %3037, ptr noundef nonnull align 4 dereferenceable(4) %3038) #9
  %3039 = getelementptr inbounds %"struct.spirv_cross::EmbeddedInstruction", ptr %185, i32 0, i32 1
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backERKj(ptr noundef nonnull align 8 dereferenceable(56) %3039, ptr noundef nonnull align 4 dereferenceable(4) %181) #9
  %3040 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %186, i32 0, i32 0
  store i16 62, ptr %3040, align 8, !tbaa !9
  %3041 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %186, i32 0, i32 3
  store i32 2, ptr %3041, align 8, !tbaa !15
  %3042 = getelementptr inbounds %"struct.spirv_cross::EmbeddedInstruction", ptr %186, i32 0, i32 1
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backERKj(ptr noundef nonnull align 8 dereferenceable(56) %3042, ptr noundef nonnull align 4 dereferenceable(4) %180) #9
  %3043 = getelementptr inbounds %"struct.spirv_cross::EmbeddedInstruction", ptr %186, i32 0, i32 1
  %3044 = load ptr, ptr %182, align 8, !tbaa !5
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backERKj(ptr noundef nonnull align 8 dereferenceable(56) %3043, ptr noundef nonnull align 4 dereferenceable(4) %3044) #9
  %3045 = load ptr, ptr %885, align 8, !tbaa !145
  %3046 = getelementptr inbounds ptr, ptr %3045, i64 8
  %3047 = load ptr, ptr %3046, align 8
  invoke void %3047(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 4 dereferenceable(12) %185)
          to label %3048 unwind label %3053

3048:                                             ; preds = %3029
  %3049 = load ptr, ptr %885, align 8, !tbaa !145
  %3050 = getelementptr inbounds ptr, ptr %3049, i64 8
  %3051 = load ptr, ptr %3050, align 8
  invoke void %3051(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 4 dereferenceable(12) %186)
          to label %3052 unwind label %3053

3052:                                             ; preds = %3048
  call void @_ZN11spirv_cross19EmbeddedInstructionD2Ev(ptr noundef nonnull align 8 dereferenceable(72) %186) #9
  call void @llvm.lifetime.end.p0(i64 72, ptr %186) #9
  call void @_ZN11spirv_cross19EmbeddedInstructionD2Ev(ptr noundef nonnull align 8 dereferenceable(72) %185) #9
  call void @llvm.lifetime.end.p0(i64 72, ptr %185) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %184) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %182) #9
  br label %3057

3053:                                             ; preds = %3048, %3029
  %3054 = landingpad { ptr, i32 }
          cleanup
  %3055 = extractvalue { ptr, i32 } %3054, 0
  store ptr %3055, ptr %23, align 8
  %3056 = extractvalue { ptr, i32 } %3054, 1
  store i32 %3056, ptr %24, align 4
  call void @_ZN11spirv_cross19EmbeddedInstructionD2Ev(ptr noundef nonnull align 8 dereferenceable(72) %186) #9
  call void @llvm.lifetime.end.p0(i64 72, ptr %186) #9
  call void @_ZN11spirv_cross19EmbeddedInstructionD2Ev(ptr noundef nonnull align 8 dereferenceable(72) %185) #9
  call void @llvm.lifetime.end.p0(i64 72, ptr %185) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %184) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %182) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %181) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %180) #9
  br label %11527

3057:                                             ; preds = %3052, %3005
  call void @llvm.lifetime.end.p0(i64 4, ptr %181) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %180) #9
  br label %11526

3058:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %187) #9
  %3059 = load ptr, ptr %5, align 8, !tbaa !5
  %3060 = getelementptr inbounds i32, ptr %3059, i64 0
  %3061 = load i32, ptr %3060, align 4, !tbaa !16
  store i32 %3061, ptr %187, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %188) #9
  %3062 = load ptr, ptr %5, align 8, !tbaa !5
  %3063 = getelementptr inbounds i32, ptr %3062, i64 1
  %3064 = load i32, ptr %3063, align 4, !tbaa !16
  store i32 %3064, ptr %188, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %189) #9
  %3065 = load ptr, ptr %5, align 8, !tbaa !5
  %3066 = getelementptr inbounds i32, ptr %3065, i64 2
  %3067 = load i32, ptr %3066, align 4, !tbaa !16
  store i32 %3067, ptr %189, align 4, !tbaa !16
  %3068 = load i32, ptr %187, align 4, !tbaa !16
  %3069 = load i32, ptr %188, align 4, !tbaa !16
  %3070 = call noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL39emit_uninitialized_temporary_expressionEjj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3068, i32 noundef %3069)
  %3071 = load i32, ptr %188, align 4, !tbaa !16
  %3072 = load i32, ptr %187, align 4, !tbaa !16
  %3073 = load i32, ptr %189, align 4, !tbaa !16
  %3074 = load i32, ptr %189, align 4, !tbaa !16
  %3075 = call noundef i32 @_ZNK11spirv_cross8Compiler18expression_type_idEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %3074)
  call void @_ZN11spirv_cross11SmallVectorIjLm8EEC2Ev(ptr noundef nonnull align 8 dereferenceable(56) %190) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL22emit_copy_logical_typeEjjjjNS_11SmallVectorIjLm8EEE(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3071, i32 noundef %3072, i32 noundef %3073, i32 noundef %3075, ptr noundef %190)
          to label %3076 unwind label %3077

3076:                                             ; preds = %3058
  call void @_ZN11spirv_cross11SmallVectorIjLm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %190) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %189) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %188) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %187) #9
  br label %11526

3077:                                             ; preds = %3058
  %3078 = landingpad { ptr, i32 }
          cleanup
  %3079 = extractvalue { ptr, i32 } %3078, 0
  store ptr %3079, ptr %23, align 8
  %3080 = extractvalue { ptr, i32 } %3078, 1
  store i32 %3080, ptr %24, align 4
  call void @_ZN11spirv_cross11SmallVectorIjLm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %190) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %189) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %188) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %187) #9
  br label %11527

3081:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %191) #9
  %3082 = load ptr, ptr %5, align 8, !tbaa !5
  %3083 = getelementptr inbounds i32, ptr %3082, i64 0
  %3084 = load i32, ptr %3083, align 4, !tbaa !16
  store i32 %3084, ptr %191, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %192) #9
  %3085 = load ptr, ptr %5, align 8, !tbaa !5
  %3086 = getelementptr inbounds i32, ptr %3085, i64 1
  %3087 = load i32, ptr %3086, align 4, !tbaa !16
  store i32 %3087, ptr %192, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %193) #9
  %3088 = load ptr, ptr %5, align 8, !tbaa !5
  %3089 = getelementptr inbounds i32, ptr %3088, i64 2
  %3090 = load i32, ptr %3089, align 4, !tbaa !16
  store i32 %3090, ptr %193, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 1, ptr %194) #9
  %3091 = load i32, ptr %191, align 4, !tbaa !16
  %3092 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %3091)
  %3093 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %3092, i32 0, i32 9
  %3094 = load i8, ptr %3093, align 4, !tbaa !175, !range !127, !noundef !128
  %3095 = trunc i8 %3094 to i1
  %3096 = zext i1 %3095 to i8
  store i8 %3096, ptr %194, align 1, !tbaa !142
  call void @llvm.lifetime.start.p0(i64 8, ptr %195) #9
  %3097 = load i32, ptr %193, align 4, !tbaa !16
  %3098 = call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_15SPIRAccessChainEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %3097)
  store ptr %3098, ptr %195, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %196) #9
  %3099 = load i32, ptr %193, align 4, !tbaa !16
  %3100 = call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_24SPIRCombinedImageSamplerEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %3099)
  store ptr %3100, ptr %196, align 8, !tbaa !5
  %3101 = load ptr, ptr %195, align 8, !tbaa !5
  %3102 = icmp ne ptr %3101, null
  br i1 %3102, label %3103, label %3110

3103:                                             ; preds = %3081
  call void @llvm.lifetime.start.p0(i64 8, ptr %197) #9
  %3104 = load i32, ptr %192, align 4, !tbaa !16
  %3105 = load ptr, ptr %195, align 8, !tbaa !5
  %3106 = call noundef nonnull align 8 dereferenceable(168) ptr @_ZN11spirv_cross8Compiler3setINS_15SPIRAccessChainEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %3104, ptr noundef nonnull align 8 dereferenceable(168) %3105)
  store ptr %3106, ptr %197, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %198) #9
  %3107 = load i32, ptr %192, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %198, i32 noundef %3107)
  %3108 = load ptr, ptr %197, align 8, !tbaa !5
  %3109 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %3108, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %3109, ptr align 4 %198, i64 4, i1 false), !tbaa.struct !151
  call void @llvm.lifetime.end.p0(i64 4, ptr %198) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %197) #9
  br label %3179

3110:                                             ; preds = %3081
  %3111 = load ptr, ptr %196, align 8, !tbaa !5
  %3112 = icmp ne ptr %3111, null
  br i1 %3112, label %3113, label %3120

3113:                                             ; preds = %3110
  call void @llvm.lifetime.start.p0(i64 8, ptr %199) #9
  %3114 = load i32, ptr %192, align 4, !tbaa !16
  %3115 = load ptr, ptr %196, align 8, !tbaa !5
  %3116 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN11spirv_cross8Compiler3setINS_24SPIRCombinedImageSamplerEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %3114, ptr noundef nonnull align 8 dereferenceable(24) %3115)
  store ptr %3116, ptr %199, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %200) #9
  %3117 = load i32, ptr %192, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %200, i32 noundef %3117)
  %3118 = load ptr, ptr %199, align 8, !tbaa !5
  %3119 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %3118, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %3119, ptr align 4 %200, i64 4, i1 false), !tbaa.struct !151
  call void @llvm.lifetime.end.p0(i64 4, ptr %200) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %199) #9
  br label %3178

3120:                                             ; preds = %3110
  %3121 = load i32, ptr %193, align 4, !tbaa !16
  %3122 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler20expression_is_lvalueEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %3121)
  br i1 %3122, label %3123, label %3136

3123:                                             ; preds = %3120
  %3124 = load i8, ptr %194, align 1, !tbaa !142, !range !127, !noundef !128
  %3125 = trunc i8 %3124 to i1
  br i1 %3125, label %3136, label %3126

3126:                                             ; preds = %3123
  %3127 = load i32, ptr %191, align 4, !tbaa !16
  %3128 = load i32, ptr %192, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %201) #9
  %3129 = load i32, ptr %193, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %201, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3129, i1 noundef zeroext true)
  %3130 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3127, i32 noundef %3128, ptr noundef nonnull align 8 dereferenceable(32) %201, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %3131 unwind label %3132

3131:                                             ; preds = %3126
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %201) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %201) #9
  br label %3177

3132:                                             ; preds = %3126
  %3133 = landingpad { ptr, i32 }
          cleanup
  %3134 = extractvalue { ptr, i32 } %3133, 0
  store ptr %3134, ptr %23, align 8
  %3135 = extractvalue { ptr, i32 } %3133, 1
  store i32 %3135, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %201) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %201) #9
  br label %3180

3136:                                             ; preds = %3123, %3120
  call void @llvm.lifetime.start.p0(i64 8, ptr %202) #9
  %3137 = load i32, ptr %191, align 4, !tbaa !16
  %3138 = load i32, ptr %192, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %203) #9
  %3139 = load i32, ptr %193, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %203, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3139, i1 noundef zeroext true)
  %3140 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3137, i32 noundef %3138, ptr noundef nonnull align 8 dereferenceable(32) %203, i1 noundef zeroext true, i1 noundef zeroext true)
          to label %3141 unwind label %3156

3141:                                             ; preds = %3136
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %203) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %203) #9
  store ptr %3140, ptr %202, align 8, !tbaa !5
  %3142 = load i8, ptr %194, align 1, !tbaa !142, !range !127, !noundef !128
  %3143 = trunc i8 %3142 to i1
  br i1 %3143, label %3144, label %3160

3144:                                             ; preds = %3141
  call void @llvm.lifetime.start.p0(i64 8, ptr %204) #9
  %3145 = load i32, ptr %193, align 4, !tbaa !16
  %3146 = call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %3145)
  store ptr %3146, ptr %204, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %205) #9
  %3147 = load ptr, ptr %204, align 8, !tbaa !5
  %3148 = icmp ne ptr %3147, null
  br i1 %3148, label %3149, label %3152

3149:                                             ; preds = %3144
  %3150 = load ptr, ptr %204, align 8, !tbaa !5
  %3151 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %3150, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %205, ptr align 8 %3151, i64 4, i1 false), !tbaa.struct !151
  br label %3153

3152:                                             ; preds = %3144
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %205, i32 noundef 0)
  br label %3153

3153:                                             ; preds = %3152, %3149
  %3154 = load ptr, ptr %202, align 8, !tbaa !5
  %3155 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %3154, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %3155, ptr align 4 %205, i64 4, i1 false), !tbaa.struct !151
  call void @llvm.lifetime.end.p0(i64 4, ptr %205) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %204) #9
  br label %3160

3156:                                             ; preds = %3136
  %3157 = landingpad { ptr, i32 }
          cleanup
  %3158 = extractvalue { ptr, i32 } %3157, 0
  store ptr %3158, ptr %23, align 8
  %3159 = extractvalue { ptr, i32 } %3157, 1
  store i32 %3159, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %203) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %203) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %202) #9
  br label %3180

3160:                                             ; preds = %3153, %3141
  call void @llvm.lifetime.start.p0(i64 8, ptr %206) #9
  %3161 = load i32, ptr %193, align 4, !tbaa !16
  %3162 = call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_14SPIRExpressionEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %3161)
  store ptr %3162, ptr %206, align 8, !tbaa !5
  %3163 = load ptr, ptr %206, align 8, !tbaa !5
  %3164 = icmp ne ptr %3163, null
  br i1 %3164, label %3165, label %3176

3165:                                             ; preds = %3160
  %3166 = load ptr, ptr %206, align 8, !tbaa !5
  %3167 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %3166, i32 0, i32 12
  %3168 = load ptr, ptr %202, align 8, !tbaa !5
  %3169 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %3168, i32 0, i32 12
  %3170 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(56) %3169, ptr noundef nonnull align 8 dereferenceable(56) %3167) #9
  %3171 = load ptr, ptr %206, align 8, !tbaa !5
  %3172 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %3171, i32 0, i32 10
  %3173 = load ptr, ptr %202, align 8, !tbaa !5
  %3174 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %3173, i32 0, i32 10
  %3175 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(56) %3174, ptr noundef nonnull align 8 dereferenceable(56) %3172) #9
  br label %3176

3176:                                             ; preds = %3165, %3160
  call void @llvm.lifetime.end.p0(i64 8, ptr %206) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %202) #9
  br label %3177

3177:                                             ; preds = %3176, %3131
  br label %3178

3178:                                             ; preds = %3177, %3113
  br label %3179

3179:                                             ; preds = %3178, %3103
  call void @llvm.lifetime.end.p0(i64 8, ptr %196) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %195) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %194) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %193) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %192) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %191) #9
  br label %11526

3180:                                             ; preds = %3156, %3132
  call void @llvm.lifetime.end.p0(i64 8, ptr %196) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %195) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %194) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %193) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %192) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %191) #9
  br label %11527

3181:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %207) #9
  %3182 = load ptr, ptr %5, align 8, !tbaa !5
  %3183 = getelementptr inbounds i32, ptr %3182, i64 0
  %3184 = load i32, ptr %3183, align 4, !tbaa !16
  store i32 %3184, ptr %207, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %208) #9
  %3185 = load ptr, ptr %5, align 8, !tbaa !5
  %3186 = getelementptr inbounds i32, ptr %3185, i64 1
  %3187 = load i32, ptr %3186, align 4, !tbaa !16
  store i32 %3187, ptr %208, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %209) #9
  %3188 = load ptr, ptr %5, align 8, !tbaa !5
  %3189 = getelementptr inbounds i32, ptr %3188, i64 2
  %3190 = load i32, ptr %3189, align 4, !tbaa !16
  store i32 %3190, ptr %209, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %210) #9
  %3191 = load ptr, ptr %5, align 8, !tbaa !5
  %3192 = getelementptr inbounds i32, ptr %3191, i64 3
  %3193 = load i32, ptr %3192, align 4, !tbaa !16
  store i32 %3193, ptr %210, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %211) #9
  %3194 = load ptr, ptr %5, align 8, !tbaa !5
  %3195 = getelementptr inbounds i32, ptr %3194, i64 4
  store ptr %3195, ptr %211, align 8, !tbaa !5
  %3196 = load i32, ptr %7, align 4, !tbaa !16
  %3197 = sub i32 %3196, 4
  store i32 %3197, ptr %7, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %212) #9
  %3198 = load i32, ptr %209, align 4, !tbaa !16
  %3199 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %3198)
  store ptr %3199, ptr %212, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %213) #9
  store i8 0, ptr %213, align 1, !tbaa !142
  call void @llvm.lifetime.start.p0(i64 4, ptr %214) #9
  store i32 0, ptr %214, align 4, !tbaa !16
  br label %3200

3200:                                             ; preds = %3224, %3181
  %3201 = load i32, ptr %214, align 4, !tbaa !16
  %3202 = load i32, ptr %7, align 4, !tbaa !16
  %3203 = icmp ult i32 %3201, %3202
  br i1 %3203, label %3205, label %3204

3204:                                             ; preds = %3200
  call void @llvm.lifetime.end.p0(i64 4, ptr %214) #9
  br label %3227

3205:                                             ; preds = %3200
  %3206 = load ptr, ptr %211, align 8, !tbaa !5
  %3207 = load i32, ptr %214, align 4, !tbaa !16
  %3208 = zext i32 %3207 to i64
  %3209 = getelementptr inbounds i32, ptr %3206, i64 %3208
  %3210 = load i32, ptr %3209, align 4, !tbaa !16
  %3211 = load ptr, ptr %212, align 8, !tbaa !5
  %3212 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %3211, i32 0, i32 4
  %3213 = load i32, ptr %3212, align 8, !tbaa !129
  %3214 = icmp uge i32 %3210, %3213
  br i1 %3214, label %3222, label %3215

3215:                                             ; preds = %3205
  %3216 = load ptr, ptr %211, align 8, !tbaa !5
  %3217 = load i32, ptr %214, align 4, !tbaa !16
  %3218 = zext i32 %3217 to i64
  %3219 = getelementptr inbounds i32, ptr %3216, i64 %3218
  %3220 = load i32, ptr %3219, align 4, !tbaa !16
  %3221 = icmp eq i32 %3220, -1
  br i1 %3221, label %3222, label %3223

3222:                                             ; preds = %3215, %3205
  store i8 1, ptr %213, align 1, !tbaa !142
  br label %3223

3223:                                             ; preds = %3222, %3215
  br label %3224

3224:                                             ; preds = %3223
  %3225 = load i32, ptr %214, align 4, !tbaa !16
  %3226 = add i32 %3225, 1
  store i32 %3226, ptr %214, align 4, !tbaa !16
  br label %3200, !llvm.loop !202

3227:                                             ; preds = %3204
  %3228 = load i8, ptr %213, align 1, !tbaa !142, !range !127, !noundef !128
  %3229 = trunc i8 %3228 to i1
  br i1 %3229, label %3234, label %3230

3230:                                             ; preds = %3227
  %3231 = load i32, ptr %209, align 4, !tbaa !16
  %3232 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler23has_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %3231, i32 noundef 2)
  br i1 %3232, label %3233, label %3234

3233:                                             ; preds = %3230
  store i8 1, ptr %213, align 1, !tbaa !142
  br label %3234

3234:                                             ; preds = %3233, %3230, %3227
  call void @llvm.lifetime.start.p0(i64 32, ptr %215) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %215) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %216) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %217) #9
  %3235 = load i8, ptr %213, align 1, !tbaa !142, !range !127, !noundef !128
  %3236 = trunc i8 %3235 to i1
  br i1 %3236, label %3237, label %3383

3237:                                             ; preds = %3234
  %3238 = load i32, ptr %209, align 4, !tbaa !16
  %3239 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3238)
          to label %3240 unwind label %3263

3240:                                             ; preds = %3237
  br i1 %3239, label %3241, label %3245

3241:                                             ; preds = %3240
  %3242 = load i32, ptr %210, align 4, !tbaa !16
  %3243 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3242)
          to label %3244 unwind label %3263

3244:                                             ; preds = %3241
  br label %3245

3245:                                             ; preds = %3244, %3240
  %3246 = phi i1 [ false, %3240 ], [ %3243, %3244 ]
  %3247 = zext i1 %3246 to i8
  store i8 %3247, ptr %216, align 1, !tbaa !142
  %3248 = load i32, ptr %209, align 4, !tbaa !16
  %3249 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL30should_suppress_usage_trackingEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3248)
          to label %3250 unwind label %3263

3250:                                             ; preds = %3245
  br i1 %3249, label %3251, label %3255

3251:                                             ; preds = %3250
  %3252 = load i32, ptr %210, align 4, !tbaa !16
  %3253 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL30should_suppress_usage_trackingEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3252)
          to label %3254 unwind label %3263

3254:                                             ; preds = %3251
  br label %3255

3255:                                             ; preds = %3254, %3250
  %3256 = phi i1 [ false, %3250 ], [ %3253, %3254 ]
  %3257 = zext i1 %3256 to i8
  store i8 %3257, ptr %217, align 1, !tbaa !142
  call void @llvm.lifetime.start.p0(i64 280, ptr %218) #9
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEC2Ev(ptr noundef nonnull align 8 dereferenceable(280) %218) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %219) #9
  store i32 0, ptr %219, align 4, !tbaa !16
  br label %3258

3258:                                             ; preds = %3350, %3255
  %3259 = load i32, ptr %219, align 4, !tbaa !16
  %3260 = load i32, ptr %7, align 4, !tbaa !16
  %3261 = icmp ult i32 %3259, %3260
  br i1 %3261, label %3267, label %3262

3262:                                             ; preds = %3258
  call void @llvm.lifetime.end.p0(i64 4, ptr %219) #9
  br label %3354

3263:                                             ; preds = %3465, %3458, %3450, %3446, %3395, %3386, %3383, %3251, %3245, %3241, %3237
  %3264 = landingpad { ptr, i32 }
          cleanup
  %3265 = extractvalue { ptr, i32 } %3264, 0
  store ptr %3265, ptr %23, align 8
  %3266 = extractvalue { ptr, i32 } %3264, 1
  store i32 %3266, ptr %24, align 4
  br label %3470

3267:                                             ; preds = %3258
  %3268 = load ptr, ptr %211, align 8, !tbaa !5
  %3269 = load i32, ptr %219, align 4, !tbaa !16
  %3270 = zext i32 %3269 to i64
  %3271 = getelementptr inbounds i32, ptr %3268, i64 %3270
  %3272 = load i32, ptr %3271, align 4, !tbaa !16
  %3273 = icmp eq i32 %3272, -1
  br i1 %3273, label %3274, label %3310

3274:                                             ; preds = %3267
  call void @llvm.lifetime.start.p0(i64 360, ptr %220) #9
  invoke void @_ZN11spirv_cross12SPIRConstantC2Ev(ptr noundef nonnull align 8 dereferenceable(360) %220)
          to label %3275 unwind label %3289

3275:                                             ; preds = %3274
  %3276 = load ptr, ptr %212, align 8, !tbaa !5
  %3277 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %3276, i32 0, i32 16
  %3278 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %220, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %3278, ptr align 4 %3277, i64 4, i1 false), !tbaa.struct !151
  %3279 = load ptr, ptr %212, align 8, !tbaa !5
  %3280 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %3279, i32 0, i32 16
  %3281 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %3280)
          to label %3282 unwind label %3293

3282:                                             ; preds = %3275
  call void @llvm.lifetime.start.p0(i64 4, ptr %221) #9
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %221, i32 noundef 0)
          to label %3283 unwind label %3297

3283:                                             ; preds = %3282
  %3284 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %221)
          to label %3285 unwind label %3297

3285:                                             ; preds = %3283
  %3286 = icmp ne i32 %3281, %3284
  br i1 %3286, label %3287, label %3288

3287:                                             ; preds = %3285
  br label %3302

3288:                                             ; preds = %3285
  call void @__assert_fail(ptr noundef @.str.1385, ptr noundef @.str.11, i32 noundef 12958, ptr noundef @__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE) #10
  unreachable

3289:                                             ; preds = %3274
  %3290 = landingpad { ptr, i32 }
          cleanup
  %3291 = extractvalue { ptr, i32 } %3290, 0
  store ptr %3291, ptr %23, align 8
  %3292 = extractvalue { ptr, i32 } %3290, 1
  store i32 %3292, ptr %24, align 4
  br label %3309

3293:                                             ; preds = %3275
  %3294 = landingpad { ptr, i32 }
          cleanup
  %3295 = extractvalue { ptr, i32 } %3294, 0
  store ptr %3295, ptr %23, align 8
  %3296 = extractvalue { ptr, i32 } %3294, 1
  store i32 %3296, ptr %24, align 4
  br label %3308

3297:                                             ; preds = %3283, %3282
  %3298 = landingpad { ptr, i32 }
          cleanup
  %3299 = extractvalue { ptr, i32 } %3298, 0
  store ptr %3299, ptr %23, align 8
  %3300 = extractvalue { ptr, i32 } %3298, 1
  store i32 %3300, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %221) #9
  br label %3308

3301:                                             ; No predecessors!
  br label %3302

3302:                                             ; preds = %3301, %3287
  call void @llvm.lifetime.end.p0(i64 4, ptr %221) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %222) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL19constant_expressionB5cxx11ERKNS_12SPIRConstantEbb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %222, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(360) %220, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %3303 unwind label %3304

3303:                                             ; preds = %3302
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %218, ptr noundef nonnull align 8 dereferenceable(32) %222) #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 %222) #9
  call void @_ZN11spirv_cross12SPIRConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(360) %220) #9
  call void @llvm.lifetime.end.p0(i64 360, ptr %220) #9
  br label %3349

3304:                                             ; preds = %3302
  %3305 = landingpad { ptr, i32 }
          cleanup
  %3306 = extractvalue { ptr, i32 } %3305, 0
  store ptr %3306, ptr %23, align 8
  %3307 = extractvalue { ptr, i32 } %3305, 1
  store i32 %3307, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %222) #9
  br label %3308

3308:                                             ; preds = %3304, %3297, %3293
  call void @_ZN11spirv_cross12SPIRConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(360) %220) #9
  br label %3309

3309:                                             ; preds = %3308, %3289
  call void @llvm.lifetime.end.p0(i64 360, ptr %220) #9
  br label %3353

3310:                                             ; preds = %3267
  %3311 = load ptr, ptr %211, align 8, !tbaa !5
  %3312 = load i32, ptr %219, align 4, !tbaa !16
  %3313 = zext i32 %3312 to i64
  %3314 = getelementptr inbounds i32, ptr %3311, i64 %3313
  %3315 = load i32, ptr %3314, align 4, !tbaa !16
  %3316 = load ptr, ptr %212, align 8, !tbaa !5
  %3317 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %3316, i32 0, i32 4
  %3318 = load i32, ptr %3317, align 8, !tbaa !129
  %3319 = icmp uge i32 %3315, %3318
  br i1 %3319, label %3320, label %3336

3320:                                             ; preds = %3310
  call void @llvm.lifetime.start.p0(i64 32, ptr %223) #9
  %3321 = load i32, ptr %210, align 4, !tbaa !16
  %3322 = load ptr, ptr %211, align 8, !tbaa !5
  %3323 = load i32, ptr %219, align 4, !tbaa !16
  %3324 = zext i32 %3323 to i64
  %3325 = getelementptr inbounds i32, ptr %3322, i64 %3324
  %3326 = load i32, ptr %3325, align 4, !tbaa !16
  %3327 = load ptr, ptr %212, align 8, !tbaa !5
  %3328 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %3327, i32 0, i32 4
  %3329 = load i32, ptr %3328, align 8, !tbaa !129
  %3330 = sub i32 %3326, %3329
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_extract_component_expressionB5cxx11Ejj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %223, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3321, i32 noundef %3330)
          to label %3331 unwind label %3332

3331:                                             ; preds = %3320
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %218, ptr noundef nonnull align 8 dereferenceable(32) %223) #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 %223) #9
  br label %3348

3332:                                             ; preds = %3320
  %3333 = landingpad { ptr, i32 }
          cleanup
  %3334 = extractvalue { ptr, i32 } %3333, 0
  store ptr %3334, ptr %23, align 8
  %3335 = extractvalue { ptr, i32 } %3333, 1
  store i32 %3335, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %223) #9
  br label %3353

3336:                                             ; preds = %3310
  call void @llvm.lifetime.start.p0(i64 32, ptr %224) #9
  %3337 = load i32, ptr %209, align 4, !tbaa !16
  %3338 = load ptr, ptr %211, align 8, !tbaa !5
  %3339 = load i32, ptr %219, align 4, !tbaa !16
  %3340 = zext i32 %3339 to i64
  %3341 = getelementptr inbounds i32, ptr %3338, i64 %3340
  %3342 = load i32, ptr %3341, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_extract_component_expressionB5cxx11Ejj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %224, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3337, i32 noundef %3342)
          to label %3343 unwind label %3344

3343:                                             ; preds = %3336
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %218, ptr noundef nonnull align 8 dereferenceable(32) %224) #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 %224) #9
  br label %3348

3344:                                             ; preds = %3336
  %3345 = landingpad { ptr, i32 }
          cleanup
  %3346 = extractvalue { ptr, i32 } %3345, 0
  store ptr %3346, ptr %23, align 8
  %3347 = extractvalue { ptr, i32 } %3345, 1
  store i32 %3347, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %224) #9
  br label %3353

3348:                                             ; preds = %3343, %3331
  br label %3349

3349:                                             ; preds = %3348, %3303
  br label %3350

3350:                                             ; preds = %3349
  %3351 = load i32, ptr %219, align 4, !tbaa !16
  %3352 = add i32 %3351, 1
  store i32 %3352, ptr %219, align 4, !tbaa !16
  br label %3258, !llvm.loop !203

3353:                                             ; preds = %3344, %3332, %3309
  call void @llvm.lifetime.end.p0(i64 4, ptr %219) #9
  br label %3382

3354:                                             ; preds = %3262
  call void @llvm.lifetime.start.p0(i64 32, ptr %225) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %226) #9
  %3355 = load i32, ptr %207, align 4, !tbaa !16
  %3356 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %3355)
          to label %3357 unwind label %3363

3357:                                             ; preds = %3354
  invoke void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %226, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(336) %3356)
          to label %3358 unwind label %3363

3358:                                             ; preds = %3357
  call void @llvm.lifetime.start.p0(i64 32, ptr %227) #9
  invoke void @_ZN11spirv_cross5mergeERKNS_11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEEPKc(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %227, ptr noundef nonnull align 8 dereferenceable(280) %218, ptr noundef @.str.177)
          to label %3359 unwind label %3367

3359:                                             ; preds = %3358
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS6_S9_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %225, ptr noundef nonnull align 8 dereferenceable(32) %226, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %227, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %3360 unwind label %3371

3360:                                             ; preds = %3359
  %3361 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %215, ptr noundef nonnull align 8 dereferenceable(32) %225)
          to label %3362 unwind label %3375

3362:                                             ; preds = %3360
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %225) #9
  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
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %226) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %226) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %225) #9
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(280) %218) #9
  call void @llvm.lifetime.end.p0(i64 280, ptr %218) #9
  br label %3450

3363:                                             ; preds = %3357, %3354
  %3364 = landingpad { ptr, i32 }
          cleanup
  %3365 = extractvalue { ptr, i32 } %3364, 0
  store ptr %3365, ptr %23, align 8
  %3366 = extractvalue { ptr, i32 } %3364, 1
  store i32 %3366, ptr %24, align 4
  br label %3381

3367:                                             ; preds = %3358
  %3368 = landingpad { ptr, i32 }
          cleanup
  %3369 = extractvalue { ptr, i32 } %3368, 0
  store ptr %3369, ptr %23, align 8
  %3370 = extractvalue { ptr, i32 } %3368, 1
  store i32 %3370, ptr %24, align 4
  br label %3380

3371:                                             ; preds = %3359
  %3372 = landingpad { ptr, i32 }
          cleanup
  %3373 = extractvalue { ptr, i32 } %3372, 0
  store ptr %3373, ptr %23, align 8
  %3374 = extractvalue { ptr, i32 } %3372, 1
  store i32 %3374, ptr %24, align 4
  br label %3379

3375:                                             ; preds = %3360
  %3376 = landingpad { ptr, i32 }
          cleanup
  %3377 = extractvalue { ptr, i32 } %3376, 0
  store ptr %3377, ptr %23, align 8
  %3378 = extractvalue { ptr, i32 } %3376, 1
  store i32 %3378, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %225) #9
  br label %3379

3379:                                             ; preds = %3375, %3371
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %227) #9
  br label %3380

3380:                                             ; preds = %3379, %3367
  call void @llvm.lifetime.end.p0(i64 32, ptr %227) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %226) #9
  br label %3381

3381:                                             ; preds = %3380, %3363
  call void @llvm.lifetime.end.p0(i64 32, ptr %226) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %225) #9
  br label %3382

3382:                                             ; preds = %3381, %3353
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(280) %218) #9
  call void @llvm.lifetime.end.p0(i64 280, ptr %218) #9
  br label %3470

3383:                                             ; preds = %3234
  %3384 = load i32, ptr %209, align 4, !tbaa !16
  %3385 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3384)
          to label %3386 unwind label %3263

3386:                                             ; preds = %3383
  %3387 = zext i1 %3385 to i8
  store i8 %3387, ptr %216, align 1, !tbaa !142
  %3388 = load i32, ptr %209, align 4, !tbaa !16
  %3389 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL30should_suppress_usage_trackingEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3388)
          to label %3390 unwind label %3263

3390:                                             ; preds = %3386
  %3391 = zext i1 %3389 to i8
  store i8 %3391, ptr %217, align 1, !tbaa !142
  call void @llvm.lifetime.start.p0(i64 32, ptr %228) #9
  %3392 = load i32, ptr %209, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %228, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3392, i1 noundef zeroext true)
          to label %3393 unwind label %3403

3393:                                             ; preds = %3390
  %3394 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %215, ptr noundef nonnull align 8 dereferenceable(32) %228)
          to label %3395 unwind label %3407

3395:                                             ; preds = %3393
  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
  %3396 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %215, ptr noundef @.str.719)
          to label %3397 unwind label %3263

3397:                                             ; preds = %3395
  call void @llvm.lifetime.start.p0(i64 4, ptr %229) #9
  store i32 0, ptr %229, align 4, !tbaa !16
  br label %3398

3398:                                             ; preds = %3431, %3397
  %3399 = load i32, ptr %229, align 4, !tbaa !16
  %3400 = load i32, ptr %7, align 4, !tbaa !16
  %3401 = icmp ult i32 %3399, %3400
  br i1 %3401, label %3412, label %3402

3402:                                             ; preds = %3398
  call void @llvm.lifetime.end.p0(i64 4, ptr %229) #9
  br label %3438

3403:                                             ; preds = %3390
  %3404 = landingpad { ptr, i32 }
          cleanup
  %3405 = extractvalue { ptr, i32 } %3404, 0
  store ptr %3405, ptr %23, align 8
  %3406 = extractvalue { ptr, i32 } %3404, 1
  store i32 %3406, ptr %24, align 4
  br label %3411

3407:                                             ; preds = %3393
  %3408 = landingpad { ptr, i32 }
          cleanup
  %3409 = extractvalue { ptr, i32 } %3408, 0
  store ptr %3409, ptr %23, align 8
  %3410 = extractvalue { ptr, i32 } %3408, 1
  store i32 %3410, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %228) #9
  br label %3411

3411:                                             ; preds = %3407, %3403
  call void @llvm.lifetime.end.p0(i64 32, ptr %228) #9
  br label %3470

3412:                                             ; preds = %3398
  %3413 = load ptr, ptr %211, align 8, !tbaa !5
  %3414 = load i32, ptr %229, align 4, !tbaa !16
  %3415 = zext i32 %3414 to i64
  %3416 = getelementptr inbounds i32, ptr %3413, i64 %3415
  %3417 = load i32, ptr %3416, align 4, !tbaa !16
  %3418 = icmp ne i32 %3417, -1
  br i1 %3418, label %3419, label %3420

3419:                                             ; preds = %3412
  br label %3422

3420:                                             ; preds = %3412
  call void @__assert_fail(ptr noundef @.str.1386, ptr noundef @.str.11, i32 noundef 12979, ptr noundef @__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE) #10
  unreachable

3421:                                             ; No predecessors!
  br label %3422

3422:                                             ; preds = %3421, %3419
  %3423 = load ptr, ptr %211, align 8, !tbaa !5
  %3424 = load i32, ptr %229, align 4, !tbaa !16
  %3425 = zext i32 %3424 to i64
  %3426 = getelementptr inbounds i32, ptr %3423, i64 %3425
  %3427 = load i32, ptr %3426, align 4, !tbaa !16
  %3428 = call noundef ptr @_ZN11spirv_cross12CompilerGLSL16index_to_swizzleEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3427)
  %3429 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %215, ptr noundef %3428)
          to label %3430 unwind label %3434

3430:                                             ; preds = %3422
  br label %3431

3431:                                             ; preds = %3430
  %3432 = load i32, ptr %229, align 4, !tbaa !16
  %3433 = add i32 %3432, 1
  store i32 %3433, ptr %229, align 4, !tbaa !16
  br label %3398, !llvm.loop !204

3434:                                             ; preds = %3422
  %3435 = landingpad { ptr, i32 }
          cleanup
  %3436 = extractvalue { ptr, i32 } %3435, 0
  store ptr %3436, ptr %23, align 8
  %3437 = extractvalue { ptr, i32 } %3435, 1
  store i32 %3437, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %229) #9
  br label %3470

3438:                                             ; preds = %3402
  %3439 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 21
  %3440 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %3439, i32 0, i32 19
  %3441 = load i8, ptr %3440, align 4, !tbaa !205, !range !127, !noundef !128
  %3442 = trunc i8 %3441 to i1
  br i1 %3442, label %3443, label %3449

3443:                                             ; preds = %3438
  %3444 = load i32, ptr %7, align 4, !tbaa !16
  %3445 = icmp ugt i32 %3444, 1
  br i1 %3445, label %3446, label %3449

3446:                                             ; preds = %3443
  %3447 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %215, ptr noundef @.str.720)
          to label %3448 unwind label %3263

3448:                                             ; preds = %3446
  br label %3449

3449:                                             ; preds = %3448, %3443, %3438
  br label %3450

3450:                                             ; preds = %3449, %3362
  %3451 = load i32, ptr %207, align 4, !tbaa !16
  %3452 = load i32, ptr %208, align 4, !tbaa !16
  %3453 = load i8, ptr %216, align 1, !tbaa !142, !range !127, !noundef !128
  %3454 = trunc i8 %3453 to i1
  %3455 = load i8, ptr %217, align 1, !tbaa !142, !range !127, !noundef !128
  %3456 = trunc i8 %3455 to i1
  %3457 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3451, i32 noundef %3452, ptr noundef nonnull align 8 dereferenceable(32) %215, i1 noundef zeroext %3454, i1 noundef zeroext %3456)
          to label %3458 unwind label %3263

3458:                                             ; preds = %3450
  %3459 = load i32, ptr %208, align 4, !tbaa !16
  %3460 = load i32, ptr %209, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %3459, i32 noundef %3460)
          to label %3461 unwind label %3263

3461:                                             ; preds = %3458
  %3462 = load i32, ptr %209, align 4, !tbaa !16
  %3463 = load i32, ptr %210, align 4, !tbaa !16
  %3464 = icmp ne i32 %3462, %3463
  br i1 %3464, label %3465, label %3469

3465:                                             ; preds = %3461
  %3466 = load i32, ptr %208, align 4, !tbaa !16
  %3467 = load i32, ptr %210, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %3466, i32 noundef %3467)
          to label %3468 unwind label %3263

3468:                                             ; preds = %3465
  br label %3469

3469:                                             ; preds = %3468, %3461
  call void @llvm.lifetime.end.p0(i64 1, ptr %217) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %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 %215) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %213) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %212) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %211) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %210) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %209) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %208) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %207) #9
  br label %11526

3470:                                             ; preds = %3434, %3411, %3382, %3263
  call void @llvm.lifetime.end.p0(i64 1, ptr %217) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %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 %215) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %213) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %212) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %211) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %210) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %209) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %208) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %207) #9
  br label %11527

3471:                                             ; preds = %919
  %3472 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %885)
  br i1 %3472, label %3483, label %3473

3473:                                             ; preds = %3471
  %3474 = load ptr, ptr %5, align 8, !tbaa !5
  %3475 = getelementptr inbounds i32, ptr %3474, i64 0
  %3476 = load i32, ptr %3475, align 4, !tbaa !16
  %3477 = load ptr, ptr %5, align 8, !tbaa !5
  %3478 = getelementptr inbounds i32, ptr %3477, i64 1
  %3479 = load i32, ptr %3478, align 4, !tbaa !16
  %3480 = load ptr, ptr %5, align 8, !tbaa !5
  %3481 = getelementptr inbounds i32, ptr %3480, i64 2
  %3482 = load i32, ptr %3481, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3476, i32 noundef %3479, i32 noundef %3482, ptr noundef @.str.421)
  br label %3519

3483:                                             ; preds = %3471
  call void @llvm.lifetime.start.p0(i64 8, ptr %230) #9
  %3484 = load ptr, ptr %5, align 8, !tbaa !5
  %3485 = getelementptr inbounds i32, ptr %3484, i64 0
  %3486 = load i32, ptr %3485, align 4, !tbaa !16
  %3487 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %3486)
  store ptr %3487, ptr %230, align 8, !tbaa !5
  %3488 = load ptr, ptr %230, align 8, !tbaa !5
  %3489 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %3488, i32 0, i32 4
  %3490 = load i32, ptr %3489, align 8, !tbaa !129
  %3491 = icmp ugt i32 %3490, 1
  br i1 %3491, label %3492, label %3505

3492:                                             ; preds = %3483
  %3493 = load ptr, ptr %5, align 8, !tbaa !5
  %3494 = getelementptr inbounds i32, ptr %3493, i64 0
  %3495 = load i32, ptr %3494, align 4, !tbaa !16
  %3496 = load ptr, ptr %5, align 8, !tbaa !5
  %3497 = getelementptr inbounds i32, ptr %3496, i64 1
  %3498 = load i32, ptr %3497, align 4, !tbaa !16
  %3499 = load ptr, ptr %5, align 8, !tbaa !5
  %3500 = getelementptr inbounds i32, ptr %3499, i64 2
  %3501 = load i32, ptr %3500, align 4, !tbaa !16
  %3502 = load ptr, ptr %5, align 8, !tbaa !5
  %3503 = getelementptr inbounds i32, ptr %3502, i64 2
  %3504 = load i32, ptr %3503, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3495, i32 noundef %3498, i32 noundef %3501, i32 noundef %3504, ptr noundef @.str.446)
  br label %3518

3505:                                             ; preds = %3483
  %3506 = load ptr, ptr %5, align 8, !tbaa !5
  %3507 = getelementptr inbounds i32, ptr %3506, i64 0
  %3508 = load i32, ptr %3507, align 4, !tbaa !16
  %3509 = load ptr, ptr %5, align 8, !tbaa !5
  %3510 = getelementptr inbounds i32, ptr %3509, i64 1
  %3511 = load i32, ptr %3510, align 4, !tbaa !16
  %3512 = load ptr, ptr %5, align 8, !tbaa !5
  %3513 = getelementptr inbounds i32, ptr %3512, i64 2
  %3514 = load i32, ptr %3513, align 4, !tbaa !16
  %3515 = load ptr, ptr %5, align 8, !tbaa !5
  %3516 = getelementptr inbounds i32, ptr %3515, i64 2
  %3517 = load i32, ptr %3516, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3508, i32 noundef %3511, i32 noundef %3514, i32 noundef %3517, ptr noundef @.str.970)
  br label %3518

3518:                                             ; preds = %3505, %3492
  call void @llvm.lifetime.end.p0(i64 8, ptr %230) #9
  br label %3519

3519:                                             ; preds = %3518, %3473
  br label %11526

3520:                                             ; preds = %919
  %3521 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %885)
  br i1 %3521, label %3532, label %3522

3522:                                             ; preds = %3520
  %3523 = load ptr, ptr %5, align 8, !tbaa !5
  %3524 = getelementptr inbounds i32, ptr %3523, i64 0
  %3525 = load i32, ptr %3524, align 4, !tbaa !16
  %3526 = load ptr, ptr %5, align 8, !tbaa !5
  %3527 = getelementptr inbounds i32, ptr %3526, i64 1
  %3528 = load i32, ptr %3527, align 4, !tbaa !16
  %3529 = load ptr, ptr %5, align 8, !tbaa !5
  %3530 = getelementptr inbounds i32, ptr %3529, i64 2
  %3531 = load i32, ptr %3530, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3525, i32 noundef %3528, i32 noundef %3531, ptr noundef @.str.420)
  br label %3650

3532:                                             ; preds = %3520
  call void @llvm.lifetime.start.p0(i64 4, ptr %231) #9
  %3533 = load ptr, ptr %5, align 8, !tbaa !5
  %3534 = getelementptr inbounds i32, ptr %3533, i64 0
  %3535 = load i32, ptr %3534, align 4, !tbaa !16
  store i32 %3535, ptr %231, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %232) #9
  %3536 = load ptr, ptr %5, align 8, !tbaa !5
  %3537 = getelementptr inbounds i32, ptr %3536, i64 1
  %3538 = load i32, ptr %3537, align 4, !tbaa !16
  store i32 %3538, ptr %232, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %233) #9
  %3539 = load ptr, ptr %5, align 8, !tbaa !5
  %3540 = getelementptr inbounds i32, ptr %3539, i64 2
  %3541 = load i32, ptr %3540, align 4, !tbaa !16
  store i32 %3541, ptr %233, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %234) #9
  %3542 = load i32, ptr %231, align 4, !tbaa !16
  %3543 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %3542)
  store ptr %3543, ptr %234, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %235) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %235) #9
  %3544 = load ptr, ptr %234, align 8, !tbaa !5
  %3545 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %3544, i32 0, i32 4
  %3546 = load i32, ptr %3545, align 8, !tbaa !129
  %3547 = icmp ugt i32 %3546, 1
  br i1 %3547, label %3548, label %3611

3548:                                             ; preds = %3532
  call void @llvm.lifetime.start.p0(i64 32, ptr %236) #9
  %3549 = load ptr, ptr %234, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %236, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(336) %3549)
          to label %3550 unwind label %3561

3550:                                             ; preds = %3548
  %3551 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %235, ptr noundef nonnull align 8 dereferenceable(32) %236) #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
  %3552 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEc(ptr noundef nonnull align 8 dereferenceable(32) %235, i8 noundef signext 40)
          to label %3553 unwind label %3565

3553:                                             ; preds = %3550
  call void @llvm.lifetime.start.p0(i64 4, ptr %237) #9
  store i32 0, ptr %237, align 4, !tbaa !16
  br label %3554

3554:                                             ; preds = %3603, %3553
  %3555 = load i32, ptr %237, align 4, !tbaa !16
  %3556 = load ptr, ptr %234, align 8, !tbaa !5
  %3557 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %3556, i32 0, i32 4
  %3558 = load i32, ptr %3557, align 8, !tbaa !129
  %3559 = icmp ult i32 %3555, %3558
  br i1 %3559, label %3569, label %3560

3560:                                             ; preds = %3554
  call void @llvm.lifetime.end.p0(i64 4, ptr %237) #9
  br label %3608

3561:                                             ; preds = %3548
  %3562 = landingpad { ptr, i32 }
          cleanup
  %3563 = extractvalue { ptr, i32 } %3562, 0
  store ptr %3563, ptr %23, align 8
  %3564 = extractvalue { ptr, i32 } %3562, 1
  store i32 %3564, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %236) #9
  br label %3649

3565:                                             ; preds = %3645, %3643, %3638, %3608, %3550
  %3566 = landingpad { ptr, i32 }
          cleanup
  %3567 = extractvalue { ptr, i32 } %3566, 0
  store ptr %3567, ptr %23, align 8
  %3568 = extractvalue { ptr, i32 } %3566, 1
  store i32 %3568, ptr %24, align 4
  br label %3649

3569:                                             ; preds = %3554
  call void @llvm.lifetime.start.p0(i64 32, ptr %238) #9
  %3570 = load i32, ptr %233, align 4, !tbaa !16
  %3571 = load i32, ptr %237, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_extract_component_expressionB5cxx11Ejj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %238, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3570, i32 noundef %3571)
          to label %3572 unwind label %3585

3572:                                             ; preds = %3569
  call void @llvm.lifetime.start.p0(i64 32, ptr %239) #9
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA18_KcS7_RA5_S8_S7_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %239, ptr noundef nonnull align 8 dereferenceable(32) %238, ptr noundef nonnull align 1 dereferenceable(18) @.str.1387, ptr noundef nonnull align 8 dereferenceable(32) %238, ptr noundef nonnull align 1 dereferenceable(5) @.str.1388, ptr noundef nonnull align 8 dereferenceable(32) %238)
          to label %3573 unwind label %3589

3573:                                             ; preds = %3572
  %3574 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %235, ptr noundef nonnull align 8 dereferenceable(32) %239)
          to label %3575 unwind label %3593

3575:                                             ; preds = %3573
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %239) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %239) #9
  %3576 = load i32, ptr %237, align 4, !tbaa !16
  %3577 = add i32 %3576, 1
  %3578 = load ptr, ptr %234, align 8, !tbaa !5
  %3579 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %3578, i32 0, i32 4
  %3580 = load i32, ptr %3579, align 8, !tbaa !129
  %3581 = icmp ult i32 %3577, %3580
  br i1 %3581, label %3582, label %3602

3582:                                             ; preds = %3575
  %3583 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %235, ptr noundef @.str.177)
          to label %3584 unwind label %3598

3584:                                             ; preds = %3582
  br label %3602

3585:                                             ; preds = %3569
  %3586 = landingpad { ptr, i32 }
          cleanup
  %3587 = extractvalue { ptr, i32 } %3586, 0
  store ptr %3587, ptr %23, align 8
  %3588 = extractvalue { ptr, i32 } %3586, 1
  store i32 %3588, ptr %24, align 4
  br label %3607

3589:                                             ; preds = %3572
  %3590 = landingpad { ptr, i32 }
          cleanup
  %3591 = extractvalue { ptr, i32 } %3590, 0
  store ptr %3591, ptr %23, align 8
  %3592 = extractvalue { ptr, i32 } %3590, 1
  store i32 %3592, ptr %24, align 4
  br label %3597

3593:                                             ; preds = %3573
  %3594 = landingpad { ptr, i32 }
          cleanup
  %3595 = extractvalue { ptr, i32 } %3594, 0
  store ptr %3595, ptr %23, align 8
  %3596 = extractvalue { ptr, i32 } %3594, 1
  store i32 %3596, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %239) #9
  br label %3597

3597:                                             ; preds = %3593, %3589
  call void @llvm.lifetime.end.p0(i64 32, ptr %239) #9
  br label %3606

3598:                                             ; preds = %3582
  %3599 = landingpad { ptr, i32 }
          cleanup
  %3600 = extractvalue { ptr, i32 } %3599, 0
  store ptr %3600, ptr %23, align 8
  %3601 = extractvalue { ptr, i32 } %3599, 1
  store i32 %3601, ptr %24, align 4
  br label %3606

3602:                                             ; preds = %3584, %3575
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %238) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %238) #9
  br label %3603

3603:                                             ; preds = %3602
  %3604 = load i32, ptr %237, align 4, !tbaa !16
  %3605 = add i32 %3604, 1
  store i32 %3605, ptr %237, align 4, !tbaa !16
  br label %3554, !llvm.loop !206

3606:                                             ; preds = %3598, %3597
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %238) #9
  br label %3607

3607:                                             ; preds = %3606, %3585
  call void @llvm.lifetime.end.p0(i64 32, ptr %238) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %237) #9
  br label %3649

3608:                                             ; preds = %3560
  %3609 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEc(ptr noundef nonnull align 8 dereferenceable(32) %235, i8 noundef signext 41)
          to label %3610 unwind label %3565

3610:                                             ; preds = %3608
  br label %3638

3611:                                             ; preds = %3532
  call void @llvm.lifetime.start.p0(i64 32, ptr %240) #9
  %3612 = load i32, ptr %233, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %240, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3612, i1 noundef zeroext true)
          to label %3613 unwind label %3619

3613:                                             ; preds = %3611
  %3614 = load i32, ptr %233, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL21track_expression_readEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3614)
          to label %3615 unwind label %3623

3615:                                             ; preds = %3613
  call void @llvm.lifetime.start.p0(i64 32, ptr %241) #9
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA18_KcS7_RA5_S8_S7_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %241, ptr noundef nonnull align 8 dereferenceable(32) %240, ptr noundef nonnull align 1 dereferenceable(18) @.str.1387, ptr noundef nonnull align 8 dereferenceable(32) %240, ptr noundef nonnull align 1 dereferenceable(5) @.str.1388, ptr noundef nonnull align 8 dereferenceable(32) %240)
          to label %3616 unwind label %3627

3616:                                             ; preds = %3615
  %3617 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %235, ptr noundef nonnull align 8 dereferenceable(32) %241)
          to label %3618 unwind label %3631

3618:                                             ; preds = %3616
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %241) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %241) #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 %240) #9
  br label %3638

3619:                                             ; preds = %3611
  %3620 = landingpad { ptr, i32 }
          cleanup
  %3621 = extractvalue { ptr, i32 } %3620, 0
  store ptr %3621, ptr %23, align 8
  %3622 = extractvalue { ptr, i32 } %3620, 1
  store i32 %3622, ptr %24, align 4
  br label %3637

3623:                                             ; preds = %3613
  %3624 = landingpad { ptr, i32 }
          cleanup
  %3625 = extractvalue { ptr, i32 } %3624, 0
  store ptr %3625, ptr %23, align 8
  %3626 = extractvalue { ptr, i32 } %3624, 1
  store i32 %3626, ptr %24, align 4
  br label %3636

3627:                                             ; preds = %3615
  %3628 = landingpad { ptr, i32 }
          cleanup
  %3629 = extractvalue { ptr, i32 } %3628, 0
  store ptr %3629, ptr %23, align 8
  %3630 = extractvalue { ptr, i32 } %3628, 1
  store i32 %3630, ptr %24, align 4
  br label %3635

3631:                                             ; preds = %3616
  %3632 = landingpad { ptr, i32 }
          cleanup
  %3633 = extractvalue { ptr, i32 } %3632, 0
  store ptr %3633, ptr %23, align 8
  %3634 = extractvalue { ptr, i32 } %3632, 1
  store i32 %3634, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %241) #9
  br label %3635

3635:                                             ; preds = %3631, %3627
  call void @llvm.lifetime.end.p0(i64 32, ptr %241) #9
  br label %3636

3636:                                             ; preds = %3635, %3623
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %240) #9
  br label %3637

3637:                                             ; preds = %3636, %3619
  call void @llvm.lifetime.end.p0(i64 32, ptr %240) #9
  br label %3649

3638:                                             ; preds = %3618, %3610
  %3639 = load i32, ptr %231, align 4, !tbaa !16
  %3640 = load i32, ptr %232, align 4, !tbaa !16
  %3641 = load i32, ptr %233, align 4, !tbaa !16
  %3642 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3641)
          to label %3643 unwind label %3565

3643:                                             ; preds = %3638
  %3644 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3639, i32 noundef %3640, ptr noundef nonnull align 8 dereferenceable(32) %235, i1 noundef zeroext %3642, i1 noundef zeroext false)
          to label %3645 unwind label %3565

3645:                                             ; preds = %3643
  %3646 = load i32, ptr %232, align 4, !tbaa !16
  %3647 = load i32, ptr %233, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %3646, i32 noundef %3647)
          to label %3648 unwind label %3565

3648:                                             ; preds = %3645
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %235) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %235) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %234) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %233) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %232) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %231) #9
  br label %3650

3649:                                             ; preds = %3637, %3607, %3565, %3561
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %235) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %235) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %234) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %233) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %232) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %231) #9
  br label %11527

3650:                                             ; preds = %3648, %3522
  br label %11526

3651:                                             ; preds = %919
  %3652 = load i8, ptr %11, align 1, !tbaa !142, !range !127, !noundef !128
  %3653 = trunc i8 %3652 to i1
  br i1 %3653, label %3663, label %3654

3654:                                             ; preds = %3651
  %3655 = load ptr, ptr %5, align 8, !tbaa !5
  %3656 = getelementptr inbounds i32, ptr %3655, i64 2
  %3657 = load i32, ptr %3656, align 4, !tbaa !16
  %3658 = call noundef i32 @_ZNK11spirv_cross8Compiler18expression_type_idEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %3657)
  %3659 = load ptr, ptr %5, align 8, !tbaa !5
  %3660 = getelementptr inbounds i32, ptr %3659, i64 0
  %3661 = load i32, ptr %3660, align 4, !tbaa !16
  %3662 = icmp ne i32 %3658, %3661
  br i1 %3662, label %3663, label %3673

3663:                                             ; preds = %3654, %3651
  %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 !16
  %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 !16
  %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 !16
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_op_castEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3666, i32 noundef %3669, i32 noundef %3672, ptr noundef @.str.955)
  br label %3683

3673:                                             ; preds = %3654
  %3674 = load ptr, ptr %5, align 8, !tbaa !5
  %3675 = getelementptr inbounds i32, ptr %3674, i64 0
  %3676 = load i32, ptr %3675, align 4, !tbaa !16
  %3677 = load ptr, ptr %5, align 8, !tbaa !5
  %3678 = getelementptr inbounds i32, ptr %3677, i64 1
  %3679 = load i32, ptr %3678, align 4, !tbaa !16
  %3680 = load ptr, ptr %5, align 8, !tbaa !5
  %3681 = getelementptr inbounds i32, ptr %3680, i64 2
  %3682 = load i32, ptr %3681, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL13emit_unary_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3676, i32 noundef %3679, i32 noundef %3682, ptr noundef @.str.955)
  br label %3683

3683:                                             ; preds = %3673, %3663
  br label %11526

3684:                                             ; preds = %919
  %3685 = load ptr, ptr %5, align 8, !tbaa !5
  %3686 = getelementptr inbounds i32, ptr %3685, i64 0
  %3687 = load i32, ptr %3686, align 4, !tbaa !16
  %3688 = load ptr, ptr %5, align 8, !tbaa !5
  %3689 = getelementptr inbounds i32, ptr %3688, i64 1
  %3690 = load i32, ptr %3689, align 4, !tbaa !16
  %3691 = load ptr, ptr %5, align 8, !tbaa !5
  %3692 = getelementptr inbounds i32, ptr %3691, i64 2
  %3693 = load i32, ptr %3692, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL13emit_unary_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3687, i32 noundef %3690, i32 noundef %3693, ptr noundef @.str.955)
  br label %11526

3694:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %242) #9
  %3695 = load ptr, ptr %5, align 8, !tbaa !5
  %3696 = getelementptr inbounds i32, ptr %3695, i64 0
  %3697 = load i32, ptr %3696, align 4, !tbaa !16
  %3698 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %3697)
  %3699 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %3698, i32 0, i32 2
  %3700 = load i32, ptr %3699, align 8, !tbaa !148
  store i32 %3700, ptr %242, align 4, !tbaa !17
  %3701 = load ptr, ptr %5, align 8, !tbaa !5
  %3702 = getelementptr inbounds i32, ptr %3701, i64 0
  %3703 = load i32, ptr %3702, align 4, !tbaa !16
  %3704 = load ptr, ptr %5, align 8, !tbaa !5
  %3705 = getelementptr inbounds i32, ptr %3704, i64 1
  %3706 = load i32, ptr %3705, align 4, !tbaa !16
  %3707 = load ptr, ptr %5, align 8, !tbaa !5
  %3708 = getelementptr inbounds i32, ptr %3707, i64 2
  %3709 = load i32, ptr %3708, align 4, !tbaa !16
  %3710 = load ptr, ptr %5, align 8, !tbaa !5
  %3711 = getelementptr inbounds i32, ptr %3710, i64 3
  %3712 = load i32, ptr %3711, align 4, !tbaa !16
  %3713 = load i32, ptr %242, align 4, !tbaa !17
  %3714 = load i32, ptr %6, align 4, !tbaa !13
  %3715 = call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %3714)
  %3716 = load i8, ptr %11, align 1, !tbaa !142, !range !127, !noundef !128
  %3717 = trunc i8 %3716 to i1
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3703, i32 noundef %3706, i32 noundef %3709, i32 noundef %3712, ptr noundef @.str.957, i32 noundef %3713, i1 noundef zeroext %3715, i1 noundef zeroext %3717)
  call void @llvm.lifetime.end.p0(i64 4, ptr %242) #9
  br label %11526

3718:                                             ; preds = %919
  %3719 = load ptr, ptr %5, align 8, !tbaa !5
  %3720 = getelementptr inbounds i32, ptr %3719, i64 0
  %3721 = load i32, ptr %3720, align 4, !tbaa !16
  %3722 = load ptr, ptr %5, align 8, !tbaa !5
  %3723 = getelementptr inbounds i32, ptr %3722, i64 1
  %3724 = load i32, ptr %3723, align 4, !tbaa !16
  %3725 = load ptr, ptr %5, align 8, !tbaa !5
  %3726 = getelementptr inbounds i32, ptr %3725, i64 2
  %3727 = load i32, ptr %3726, align 4, !tbaa !16
  %3728 = load ptr, ptr %5, align 8, !tbaa !5
  %3729 = getelementptr inbounds i32, ptr %3728, i64 3
  %3730 = load i32, ptr %3729, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3721, i32 noundef %3724, i32 noundef %3727, i32 noundef %3730, ptr noundef @.str.957)
  br label %11526

3731:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %243) #9
  %3732 = load ptr, ptr %5, align 8, !tbaa !5
  %3733 = getelementptr inbounds i32, ptr %3732, i64 0
  %3734 = load i32, ptr %3733, align 4, !tbaa !16
  %3735 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %3734)
  %3736 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %3735, i32 0, i32 2
  %3737 = load i32, ptr %3736, align 8, !tbaa !148
  store i32 %3737, ptr %243, align 4, !tbaa !17
  %3738 = load ptr, ptr %5, align 8, !tbaa !5
  %3739 = getelementptr inbounds i32, ptr %3738, i64 0
  %3740 = load i32, ptr %3739, align 4, !tbaa !16
  %3741 = load ptr, ptr %5, align 8, !tbaa !5
  %3742 = getelementptr inbounds i32, ptr %3741, i64 1
  %3743 = load i32, ptr %3742, align 4, !tbaa !16
  %3744 = load ptr, ptr %5, align 8, !tbaa !5
  %3745 = getelementptr inbounds i32, ptr %3744, i64 2
  %3746 = load i32, ptr %3745, align 4, !tbaa !16
  %3747 = load ptr, ptr %5, align 8, !tbaa !5
  %3748 = getelementptr inbounds i32, ptr %3747, i64 3
  %3749 = load i32, ptr %3748, align 4, !tbaa !16
  %3750 = load i32, ptr %243, align 4, !tbaa !17
  %3751 = load i32, ptr %6, align 4, !tbaa !13
  %3752 = call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %3751)
  %3753 = load i8, ptr %11, align 1, !tbaa !142, !range !127, !noundef !128
  %3754 = trunc i8 %3753 to i1
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3740, i32 noundef %3743, i32 noundef %3746, i32 noundef %3749, ptr noundef @.str.955, i32 noundef %3750, i1 noundef zeroext %3752, i1 noundef zeroext %3754)
  call void @llvm.lifetime.end.p0(i64 4, ptr %243) #9
  br label %11526

3755:                                             ; preds = %919
  %3756 = load ptr, ptr %5, align 8, !tbaa !5
  %3757 = getelementptr inbounds i32, ptr %3756, i64 0
  %3758 = load i32, ptr %3757, align 4, !tbaa !16
  %3759 = load ptr, ptr %5, align 8, !tbaa !5
  %3760 = getelementptr inbounds i32, ptr %3759, i64 1
  %3761 = load i32, ptr %3760, align 4, !tbaa !16
  %3762 = load ptr, ptr %5, align 8, !tbaa !5
  %3763 = getelementptr inbounds i32, ptr %3762, i64 2
  %3764 = load i32, ptr %3763, align 4, !tbaa !16
  %3765 = load ptr, ptr %5, align 8, !tbaa !5
  %3766 = getelementptr inbounds i32, ptr %3765, i64 3
  %3767 = load i32, ptr %3766, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3758, i32 noundef %3761, i32 noundef %3764, i32 noundef %3767, ptr noundef @.str.955)
  br label %11526

3768:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %244) #9
  %3769 = load ptr, ptr %5, align 8, !tbaa !5
  %3770 = getelementptr inbounds i32, ptr %3769, i64 0
  %3771 = load i32, ptr %3770, align 4, !tbaa !16
  %3772 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %3771)
  %3773 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %3772, i32 0, i32 2
  %3774 = load i32, ptr %3773, align 8, !tbaa !148
  store i32 %3774, ptr %244, align 4, !tbaa !17
  %3775 = load ptr, ptr %5, align 8, !tbaa !5
  %3776 = getelementptr inbounds i32, ptr %3775, i64 0
  %3777 = load i32, ptr %3776, align 4, !tbaa !16
  %3778 = load ptr, ptr %5, align 8, !tbaa !5
  %3779 = getelementptr inbounds i32, ptr %3778, i64 1
  %3780 = load i32, ptr %3779, align 4, !tbaa !16
  %3781 = load ptr, ptr %5, align 8, !tbaa !5
  %3782 = getelementptr inbounds i32, ptr %3781, i64 2
  %3783 = load i32, ptr %3782, align 4, !tbaa !16
  %3784 = load ptr, ptr %5, align 8, !tbaa !5
  %3785 = getelementptr inbounds i32, ptr %3784, i64 3
  %3786 = load i32, ptr %3785, align 4, !tbaa !16
  %3787 = load i32, ptr %244, align 4, !tbaa !17
  %3788 = load i32, ptr %6, align 4, !tbaa !13
  %3789 = call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %3788)
  %3790 = load i8, ptr %11, align 1, !tbaa !142, !range !127, !noundef !128
  %3791 = trunc i8 %3790 to i1
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3777, i32 noundef %3780, i32 noundef %3783, i32 noundef %3786, ptr noundef @.str.958, i32 noundef %3787, i1 noundef zeroext %3789, i1 noundef zeroext %3791)
  call void @llvm.lifetime.end.p0(i64 4, ptr %244) #9
  br label %11526

3792:                                             ; preds = %919, %919
  call void @llvm.lifetime.start.p0(i64 8, ptr %245) #9
  %3793 = load ptr, ptr %5, align 8, !tbaa !5
  %3794 = load i32, ptr %6, align 4, !tbaa !13
  %3795 = icmp eq i32 %3794, 145
  %3796 = zext i1 %3795 to i64
  %3797 = select i1 %3795, i32 2, i32 3
  %3798 = sext i32 %3797 to i64
  %3799 = getelementptr inbounds i32, ptr %3793, i64 %3798
  %3800 = load i32, ptr %3799, align 4, !tbaa !16
  %3801 = call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_14SPIRExpressionEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %3800)
  store ptr %3801, ptr %245, align 8, !tbaa !5
  %3802 = load ptr, ptr %245, align 8, !tbaa !5
  %3803 = icmp ne ptr %3802, null
  br i1 %3803, label %3804, label %3922

3804:                                             ; preds = %3792
  %3805 = load ptr, ptr %245, align 8, !tbaa !5
  %3806 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %3805, i32 0, i32 6
  %3807 = load i8, ptr %3806, align 1, !tbaa !143, !range !127, !noundef !128
  %3808 = trunc i8 %3807 to i1
  br i1 %3808, label %3809, label %3922

3809:                                             ; preds = %3804
  %3810 = load ptr, ptr %245, align 8, !tbaa !5
  %3811 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %3810, i32 0, i32 6
  store i8 0, ptr %3811, align 1, !tbaa !143
  call void @llvm.lifetime.start.p0(i64 32, ptr %246) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %246) #9
  %3812 = load i32, ptr %6, align 4, !tbaa !13
  %3813 = icmp eq i32 %3812, 145
  br i1 %3813, label %3814, label %3845

3814:                                             ; preds = %3809
  call void @llvm.lifetime.start.p0(i64 32, ptr %247) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %248) #9
  %3815 = load ptr, ptr %5, align 8, !tbaa !5
  %3816 = getelementptr inbounds i32, ptr %3815, i64 3
  %3817 = load i32, ptr %3816, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %248, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3817, i1 noundef zeroext true)
          to label %3818 unwind label %3826

3818:                                             ; preds = %3814
  call void @llvm.lifetime.start.p0(i64 32, ptr %249) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %250) #9
  %3819 = load ptr, ptr %5, align 8, !tbaa !5
  %3820 = getelementptr inbounds i32, ptr %3819, i64 2
  %3821 = load i32, ptr %3820, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL39to_unpacked_row_major_matrix_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %250, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3821)
          to label %3822 unwind label %3830

3822:                                             ; preds = %3818
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %249, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %250)
          to label %3823 unwind label %3834

3823:                                             ; preds = %3822
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS6_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %247, ptr noundef nonnull align 8 dereferenceable(32) %248, ptr noundef nonnull align 1 dereferenceable(4) @.str.976, ptr noundef nonnull align 8 dereferenceable(32) %249)
          to label %3824 unwind label %3838

3824:                                             ; preds = %3823
  %3825 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %246, 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 @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %249) #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 %250) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %249) #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 %248) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %247) #9
  br label %3876

3826:                                             ; preds = %3814
  %3827 = landingpad { ptr, i32 }
          cleanup
  %3828 = extractvalue { ptr, i32 } %3827, 0
  store ptr %3828, ptr %23, align 8
  %3829 = extractvalue { ptr, i32 } %3827, 1
  store i32 %3829, ptr %24, align 4
  br label %3844

3830:                                             ; preds = %3818
  %3831 = landingpad { ptr, i32 }
          cleanup
  %3832 = extractvalue { ptr, i32 } %3831, 0
  store ptr %3832, ptr %23, align 8
  %3833 = extractvalue { ptr, i32 } %3831, 1
  store i32 %3833, ptr %24, align 4
  br label %3843

3834:                                             ; preds = %3822
  %3835 = landingpad { ptr, i32 }
          cleanup
  %3836 = extractvalue { ptr, i32 } %3835, 0
  store ptr %3836, ptr %23, align 8
  %3837 = extractvalue { ptr, i32 } %3835, 1
  store i32 %3837, ptr %24, align 4
  br label %3842

3838:                                             ; preds = %3823
  %3839 = landingpad { ptr, i32 }
          cleanup
  %3840 = extractvalue { ptr, i32 } %3839, 0
  store ptr %3840, ptr %23, align 8
  %3841 = extractvalue { ptr, i32 } %3839, 1
  store i32 %3841, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %249) #9
  br label %3842

3842:                                             ; preds = %3838, %3834
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %250) #9
  br label %3843

3843:                                             ; preds = %3842, %3830
  call void @llvm.lifetime.end.p0(i64 32, ptr %250) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %249) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %248) #9
  br label %3844

3844:                                             ; preds = %3843, %3826
  call void @llvm.lifetime.end.p0(i64 32, ptr %248) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %247) #9
  br label %3921

3845:                                             ; preds = %3809
  call void @llvm.lifetime.start.p0(i64 32, ptr %251) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %252) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %253) #9
  %3846 = load ptr, ptr %5, align 8, !tbaa !5
  %3847 = getelementptr inbounds i32, ptr %3846, i64 3
  %3848 = load i32, ptr %3847, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL39to_unpacked_row_major_matrix_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %253, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3848)
          to label %3849 unwind label %3857

3849:                                             ; preds = %3845
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %252, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %253)
          to label %3850 unwind label %3861

3850:                                             ; preds = %3849
  call void @llvm.lifetime.start.p0(i64 32, ptr %254) #9
  %3851 = load ptr, ptr %5, align 8, !tbaa !5
  %3852 = getelementptr inbounds i32, ptr %3851, i64 2
  %3853 = load i32, ptr %3852, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %254, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3853, i1 noundef zeroext true)
          to label %3854 unwind label %3865

3854:                                             ; preds = %3850
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS6_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %251, ptr noundef nonnull align 8 dereferenceable(32) %252, ptr noundef nonnull align 1 dereferenceable(4) @.str.976, ptr noundef nonnull align 8 dereferenceable(32) %254)
          to label %3855 unwind label %3869

3855:                                             ; preds = %3854
  %3856 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %246, ptr noundef nonnull align 8 dereferenceable(32) %251) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %251) #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 %254) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %252) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %253) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %253) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %252) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %251) #9
  br label %3876

3857:                                             ; preds = %3845
  %3858 = landingpad { ptr, i32 }
          cleanup
  %3859 = extractvalue { ptr, i32 } %3858, 0
  store ptr %3859, ptr %23, align 8
  %3860 = extractvalue { ptr, i32 } %3858, 1
  store i32 %3860, ptr %24, align 4
  br label %3875

3861:                                             ; preds = %3849
  %3862 = landingpad { ptr, i32 }
          cleanup
  %3863 = extractvalue { ptr, i32 } %3862, 0
  store ptr %3863, ptr %23, align 8
  %3864 = extractvalue { ptr, i32 } %3862, 1
  store i32 %3864, ptr %24, align 4
  br label %3874

3865:                                             ; preds = %3850
  %3866 = landingpad { ptr, i32 }
          cleanup
  %3867 = extractvalue { ptr, i32 } %3866, 0
  store ptr %3867, ptr %23, align 8
  %3868 = extractvalue { ptr, i32 } %3866, 1
  store i32 %3868, ptr %24, align 4
  br label %3873

3869:                                             ; preds = %3854
  %3870 = landingpad { ptr, i32 }
          cleanup
  %3871 = extractvalue { ptr, i32 } %3870, 0
  store ptr %3871, ptr %23, align 8
  %3872 = extractvalue { ptr, i32 } %3870, 1
  store i32 %3872, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %254) #9
  br label %3873

3873:                                             ; preds = %3869, %3865
  call void @llvm.lifetime.end.p0(i64 32, ptr %254) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %252) #9
  br label %3874

3874:                                             ; preds = %3873, %3861
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %253) #9
  br label %3875

3875:                                             ; preds = %3874, %3857
  call void @llvm.lifetime.end.p0(i64 32, ptr %253) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %252) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %251) #9
  br label %3921

3876:                                             ; preds = %3855, %3824
  call void @llvm.lifetime.start.p0(i64 1, ptr %255) #9
  %3877 = load ptr, ptr %5, align 8, !tbaa !5
  %3878 = getelementptr inbounds i32, ptr %3877, i64 2
  %3879 = load i32, ptr %3878, align 4, !tbaa !16
  %3880 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3879)
          to label %3881 unwind label %3917

3881:                                             ; preds = %3876
  br i1 %3880, label %3882, label %3888

3882:                                             ; preds = %3881
  %3883 = load ptr, ptr %5, align 8, !tbaa !5
  %3884 = getelementptr inbounds i32, ptr %3883, i64 3
  %3885 = load i32, ptr %3884, align 4, !tbaa !16
  %3886 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3885)
          to label %3887 unwind label %3917

3887:                                             ; preds = %3882
  br label %3888

3888:                                             ; preds = %3887, %3881
  %3889 = phi i1 [ false, %3881 ], [ %3886, %3887 ]
  %3890 = zext i1 %3889 to i8
  store i8 %3890, ptr %255, align 1, !tbaa !142
  %3891 = load ptr, ptr %5, align 8, !tbaa !5
  %3892 = getelementptr inbounds i32, ptr %3891, i64 0
  %3893 = load i32, ptr %3892, align 4, !tbaa !16
  %3894 = load ptr, ptr %5, align 8, !tbaa !5
  %3895 = getelementptr inbounds i32, ptr %3894, i64 1
  %3896 = load i32, ptr %3895, align 4, !tbaa !16
  %3897 = load i8, ptr %255, align 1, !tbaa !142, !range !127, !noundef !128
  %3898 = trunc i8 %3897 to i1
  %3899 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3893, i32 noundef %3896, ptr noundef nonnull align 8 dereferenceable(32) %246, i1 noundef zeroext %3898, i1 noundef zeroext false)
          to label %3900 unwind label %3917

3900:                                             ; preds = %3888
  %3901 = load ptr, ptr %245, align 8, !tbaa !5
  %3902 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %3901, i32 0, i32 6
  store i8 1, ptr %3902, align 1, !tbaa !143
  %3903 = load ptr, ptr %5, align 8, !tbaa !5
  %3904 = getelementptr inbounds i32, ptr %3903, i64 1
  %3905 = load i32, ptr %3904, align 4, !tbaa !16
  %3906 = load ptr, ptr %5, align 8, !tbaa !5
  %3907 = getelementptr inbounds i32, ptr %3906, i64 2
  %3908 = load i32, ptr %3907, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %3905, i32 noundef %3908)
          to label %3909 unwind label %3917

3909:                                             ; preds = %3900
  %3910 = load ptr, ptr %5, align 8, !tbaa !5
  %3911 = getelementptr inbounds i32, ptr %3910, i64 1
  %3912 = load i32, ptr %3911, align 4, !tbaa !16
  %3913 = load ptr, ptr %5, align 8, !tbaa !5
  %3914 = getelementptr inbounds i32, ptr %3913, i64 3
  %3915 = load i32, ptr %3914, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %3912, i32 noundef %3915)
          to label %3916 unwind label %3917

3916:                                             ; preds = %3909
  call void @llvm.lifetime.end.p0(i64 1, ptr %255) #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
  br label %3935

3917:                                             ; preds = %3909, %3900, %3888, %3882, %3876
  %3918 = landingpad { ptr, i32 }
          cleanup
  %3919 = extractvalue { ptr, i32 } %3918, 0
  store ptr %3919, ptr %23, align 8
  %3920 = extractvalue { ptr, i32 } %3918, 1
  store i32 %3920, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %255) #9
  br label %3921

3921:                                             ; preds = %3917, %3875, %3844
  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 8, ptr %245) #9
  br label %11527

3922:                                             ; preds = %3804, %3792
  %3923 = load ptr, ptr %5, align 8, !tbaa !5
  %3924 = getelementptr inbounds i32, ptr %3923, i64 0
  %3925 = load i32, ptr %3924, align 4, !tbaa !16
  %3926 = load ptr, ptr %5, align 8, !tbaa !5
  %3927 = getelementptr inbounds i32, ptr %3926, i64 1
  %3928 = load i32, ptr %3927, align 4, !tbaa !16
  %3929 = load ptr, ptr %5, align 8, !tbaa !5
  %3930 = getelementptr inbounds i32, ptr %3929, i64 2
  %3931 = load i32, ptr %3930, align 4, !tbaa !16
  %3932 = load ptr, ptr %5, align 8, !tbaa !5
  %3933 = getelementptr inbounds i32, ptr %3932, i64 3
  %3934 = load i32, ptr %3933, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3925, i32 noundef %3928, i32 noundef %3931, i32 noundef %3934, ptr noundef @.str.958)
  br label %3935

3935:                                             ; preds = %3922, %3916
  call void @llvm.lifetime.end.p0(i64 8, ptr %245) #9
  br label %11526

3936:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 8, ptr %256) #9
  %3937 = load ptr, ptr %5, align 8, !tbaa !5
  %3938 = getelementptr inbounds i32, ptr %3937, i64 2
  %3939 = load i32, ptr %3938, align 4, !tbaa !16
  %3940 = call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_14SPIRExpressionEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %3939)
  store ptr %3940, ptr %256, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %257) #9
  %3941 = load ptr, ptr %5, align 8, !tbaa !5
  %3942 = getelementptr inbounds i32, ptr %3941, i64 3
  %3943 = load i32, ptr %3942, align 4, !tbaa !16
  %3944 = call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_14SPIRExpressionEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %3943)
  store ptr %3944, ptr %257, align 8, !tbaa !5
  %3945 = load ptr, ptr %256, align 8, !tbaa !5
  %3946 = icmp ne ptr %3945, null
  br i1 %3946, label %3947, label %4048

3947:                                             ; preds = %3936
  %3948 = load ptr, ptr %257, align 8, !tbaa !5
  %3949 = icmp ne ptr %3948, null
  br i1 %3949, label %3950, label %4048

3950:                                             ; preds = %3947
  %3951 = load ptr, ptr %256, align 8, !tbaa !5
  %3952 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %3951, i32 0, i32 6
  %3953 = load i8, ptr %3952, align 1, !tbaa !143, !range !127, !noundef !128
  %3954 = trunc i8 %3953 to i1
  br i1 %3954, label %3955, label %4048

3955:                                             ; preds = %3950
  %3956 = load ptr, ptr %257, align 8, !tbaa !5
  %3957 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %3956, i32 0, i32 6
  %3958 = load i8, ptr %3957, align 1, !tbaa !143, !range !127, !noundef !128
  %3959 = trunc i8 %3958 to i1
  br i1 %3959, label %3960, label %4048

3960:                                             ; preds = %3955
  %3961 = load ptr, ptr %256, align 8, !tbaa !5
  %3962 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %3961, i32 0, i32 6
  store i8 0, ptr %3962, align 1, !tbaa !143
  %3963 = load ptr, ptr %257, align 8, !tbaa !5
  %3964 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %3963, i32 0, i32 6
  store i8 0, ptr %3964, align 1, !tbaa !143
  call void @llvm.lifetime.start.p0(i64 32, ptr %258) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %259) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %260) #9
  %3965 = load ptr, ptr %5, align 8, !tbaa !5
  %3966 = getelementptr inbounds i32, ptr %3965, i64 3
  %3967 = load i32, ptr %3966, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL39to_unpacked_row_major_matrix_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %260, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3967)
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %259, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %260)
          to label %3968 unwind label %4019

3968:                                             ; preds = %3960
  call void @llvm.lifetime.start.p0(i64 32, ptr %261) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %262) #9
  %3969 = load ptr, ptr %5, align 8, !tbaa !5
  %3970 = getelementptr inbounds i32, ptr %3969, i64 2
  %3971 = load i32, ptr %3970, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL39to_unpacked_row_major_matrix_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %262, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3971)
          to label %3972 unwind label %4023

3972:                                             ; preds = %3968
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %261, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %262)
          to label %3973 unwind label %4027

3973:                                             ; preds = %3972
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS6_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %258, ptr noundef nonnull align 8 dereferenceable(32) %259, ptr noundef nonnull align 1 dereferenceable(4) @.str.976, ptr noundef nonnull align 8 dereferenceable(32) %261)
          to label %3974 unwind label %4031

3974:                                             ; preds = %3973
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %261) #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 @llvm.lifetime.end.p0(i64 32, ptr %261) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %259) #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 @llvm.lifetime.end.p0(i64 32, ptr %259) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %263) #9
  %3975 = load ptr, ptr %5, align 8, !tbaa !5
  %3976 = getelementptr inbounds i32, ptr %3975, i64 2
  %3977 = load i32, ptr %3976, align 4, !tbaa !16
  %3978 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3977)
          to label %3979 unwind label %4038

3979:                                             ; preds = %3974
  br i1 %3978, label %3980, label %3986

3980:                                             ; preds = %3979
  %3981 = load ptr, ptr %5, align 8, !tbaa !5
  %3982 = getelementptr inbounds i32, ptr %3981, i64 3
  %3983 = load i32, ptr %3982, align 4, !tbaa !16
  %3984 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3983)
          to label %3985 unwind label %4038

3985:                                             ; preds = %3980
  br label %3986

3986:                                             ; preds = %3985, %3979
  %3987 = phi i1 [ false, %3979 ], [ %3984, %3985 ]
  %3988 = zext i1 %3987 to i8
  store i8 %3988, ptr %263, align 1, !tbaa !142
  call void @llvm.lifetime.start.p0(i64 8, ptr %264) #9
  %3989 = load ptr, ptr %5, align 8, !tbaa !5
  %3990 = getelementptr inbounds i32, ptr %3989, i64 0
  %3991 = load i32, ptr %3990, align 4, !tbaa !16
  %3992 = load ptr, ptr %5, align 8, !tbaa !5
  %3993 = getelementptr inbounds i32, ptr %3992, i64 1
  %3994 = load i32, ptr %3993, align 4, !tbaa !16
  %3995 = load i8, ptr %263, align 1, !tbaa !142, !range !127, !noundef !128
  %3996 = trunc i8 %3995 to i1
  %3997 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %3991, i32 noundef %3994, ptr noundef nonnull align 8 dereferenceable(32) %258, i1 noundef zeroext %3996, i1 noundef zeroext false)
          to label %3998 unwind label %4042

3998:                                             ; preds = %3986
  store ptr %3997, ptr %264, align 8, !tbaa !5
  %3999 = load ptr, ptr %264, align 8, !tbaa !5
  %4000 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %3999, i32 0, i32 6
  store i8 1, ptr %4000, align 1, !tbaa !143
  %4001 = load ptr, ptr %256, align 8, !tbaa !5
  %4002 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %4001, i32 0, i32 6
  store i8 1, ptr %4002, align 1, !tbaa !143
  %4003 = load ptr, ptr %257, align 8, !tbaa !5
  %4004 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %4003, i32 0, i32 6
  store i8 1, ptr %4004, align 1, !tbaa !143
  %4005 = load ptr, ptr %5, align 8, !tbaa !5
  %4006 = getelementptr inbounds i32, ptr %4005, i64 1
  %4007 = load i32, ptr %4006, align 4, !tbaa !16
  %4008 = load ptr, ptr %5, align 8, !tbaa !5
  %4009 = getelementptr inbounds i32, ptr %4008, i64 2
  %4010 = load i32, ptr %4009, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %4007, i32 noundef %4010)
          to label %4011 unwind label %4042

4011:                                             ; preds = %3998
  %4012 = load ptr, ptr %5, align 8, !tbaa !5
  %4013 = getelementptr inbounds i32, ptr %4012, i64 1
  %4014 = load i32, ptr %4013, align 4, !tbaa !16
  %4015 = load ptr, ptr %5, align 8, !tbaa !5
  %4016 = getelementptr inbounds i32, ptr %4015, i64 3
  %4017 = load i32, ptr %4016, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %4014, i32 noundef %4017)
          to label %4018 unwind label %4042

4018:                                             ; preds = %4011
  call void @llvm.lifetime.end.p0(i64 8, ptr %264) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %263) #9
  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
  br label %4061

4019:                                             ; preds = %3960
  %4020 = landingpad { ptr, i32 }
          cleanup
  %4021 = extractvalue { ptr, i32 } %4020, 0
  store ptr %4021, ptr %23, align 8
  %4022 = extractvalue { ptr, i32 } %4020, 1
  store i32 %4022, ptr %24, align 4
  br label %4037

4023:                                             ; preds = %3968
  %4024 = landingpad { ptr, i32 }
          cleanup
  %4025 = extractvalue { ptr, i32 } %4024, 0
  store ptr %4025, ptr %23, align 8
  %4026 = extractvalue { ptr, i32 } %4024, 1
  store i32 %4026, ptr %24, align 4
  br label %4036

4027:                                             ; preds = %3972
  %4028 = landingpad { ptr, i32 }
          cleanup
  %4029 = extractvalue { ptr, i32 } %4028, 0
  store ptr %4029, ptr %23, align 8
  %4030 = extractvalue { ptr, i32 } %4028, 1
  store i32 %4030, ptr %24, align 4
  br label %4035

4031:                                             ; preds = %3973
  %4032 = landingpad { ptr, i32 }
          cleanup
  %4033 = extractvalue { ptr, i32 } %4032, 0
  store ptr %4033, ptr %23, align 8
  %4034 = extractvalue { ptr, i32 } %4032, 1
  store i32 %4034, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %261) #9
  br label %4035

4035:                                             ; preds = %4031, %4027
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %262) #9
  br label %4036

4036:                                             ; preds = %4035, %4023
  call void @llvm.lifetime.end.p0(i64 32, ptr %262) #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) %259) #9
  br label %4037

4037:                                             ; preds = %4036, %4019
  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 @llvm.lifetime.end.p0(i64 32, ptr %259) #9
  br label %4047

4038:                                             ; preds = %3980, %3974
  %4039 = landingpad { ptr, i32 }
          cleanup
  %4040 = extractvalue { ptr, i32 } %4039, 0
  store ptr %4040, ptr %23, align 8
  %4041 = extractvalue { ptr, i32 } %4039, 1
  store i32 %4041, ptr %24, align 4
  br label %4046

4042:                                             ; preds = %4011, %3998, %3986
  %4043 = landingpad { ptr, i32 }
          cleanup
  %4044 = extractvalue { ptr, i32 } %4043, 0
  store ptr %4044, ptr %23, align 8
  %4045 = extractvalue { ptr, i32 } %4043, 1
  store i32 %4045, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %264) #9
  br label %4046

4046:                                             ; preds = %4042, %4038
  call void @llvm.lifetime.end.p0(i64 1, ptr %263) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %258) #9
  br label %4047

4047:                                             ; preds = %4046, %4037
  call void @llvm.lifetime.end.p0(i64 32, ptr %258) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %257) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %256) #9
  br label %11527

4048:                                             ; preds = %3955, %3950, %3947, %3936
  %4049 = load ptr, ptr %5, align 8, !tbaa !5
  %4050 = getelementptr inbounds i32, ptr %4049, i64 0
  %4051 = load i32, ptr %4050, align 4, !tbaa !16
  %4052 = load ptr, ptr %5, align 8, !tbaa !5
  %4053 = getelementptr inbounds i32, ptr %4052, i64 1
  %4054 = load i32, ptr %4053, align 4, !tbaa !16
  %4055 = load ptr, ptr %5, align 8, !tbaa !5
  %4056 = getelementptr inbounds i32, ptr %4055, i64 2
  %4057 = load i32, ptr %4056, align 4, !tbaa !16
  %4058 = load ptr, ptr %5, align 8, !tbaa !5
  %4059 = getelementptr inbounds i32, ptr %4058, i64 3
  %4060 = load i32, ptr %4059, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4051, i32 noundef %4054, i32 noundef %4057, i32 noundef %4060, ptr noundef @.str.958)
  br label %4061

4061:                                             ; preds = %4048, %4018
  call void @llvm.lifetime.end.p0(i64 8, ptr %257) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %256) #9
  br label %11526

4062:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 8, ptr %265) #9
  %4063 = load ptr, ptr %5, align 8, !tbaa !5
  %4064 = getelementptr inbounds i32, ptr %4063, i64 2
  %4065 = load i32, ptr %4064, align 4, !tbaa !16
  %4066 = call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_14SPIRExpressionEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %4065)
  store ptr %4066, ptr %265, align 8, !tbaa !5
  %4067 = load ptr, ptr %265, align 8, !tbaa !5
  %4068 = icmp ne ptr %4067, null
  br i1 %4068, label %4069, label %4152

4069:                                             ; preds = %4062
  %4070 = load ptr, ptr %265, align 8, !tbaa !5
  %4071 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %4070, i32 0, i32 6
  %4072 = load i8, ptr %4071, align 1, !tbaa !143, !range !127, !noundef !128
  %4073 = trunc i8 %4072 to i1
  br i1 %4073, label %4074, label %4152

4074:                                             ; preds = %4069
  %4075 = load ptr, ptr %265, align 8, !tbaa !5
  %4076 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %4075, i32 0, i32 6
  store i8 0, ptr %4076, align 1, !tbaa !143
  call void @llvm.lifetime.start.p0(i64 32, ptr %266) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %267) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %268) #9
  %4077 = load ptr, ptr %5, align 8, !tbaa !5
  %4078 = getelementptr inbounds i32, ptr %4077, i64 2
  %4079 = load i32, ptr %4078, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL39to_unpacked_row_major_matrix_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %268, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4079)
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %267, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %268)
          to label %4080 unwind label %4128

4080:                                             ; preds = %4074
  call void @llvm.lifetime.start.p0(i64 32, ptr %269) #9
  %4081 = load ptr, ptr %5, align 8, !tbaa !5
  %4082 = getelementptr inbounds i32, ptr %4081, i64 3
  %4083 = load i32, ptr %4082, align 4, !tbaa !16
  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) %885, i32 noundef %4083, i1 noundef zeroext true)
          to label %4084 unwind label %4132

4084:                                             ; preds = %4080
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS6_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %266, ptr noundef nonnull align 8 dereferenceable(32) %267, ptr noundef nonnull align 1 dereferenceable(4) @.str.976, ptr noundef nonnull align 8 dereferenceable(32) %269)
          to label %4085 unwind label %4136

4085:                                             ; preds = %4084
  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) %267) #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 @llvm.lifetime.end.p0(i64 32, ptr %267) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %270) #9
  %4086 = load ptr, ptr %5, align 8, !tbaa !5
  %4087 = getelementptr inbounds i32, ptr %4086, i64 2
  %4088 = load i32, ptr %4087, align 4, !tbaa !16
  %4089 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4088)
          to label %4090 unwind label %4142

4090:                                             ; preds = %4085
  br i1 %4089, label %4091, label %4097

4091:                                             ; preds = %4090
  %4092 = load ptr, ptr %5, align 8, !tbaa !5
  %4093 = getelementptr inbounds i32, ptr %4092, i64 3
  %4094 = load i32, ptr %4093, align 4, !tbaa !16
  %4095 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4094)
          to label %4096 unwind label %4142

4096:                                             ; preds = %4091
  br label %4097

4097:                                             ; preds = %4096, %4090
  %4098 = phi i1 [ false, %4090 ], [ %4095, %4096 ]
  %4099 = zext i1 %4098 to i8
  store i8 %4099, ptr %270, align 1, !tbaa !142
  call void @llvm.lifetime.start.p0(i64 8, ptr %271) #9
  %4100 = load ptr, ptr %5, align 8, !tbaa !5
  %4101 = getelementptr inbounds i32, ptr %4100, i64 0
  %4102 = load i32, ptr %4101, align 4, !tbaa !16
  %4103 = load ptr, ptr %5, align 8, !tbaa !5
  %4104 = getelementptr inbounds i32, ptr %4103, i64 1
  %4105 = load i32, ptr %4104, align 4, !tbaa !16
  %4106 = load i8, ptr %270, align 1, !tbaa !142, !range !127, !noundef !128
  %4107 = trunc i8 %4106 to i1
  %4108 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4102, i32 noundef %4105, ptr noundef nonnull align 8 dereferenceable(32) %266, i1 noundef zeroext %4107, i1 noundef zeroext false)
          to label %4109 unwind label %4146

4109:                                             ; preds = %4097
  store ptr %4108, ptr %271, align 8, !tbaa !5
  %4110 = load ptr, ptr %271, align 8, !tbaa !5
  %4111 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %4110, i32 0, i32 6
  store i8 1, ptr %4111, align 1, !tbaa !143
  %4112 = load ptr, ptr %265, align 8, !tbaa !5
  %4113 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %4112, i32 0, i32 6
  store i8 1, ptr %4113, align 1, !tbaa !143
  %4114 = load ptr, ptr %5, align 8, !tbaa !5
  %4115 = getelementptr inbounds i32, ptr %4114, i64 1
  %4116 = load i32, ptr %4115, align 4, !tbaa !16
  %4117 = load ptr, ptr %5, align 8, !tbaa !5
  %4118 = getelementptr inbounds i32, ptr %4117, i64 2
  %4119 = load i32, ptr %4118, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %4116, i32 noundef %4119)
          to label %4120 unwind label %4146

4120:                                             ; preds = %4109
  %4121 = load ptr, ptr %5, align 8, !tbaa !5
  %4122 = getelementptr inbounds i32, ptr %4121, i64 1
  %4123 = load i32, ptr %4122, align 4, !tbaa !16
  %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 !16
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %4123, i32 noundef %4126)
          to label %4127 unwind label %4146

4127:                                             ; preds = %4120
  call void @llvm.lifetime.end.p0(i64 8, ptr %271) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %270) #9
  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
  br label %4165

4128:                                             ; preds = %4074
  %4129 = landingpad { ptr, i32 }
          cleanup
  %4130 = extractvalue { ptr, i32 } %4129, 0
  store ptr %4130, ptr %23, align 8
  %4131 = extractvalue { ptr, i32 } %4129, 1
  store i32 %4131, ptr %24, align 4
  br label %4141

4132:                                             ; preds = %4080
  %4133 = landingpad { ptr, i32 }
          cleanup
  %4134 = extractvalue { ptr, i32 } %4133, 0
  store ptr %4134, ptr %23, align 8
  %4135 = extractvalue { ptr, i32 } %4133, 1
  store i32 %4135, ptr %24, align 4
  br label %4140

4136:                                             ; preds = %4084
  %4137 = landingpad { ptr, i32 }
          cleanup
  %4138 = extractvalue { ptr, i32 } %4137, 0
  store ptr %4138, ptr %23, align 8
  %4139 = extractvalue { ptr, i32 } %4137, 1
  store i32 %4139, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %269) #9
  br label %4140

4140:                                             ; preds = %4136, %4132
  call void @llvm.lifetime.end.p0(i64 32, ptr %269) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %267) #9
  br label %4141

4141:                                             ; preds = %4140, %4128
  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 @llvm.lifetime.end.p0(i64 32, ptr %267) #9
  br label %4151

4142:                                             ; preds = %4091, %4085
  %4143 = landingpad { ptr, i32 }
          cleanup
  %4144 = extractvalue { ptr, i32 } %4143, 0
  store ptr %4144, ptr %23, align 8
  %4145 = extractvalue { ptr, i32 } %4143, 1
  store i32 %4145, ptr %24, align 4
  br label %4150

4146:                                             ; preds = %4120, %4109, %4097
  %4147 = landingpad { ptr, i32 }
          cleanup
  %4148 = extractvalue { ptr, i32 } %4147, 0
  store ptr %4148, ptr %23, align 8
  %4149 = extractvalue { ptr, i32 } %4147, 1
  store i32 %4149, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %271) #9
  br label %4150

4150:                                             ; preds = %4146, %4142
  call void @llvm.lifetime.end.p0(i64 1, ptr %270) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %266) #9
  br label %4151

4151:                                             ; preds = %4150, %4141
  call void @llvm.lifetime.end.p0(i64 32, ptr %266) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %265) #9
  br label %11527

4152:                                             ; preds = %4069, %4062
  %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 !16
  %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 !16
  %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 !16
  %4162 = load ptr, ptr %5, align 8, !tbaa !5
  %4163 = getelementptr inbounds i32, ptr %4162, i64 3
  %4164 = load i32, ptr %4163, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4155, i32 noundef %4158, i32 noundef %4161, i32 noundef %4164, ptr noundef @.str.958)
  br label %4165

4165:                                             ; preds = %4152, %4127
  call void @llvm.lifetime.end.p0(i64 8, ptr %265) #9
  br label %11526

4166:                                             ; preds = %919, %919
  %4167 = load ptr, ptr %5, align 8, !tbaa !5
  %4168 = getelementptr inbounds i32, ptr %4167, i64 0
  %4169 = load i32, ptr %4168, align 4, !tbaa !16
  %4170 = load ptr, ptr %5, align 8, !tbaa !5
  %4171 = getelementptr inbounds i32, ptr %4170, i64 1
  %4172 = load i32, ptr %4171, align 4, !tbaa !16
  %4173 = load ptr, ptr %5, align 8, !tbaa !5
  %4174 = getelementptr inbounds i32, ptr %4173, i64 2
  %4175 = load i32, ptr %4174, align 4, !tbaa !16
  %4176 = load ptr, ptr %5, align 8, !tbaa !5
  %4177 = getelementptr inbounds i32, ptr %4176, i64 3
  %4178 = load i32, ptr %4177, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4169, i32 noundef %4172, i32 noundef %4175, i32 noundef %4178, ptr noundef @.str.958)
  br label %11526

4179:                                             ; preds = %919
  %4180 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %4181 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %4180, i32 0, i32 0
  %4182 = load i32, ptr %4181, align 4, !tbaa !207
  %4183 = icmp ult i32 %4182, 120
  br i1 %4183, label %4184, label %4284

4184:                                             ; preds = %4179
  call void @llvm.lifetime.start.p0(i64 4, ptr %272) #9
  %4185 = load ptr, ptr %5, align 8, !tbaa !5
  %4186 = getelementptr inbounds i32, ptr %4185, i64 0
  %4187 = load i32, ptr %4186, align 4, !tbaa !16
  store i32 %4187, ptr %272, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %273) #9
  %4188 = load ptr, ptr %5, align 8, !tbaa !5
  %4189 = getelementptr inbounds i32, ptr %4188, i64 1
  %4190 = load i32, ptr %4189, align 4, !tbaa !16
  store i32 %4190, ptr %273, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %274) #9
  %4191 = load ptr, ptr %5, align 8, !tbaa !5
  %4192 = getelementptr inbounds i32, ptr %4191, i64 2
  %4193 = load i32, ptr %4192, align 4, !tbaa !16
  store i32 %4193, ptr %274, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %275) #9
  %4194 = load ptr, ptr %5, align 8, !tbaa !5
  %4195 = getelementptr inbounds i32, ptr %4194, i64 3
  %4196 = load i32, ptr %4195, align 4, !tbaa !16
  store i32 %4196, ptr %275, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %276) #9
  %4197 = load i32, ptr %272, align 4, !tbaa !16
  %4198 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %4197)
  store ptr %4198, ptr %276, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %277) #9
  %4199 = load ptr, ptr %276, 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 %277, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(336) %4199)
  %4200 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %277, ptr noundef @.str.718)
          to label %4201 unwind label %4209

4201:                                             ; preds = %4184
  call void @llvm.lifetime.start.p0(i64 4, ptr %278) #9
  store i32 0, ptr %278, align 4, !tbaa !16
  br label %4202

4202:                                             ; preds = %4257, %4201
  %4203 = load i32, ptr %278, align 4, !tbaa !16
  %4204 = load ptr, ptr %276, align 8, !tbaa !5
  %4205 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %4204, i32 0, i32 5
  %4206 = load i32, ptr %4205, align 4, !tbaa !149
  %4207 = icmp ult i32 %4203, %4206
  br i1 %4207, label %4213, label %4208

4208:                                             ; preds = %4202
  call void @llvm.lifetime.end.p0(i64 4, ptr %278) #9
  br label %4261

4209:                                             ; preds = %4279, %4276, %4273, %4269, %4263, %4261, %4184
  %4210 = landingpad { ptr, i32 }
          cleanup
  %4211 = extractvalue { ptr, i32 } %4210, 0
  store ptr %4211, ptr %23, align 8
  %4212 = extractvalue { ptr, i32 } %4210, 1
  store i32 %4212, ptr %24, align 4
  br label %4283

4213:                                             ; preds = %4202
  call void @llvm.lifetime.start.p0(i64 32, ptr %279) #9
  %4214 = load i32, ptr %274, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %279, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4214, i1 noundef zeroext true)
          to label %4215 unwind label %4234

4215:                                             ; preds = %4213
  %4216 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %277, ptr noundef nonnull align 8 dereferenceable(32) %279)
          to label %4217 unwind label %4238

4217:                                             ; preds = %4215
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %279) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %279) #9
  %4218 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %277, ptr noundef @.str.976)
          to label %4219 unwind label %4243

4219:                                             ; preds = %4217
  call void @llvm.lifetime.start.p0(i64 32, ptr %280) #9
  %4220 = load i32, ptr %275, align 4, !tbaa !16
  %4221 = load i32, ptr %278, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_extract_component_expressionB5cxx11Ejj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %280, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4220, i32 noundef %4221)
          to label %4222 unwind label %4247

4222:                                             ; preds = %4219
  %4223 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %277, ptr noundef nonnull align 8 dereferenceable(32) %280)
          to label %4224 unwind label %4251

4224:                                             ; preds = %4222
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %280) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %280) #9
  %4225 = load i32, ptr %278, align 4, !tbaa !16
  %4226 = add i32 %4225, 1
  %4227 = load ptr, ptr %276, align 8, !tbaa !5
  %4228 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %4227, i32 0, i32 5
  %4229 = load i32, ptr %4228, align 4, !tbaa !149
  %4230 = icmp ult i32 %4226, %4229
  br i1 %4230, label %4231, label %4256

4231:                                             ; preds = %4224
  %4232 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %277, ptr noundef @.str.177)
          to label %4233 unwind label %4243

4233:                                             ; preds = %4231
  br label %4256

4234:                                             ; preds = %4213
  %4235 = landingpad { ptr, i32 }
          cleanup
  %4236 = extractvalue { ptr, i32 } %4235, 0
  store ptr %4236, ptr %23, align 8
  %4237 = extractvalue { ptr, i32 } %4235, 1
  store i32 %4237, ptr %24, align 4
  br label %4242

4238:                                             ; preds = %4215
  %4239 = landingpad { ptr, i32 }
          cleanup
  %4240 = extractvalue { ptr, i32 } %4239, 0
  store ptr %4240, ptr %23, align 8
  %4241 = extractvalue { ptr, i32 } %4239, 1
  store i32 %4241, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %279) #9
  br label %4242

4242:                                             ; preds = %4238, %4234
  call void @llvm.lifetime.end.p0(i64 32, ptr %279) #9
  br label %4260

4243:                                             ; preds = %4231, %4217
  %4244 = landingpad { ptr, i32 }
          cleanup
  %4245 = extractvalue { ptr, i32 } %4244, 0
  store ptr %4245, ptr %23, align 8
  %4246 = extractvalue { ptr, i32 } %4244, 1
  store i32 %4246, ptr %24, align 4
  br label %4260

4247:                                             ; preds = %4219
  %4248 = landingpad { ptr, i32 }
          cleanup
  %4249 = extractvalue { ptr, i32 } %4248, 0
  store ptr %4249, ptr %23, align 8
  %4250 = extractvalue { ptr, i32 } %4248, 1
  store i32 %4250, ptr %24, align 4
  br label %4255

4251:                                             ; preds = %4222
  %4252 = landingpad { ptr, i32 }
          cleanup
  %4253 = extractvalue { ptr, i32 } %4252, 0
  store ptr %4253, ptr %23, align 8
  %4254 = extractvalue { ptr, i32 } %4252, 1
  store i32 %4254, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %280) #9
  br label %4255

4255:                                             ; preds = %4251, %4247
  call void @llvm.lifetime.end.p0(i64 32, ptr %280) #9
  br label %4260

4256:                                             ; preds = %4233, %4224
  br label %4257

4257:                                             ; preds = %4256
  %4258 = load i32, ptr %278, align 4, !tbaa !16
  %4259 = add i32 %4258, 1
  store i32 %4259, ptr %278, align 4, !tbaa !16
  br label %4202, !llvm.loop !208

4260:                                             ; preds = %4255, %4243, %4242
  call void @llvm.lifetime.end.p0(i64 4, ptr %278) #9
  br label %4283

4261:                                             ; preds = %4208
  %4262 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %277, ptr noundef @.str.135)
          to label %4263 unwind label %4209

4263:                                             ; preds = %4261
  %4264 = load i32, ptr %272, align 4, !tbaa !16
  %4265 = load i32, ptr %273, align 4, !tbaa !16
  %4266 = load i32, ptr %274, align 4, !tbaa !16
  %4267 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4266)
          to label %4268 unwind label %4209

4268:                                             ; preds = %4263
  br i1 %4267, label %4269, label %4273

4269:                                             ; preds = %4268
  %4270 = load i32, ptr %275, align 4, !tbaa !16
  %4271 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4270)
          to label %4272 unwind label %4209

4272:                                             ; preds = %4269
  br label %4273

4273:                                             ; preds = %4272, %4268
  %4274 = phi i1 [ false, %4268 ], [ %4271, %4272 ]
  %4275 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4264, i32 noundef %4265, ptr noundef nonnull align 8 dereferenceable(32) %277, i1 noundef zeroext %4274, i1 noundef zeroext false)
          to label %4276 unwind label %4209

4276:                                             ; preds = %4273
  %4277 = load i32, ptr %273, align 4, !tbaa !16
  %4278 = load i32, ptr %274, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %4277, i32 noundef %4278)
          to label %4279 unwind label %4209

4279:                                             ; preds = %4276
  %4280 = load i32, ptr %273, align 4, !tbaa !16
  %4281 = load i32, ptr %275, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %4280, i32 noundef %4281)
          to label %4282 unwind label %4209

4282:                                             ; preds = %4279
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %277) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %277) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %276) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %275) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %274) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %273) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %272) #9
  br label %4297

4283:                                             ; preds = %4260, %4209
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %277) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %277) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %276) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %275) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %274) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %273) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %272) #9
  br label %11527

4284:                                             ; preds = %4179
  %4285 = load ptr, ptr %5, align 8, !tbaa !5
  %4286 = getelementptr inbounds i32, ptr %4285, i64 0
  %4287 = load i32, ptr %4286, align 4, !tbaa !16
  %4288 = load ptr, ptr %5, align 8, !tbaa !5
  %4289 = getelementptr inbounds i32, ptr %4288, i64 1
  %4290 = load i32, ptr %4289, align 4, !tbaa !16
  %4291 = load ptr, ptr %5, align 8, !tbaa !5
  %4292 = getelementptr inbounds i32, ptr %4291, i64 2
  %4293 = load i32, ptr %4292, align 4, !tbaa !16
  %4294 = load ptr, ptr %5, align 8, !tbaa !5
  %4295 = getelementptr inbounds i32, ptr %4294, i64 3
  %4296 = load i32, ptr %4295, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4287, i32 noundef %4290, i32 noundef %4293, i32 noundef %4296, ptr noundef @.str.447)
  br label %4297

4297:                                             ; preds = %4284, %4282
  br label %11526

4298:                                             ; preds = %919
  %4299 = load ptr, ptr %5, align 8, !tbaa !5
  %4300 = getelementptr inbounds i32, ptr %4299, i64 0
  %4301 = load i32, ptr %4300, align 4, !tbaa !16
  %4302 = load ptr, ptr %5, align 8, !tbaa !5
  %4303 = getelementptr inbounds i32, ptr %4302, i64 1
  %4304 = load i32, ptr %4303, align 4, !tbaa !16
  %4305 = load ptr, ptr %5, align 8, !tbaa !5
  %4306 = getelementptr inbounds i32, ptr %4305, i64 2
  %4307 = load i32, ptr %4306, align 4, !tbaa !16
  %4308 = load ptr, ptr %5, align 8, !tbaa !5
  %4309 = getelementptr inbounds i32, ptr %4308, i64 3
  %4310 = load i32, ptr %4309, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4301, i32 noundef %4304, i32 noundef %4307, i32 noundef %4310, ptr noundef @.str.375)
  br label %11526

4311:                                             ; preds = %919
  %4312 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %4313 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %4312, i32 0, i32 0
  %4314 = load i32, ptr %4313, align 4, !tbaa !207
  %4315 = icmp ult i32 %4314, 120
  br i1 %4315, label %4316, label %4363

4316:                                             ; preds = %4311
  call void @llvm.lifetime.start.p0(i64 4, ptr %281) #9
  %4317 = load ptr, ptr %5, align 8, !tbaa !5
  %4318 = getelementptr inbounds i32, ptr %4317, i64 0
  %4319 = load i32, ptr %4318, align 4, !tbaa !16
  store i32 %4319, ptr %281, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %282) #9
  %4320 = load ptr, ptr %5, align 8, !tbaa !5
  %4321 = getelementptr inbounds i32, ptr %4320, i64 1
  %4322 = load i32, ptr %4321, align 4, !tbaa !16
  store i32 %4322, ptr %282, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %283) #9
  %4323 = load ptr, ptr %5, align 8, !tbaa !5
  %4324 = getelementptr inbounds i32, ptr %4323, i64 2
  %4325 = load i32, ptr %4324, align 4, !tbaa !16
  store i32 %4325, ptr %283, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 1, ptr %284) #9
  store i8 0, ptr %284, align 1, !tbaa !142
  call void @llvm.lifetime.start.p0(i64 8, ptr %285) #9
  %4326 = load i32, ptr %283, align 4, !tbaa !16
  %4327 = call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_14SPIRExpressionEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %4326)
  store ptr %4327, ptr %285, align 8, !tbaa !5
  %4328 = load ptr, ptr %285, align 8, !tbaa !5
  %4329 = icmp ne ptr %4328, null
  br i1 %4329, label %4330, label %4333

4330:                                             ; preds = %4316
  %4331 = load ptr, ptr %285, align 8, !tbaa !5
  %4332 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %4331, i32 0, i32 6
  call void @_ZSt4swapIbENSt9enable_ifIXsr6__and_ISt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS3_ESt18is_move_assignableIS3_EEE5valueEvE4typeERS3_SC_(ptr noundef nonnull align 1 dereferenceable(1) %284, ptr noundef nonnull align 1 dereferenceable(1) %4332) #9
  br label %4333

4333:                                             ; preds = %4330, %4316
  call void @llvm.lifetime.start.p0(i64 1, ptr %286) #9
  %4334 = load i32, ptr %283, align 4, !tbaa !16
  %4335 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4334)
  %4336 = zext i1 %4335 to i8
  store i8 %4336, ptr %286, align 1, !tbaa !142
  call void @llvm.lifetime.start.p0(i64 8, ptr %287) #9
  %4337 = load i32, ptr %281, align 4, !tbaa !16
  %4338 = load i32, ptr %282, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %288) #9
  %4339 = load i32, ptr %283, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %288, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4339, i1 noundef zeroext true)
  %4340 = load i8, ptr %286, align 1, !tbaa !142, !range !127, !noundef !128
  %4341 = trunc i8 %4340 to i1
  %4342 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4337, i32 noundef %4338, ptr noundef nonnull align 8 dereferenceable(32) %288, i1 noundef zeroext %4341, i1 noundef zeroext false)
          to label %4343 unwind label %4358

4343:                                             ; preds = %4333
  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
  store ptr %4342, ptr %287, align 8, !tbaa !5
  %4344 = load i8, ptr %284, align 1, !tbaa !142, !range !127, !noundef !128
  %4345 = trunc i8 %4344 to i1
  %4346 = xor i1 %4345, true
  %4347 = load ptr, ptr %287, align 8, !tbaa !5
  %4348 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %4347, i32 0, i32 6
  %4349 = zext i1 %4346 to i8
  store i8 %4349, ptr %4348, align 1, !tbaa !143
  %4350 = load ptr, ptr %285, align 8, !tbaa !5
  %4351 = icmp ne ptr %4350, null
  br i1 %4351, label %4352, label %4362

4352:                                             ; preds = %4343
  %4353 = load i8, ptr %284, align 1, !tbaa !142, !range !127, !noundef !128
  %4354 = trunc i8 %4353 to i1
  %4355 = load ptr, ptr %285, align 8, !tbaa !5
  %4356 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %4355, i32 0, i32 6
  %4357 = zext i1 %4354 to i8
  store i8 %4357, ptr %4356, align 1, !tbaa !143
  br label %4362

4358:                                             ; preds = %4333
  %4359 = landingpad { ptr, i32 }
          cleanup
  %4360 = extractvalue { ptr, i32 } %4359, 0
  store ptr %4360, ptr %23, align 8
  %4361 = extractvalue { ptr, i32 } %4359, 1
  store i32 %4361, ptr %24, align 4
  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
  call void @llvm.lifetime.end.p0(i64 8, ptr %287) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %286) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %285) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %284) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %283) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %282) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %281) #9
  br label %11527

4362:                                             ; preds = %4352, %4343
  call void @llvm.lifetime.end.p0(i64 8, ptr %287) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %286) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %285) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %284) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %283) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %282) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %281) #9
  br label %4373

4363:                                             ; preds = %4311
  %4364 = load ptr, ptr %5, align 8, !tbaa !5
  %4365 = getelementptr inbounds i32, ptr %4364, i64 0
  %4366 = load i32, ptr %4365, align 4, !tbaa !16
  %4367 = load ptr, ptr %5, align 8, !tbaa !5
  %4368 = getelementptr inbounds i32, ptr %4367, i64 1
  %4369 = load i32, ptr %4368, align 4, !tbaa !16
  %4370 = load ptr, ptr %5, align 8, !tbaa !5
  %4371 = getelementptr inbounds i32, ptr %4370, i64 2
  %4372 = load i32, ptr %4371, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4366, i32 noundef %4369, i32 noundef %4372, ptr noundef @.str.493)
  br label %4373

4373:                                             ; preds = %4363, %4362
  br label %11526

4374:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %289) #9
  %4375 = load ptr, ptr %5, align 8, !tbaa !5
  %4376 = getelementptr inbounds i32, ptr %4375, i64 0
  %4377 = load i32, ptr %4376, align 4, !tbaa !16
  store i32 %4377, ptr %289, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %290) #9
  %4378 = load ptr, ptr %5, align 8, !tbaa !5
  %4379 = getelementptr inbounds i32, ptr %4378, i64 1
  %4380 = load i32, ptr %4379, align 4, !tbaa !16
  store i32 %4380, ptr %290, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %291) #9
  %4381 = load ptr, ptr %5, align 8, !tbaa !5
  %4382 = getelementptr inbounds i32, ptr %4381, i64 2
  %4383 = load i32, ptr %4382, align 4, !tbaa !16
  store i32 %4383, ptr %291, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %292) #9
  %4384 = load ptr, ptr %5, align 8, !tbaa !5
  %4385 = getelementptr inbounds i32, ptr %4384, i64 3
  %4386 = load i32, ptr %4385, align 4, !tbaa !16
  store i32 %4386, ptr %292, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %293) #9
  %4387 = load i32, ptr %289, align 4, !tbaa !16
  %4388 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %4387)
  store ptr %4388, ptr %293, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %294) #9
  %4389 = load i32, ptr %291, align 4, !tbaa !16
  %4390 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4389)
  br i1 %4390, label %4391, label %4394

4391:                                             ; preds = %4374
  %4392 = load i32, ptr %292, align 4, !tbaa !16
  %4393 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4392)
  br label %4394

4394:                                             ; preds = %4391, %4374
  %4395 = phi i1 [ false, %4374 ], [ %4393, %4391 ]
  %4396 = zext i1 %4395 to i8
  store i8 %4396, ptr %294, align 1, !tbaa !142
  call void @llvm.lifetime.start.p0(i64 32, ptr %295) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %295) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %296) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %296) #9
  call void @llvm.lifetime.start.p0(i64 336, ptr %297) #9
  %4397 = load i32, ptr %291, align 4, !tbaa !16
  %4398 = load i32, ptr %292, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL24binary_op_bitcast_helperERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_RNS_8SPIRType8BaseTypeEjjb(ptr dead_on_unwind writable sret(%"struct.spirv_cross::SPIRType") align 8 %297, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %295, ptr noundef nonnull align 8 dereferenceable(32) %296, ptr noundef nonnull align 4 dereferenceable(4) %9, i32 noundef %4397, i32 noundef %4398, i1 noundef zeroext false)
          to label %4399 unwind label %4413

4399:                                             ; preds = %4394
  call void @llvm.lifetime.start.p0(i64 32, ptr %298) #9
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS7_SA_RA2_S8_S7_SA_S7_SC_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %298, ptr noundef nonnull align 8 dereferenceable(32) %295, ptr noundef nonnull align 1 dereferenceable(4) @.str.975, ptr noundef nonnull align 8 dereferenceable(32) %296, ptr noundef nonnull align 1 dereferenceable(4) @.str.976, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %295, ptr noundef nonnull align 1 dereferenceable(4) @.str.977, ptr noundef nonnull align 8 dereferenceable(32) %296, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %4400 unwind label %4417

4400:                                             ; preds = %4399
  %4401 = load i8, ptr %11, align 1, !tbaa !142, !range !127, !noundef !128
  %4402 = trunc i8 %4401 to i1
  br i1 %4402, label %4403, label %4430

4403:                                             ; preds = %4400
  call void @llvm.lifetime.start.p0(i64 32, ptr %299) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %300) #9
  %4404 = load i32, ptr %289, align 4, !tbaa !16
  %4405 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %4404)
          to label %4406 unwind label %4421

4406:                                             ; preds = %4403
  %4407 = load ptr, ptr %885, align 8, !tbaa !145
  %4408 = getelementptr inbounds ptr, ptr %4407, i64 19
  %4409 = load ptr, ptr %4408, align 8
  invoke void %4409(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %300, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(336) %4405, i32 noundef 0)
          to label %4410 unwind label %4421

4410:                                             ; preds = %4406
  call void @llvm.lifetime.start.p0(i64 1, ptr %301) #9
  store i8 40, ptr %301, align 1, !tbaa !209
  call void @llvm.lifetime.start.p0(i64 1, ptr %302) #9
  store i8 41, ptr %302, align 1, !tbaa !209
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEcRS6_cEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %299, ptr noundef nonnull align 8 dereferenceable(32) %300, ptr noundef nonnull align 1 dereferenceable(1) %301, ptr noundef nonnull align 8 dereferenceable(32) %298, ptr noundef nonnull align 1 dereferenceable(1) %302)
          to label %4411 unwind label %4425

4411:                                             ; preds = %4410
  %4412 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %298, ptr noundef nonnull align 8 dereferenceable(32) %299) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %299) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %302) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %301) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %300) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %300) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %299) #9
  br label %4456

4413:                                             ; preds = %4394
  %4414 = landingpad { ptr, i32 }
          cleanup
  %4415 = extractvalue { ptr, i32 } %4414, 0
  store ptr %4415, ptr %23, align 8
  %4416 = extractvalue { ptr, i32 } %4414, 1
  store i32 %4416, ptr %24, align 4
  br label %4475

4417:                                             ; preds = %4399
  %4418 = landingpad { ptr, i32 }
          cleanup
  %4419 = extractvalue { ptr, i32 } %4418, 0
  store ptr %4419, ptr %23, align 8
  %4420 = extractvalue { ptr, i32 } %4418, 1
  store i32 %4420, ptr %24, align 4
  br label %4474

4421:                                             ; preds = %4406, %4403
  %4422 = landingpad { ptr, i32 }
          cleanup
  %4423 = extractvalue { ptr, i32 } %4422, 0
  store ptr %4423, ptr %23, align 8
  %4424 = extractvalue { ptr, i32 } %4422, 1
  store i32 %4424, ptr %24, align 4
  br label %4429

4425:                                             ; preds = %4410
  %4426 = landingpad { ptr, i32 }
          cleanup
  %4427 = extractvalue { ptr, i32 } %4426, 0
  store ptr %4427, ptr %23, align 8
  %4428 = extractvalue { ptr, i32 } %4426, 1
  store i32 %4428, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %302) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %301) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %300) #9
  br label %4429

4429:                                             ; preds = %4425, %4421
  call void @llvm.lifetime.end.p0(i64 32, ptr %300) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %299) #9
  br label %4473

4430:                                             ; preds = %4400
  %4431 = load ptr, ptr %293, align 8, !tbaa !5
  %4432 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %4431, i32 0, i32 2
  %4433 = load i32, ptr %4432, align 8, !tbaa !148
  %4434 = load i32, ptr %9, align 4, !tbaa !17
  %4435 = icmp ne i32 %4433, %4434
  br i1 %4435, label %4436, label %4455

4436:                                             ; preds = %4430
  %4437 = load i32, ptr %9, align 4, !tbaa !17
  %4438 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %297, i32 0, i32 2
  store i32 %4437, ptr %4438, align 8, !tbaa !148
  call void @llvm.lifetime.start.p0(i64 32, ptr %303) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %304) #9
  %4439 = load ptr, ptr %293, align 8, !tbaa !5
  %4440 = load ptr, ptr %885, align 8, !tbaa !145
  %4441 = getelementptr inbounds ptr, ptr %4440, i64 59
  %4442 = load ptr, ptr %4441, align 8
  invoke void %4442(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %304, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(336) %4439, ptr noundef nonnull align 8 dereferenceable(336) %297)
          to label %4443 unwind label %4446

4443:                                             ; preds = %4436
  call void @llvm.lifetime.start.p0(i64 1, ptr %305) #9
  store i8 40, ptr %305, align 1, !tbaa !209
  call void @llvm.lifetime.start.p0(i64 1, ptr %306) #9
  store i8 41, ptr %306, align 1, !tbaa !209
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEcRS6_cEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %303, ptr noundef nonnull align 8 dereferenceable(32) %304, ptr noundef nonnull align 1 dereferenceable(1) %305, ptr noundef nonnull align 8 dereferenceable(32) %298, ptr noundef nonnull align 1 dereferenceable(1) %306)
          to label %4444 unwind label %4450

4444:                                             ; preds = %4443
  %4445 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %298, ptr noundef nonnull align 8 dereferenceable(32) %303) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %303) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %306) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %305) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %304) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %304) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %303) #9
  br label %4455

4446:                                             ; preds = %4436
  %4447 = landingpad { ptr, i32 }
          cleanup
  %4448 = extractvalue { ptr, i32 } %4447, 0
  store ptr %4448, ptr %23, align 8
  %4449 = extractvalue { ptr, i32 } %4447, 1
  store i32 %4449, ptr %24, align 4
  br label %4454

4450:                                             ; preds = %4443
  %4451 = landingpad { ptr, i32 }
          cleanup
  %4452 = extractvalue { ptr, i32 } %4451, 0
  store ptr %4452, ptr %23, align 8
  %4453 = extractvalue { ptr, i32 } %4451, 1
  store i32 %4453, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %306) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %305) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %304) #9
  br label %4454

4454:                                             ; preds = %4450, %4446
  call void @llvm.lifetime.end.p0(i64 32, ptr %304) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %303) #9
  br label %4473

4455:                                             ; preds = %4444, %4430
  br label %4456

4456:                                             ; preds = %4455, %4411
  %4457 = load i32, ptr %289, align 4, !tbaa !16
  %4458 = load i32, ptr %290, align 4, !tbaa !16
  %4459 = load i8, ptr %294, align 1, !tbaa !142, !range !127, !noundef !128
  %4460 = trunc i8 %4459 to i1
  %4461 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4457, i32 noundef %4458, ptr noundef nonnull align 8 dereferenceable(32) %298, i1 noundef zeroext %4460, i1 noundef zeroext false)
          to label %4462 unwind label %4469

4462:                                             ; preds = %4456
  %4463 = load i32, ptr %290, align 4, !tbaa !16
  %4464 = load i32, ptr %291, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %4463, i32 noundef %4464)
          to label %4465 unwind label %4469

4465:                                             ; preds = %4462
  %4466 = load i32, ptr %290, align 4, !tbaa !16
  %4467 = load i32, ptr %292, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %4466, i32 noundef %4467)
          to label %4468 unwind label %4469

4468:                                             ; preds = %4465
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %298) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %298) #9
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %297) #9
  call void @llvm.lifetime.end.p0(i64 336, ptr %297) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %296) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %296) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %295) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %295) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %294) #9
  call void @llvm.lifetime.end.p0(i64 8, 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 4, ptr %290) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %289) #9
  br label %11526

4469:                                             ; preds = %4465, %4462, %4456
  %4470 = landingpad { ptr, i32 }
          cleanup
  %4471 = extractvalue { ptr, i32 } %4470, 0
  store ptr %4471, ptr %23, align 8
  %4472 = extractvalue { ptr, i32 } %4470, 1
  store i32 %4472, ptr %24, align 4
  br label %4473

4473:                                             ; preds = %4469, %4454, %4429
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %298) #9
  br label %4474

4474:                                             ; preds = %4473, %4417
  call void @llvm.lifetime.end.p0(i64 32, ptr %298) #9
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %297) #9
  br label %4475

4475:                                             ; preds = %4474, %4413
  call void @llvm.lifetime.end.p0(i64 336, ptr %297) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %296) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %296) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %295) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %295) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %294) #9
  call void @llvm.lifetime.end.p0(i64 8, 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 4, ptr %290) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %289) #9
  br label %11527

4476:                                             ; preds = %919
  %4477 = load ptr, ptr %5, align 8, !tbaa !5
  %4478 = getelementptr inbounds i32, ptr %4477, i64 0
  %4479 = load i32, ptr %4478, align 4, !tbaa !16
  %4480 = load ptr, ptr %5, align 8, !tbaa !5
  %4481 = getelementptr inbounds i32, ptr %4480, i64 1
  %4482 = load i32, ptr %4481, align 4, !tbaa !16
  %4483 = load ptr, ptr %5, align 8, !tbaa !5
  %4484 = getelementptr inbounds i32, ptr %4483, i64 2
  %4485 = load i32, ptr %4484, align 4, !tbaa !16
  %4486 = load ptr, ptr %5, align 8, !tbaa !5
  %4487 = getelementptr inbounds i32, ptr %4486, i64 3
  %4488 = load i32, ptr %4487, align 4, !tbaa !16
  %4489 = load i32, ptr %9, align 4, !tbaa !17
  %4490 = load i32, ptr %6, align 4, !tbaa !13
  %4491 = call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %4490)
  %4492 = load i8, ptr %11, align 1, !tbaa !142, !range !127, !noundef !128
  %4493 = trunc i8 %4492 to i1
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4479, i32 noundef %4482, i32 noundef %4485, i32 noundef %4488, ptr noundef @.str.959, i32 noundef %4489, i1 noundef zeroext %4491, i1 noundef zeroext %4493)
  br label %11526

4494:                                             ; preds = %919
  %4495 = load ptr, ptr %5, align 8, !tbaa !5
  %4496 = getelementptr inbounds i32, ptr %4495, i64 0
  %4497 = load i32, ptr %4496, align 4, !tbaa !16
  %4498 = load ptr, ptr %5, align 8, !tbaa !5
  %4499 = getelementptr inbounds i32, ptr %4498, i64 1
  %4500 = load i32, ptr %4499, align 4, !tbaa !16
  %4501 = load ptr, ptr %5, align 8, !tbaa !5
  %4502 = getelementptr inbounds i32, ptr %4501, i64 2
  %4503 = load i32, ptr %4502, align 4, !tbaa !16
  %4504 = load ptr, ptr %5, align 8, !tbaa !5
  %4505 = getelementptr inbounds i32, ptr %4504, i64 3
  %4506 = load i32, ptr %4505, align 4, !tbaa !16
  %4507 = load i32, ptr %10, align 4, !tbaa !17
  %4508 = load i32, ptr %6, align 4, !tbaa !13
  %4509 = call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %4508)
  %4510 = load i8, ptr %11, align 1, !tbaa !142, !range !127, !noundef !128
  %4511 = trunc i8 %4510 to i1
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4497, i32 noundef %4500, i32 noundef %4503, i32 noundef %4506, ptr noundef @.str.959, i32 noundef %4507, i1 noundef zeroext %4509, i1 noundef zeroext %4511)
  br label %11526

4512:                                             ; preds = %919, %919
  %4513 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %4514 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %4513, i32 0, i32 1
  %4515 = load i8, ptr %4514, align 4, !tbaa !210, !range !127, !noundef !128
  %4516 = trunc i8 %4515 to i1
  br i1 %4516, label %4517, label %4529

4517:                                             ; preds = %4512
  %4518 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %4519 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %4518, i32 0, i32 0
  %4520 = load i32, ptr %4519, align 4, !tbaa !207
  %4521 = icmp ult i32 %4520, 310
  br i1 %4521, label %4522, label %4529

4522:                                             ; preds = %4517
  %4523 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %4523, ptr noundef @.str.1389)
          to label %4524 unwind label %4525

4524:                                             ; preds = %4522
  call void @__cxa_throw(ptr %4523, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
  unreachable

4525:                                             ; preds = %4522
  %4526 = landingpad { ptr, i32 }
          cleanup
  %4527 = extractvalue { ptr, i32 } %4526, 0
  store ptr %4527, ptr %23, align 8
  %4528 = extractvalue { ptr, i32 } %4526, 1
  store i32 %4528, ptr %24, align 4
  call void @__cxa_free_exception(ptr %4523) #9
  br label %11527

4529:                                             ; preds = %4517, %4512
  %4530 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %4531 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %4530, i32 0, i32 1
  %4532 = load i8, ptr %4531, align 4, !tbaa !210, !range !127, !noundef !128
  %4533 = trunc i8 %4532 to i1
  br i1 %4533, label %4546, label %4534

4534:                                             ; preds = %4529
  %4535 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %4536 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %4535, i32 0, i32 0
  %4537 = load i32, ptr %4536, align 4, !tbaa !207
  %4538 = icmp ult i32 %4537, 400
  br i1 %4538, label %4539, label %4546

4539:                                             ; preds = %4534
  %4540 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %4540, ptr noundef @.str.1390)
          to label %4541 unwind label %4542

4541:                                             ; preds = %4539
  call void @__cxa_throw(ptr %4540, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
  unreachable

4542:                                             ; preds = %4539
  %4543 = landingpad { ptr, i32 }
          cleanup
  %4544 = extractvalue { ptr, i32 } %4543, 0
  store ptr %4544, ptr %23, align 8
  %4545 = extractvalue { ptr, i32 } %4543, 1
  store i32 %4545, ptr %24, align 4
  call void @__cxa_free_exception(ptr %4540) #9
  br label %11527

4546:                                             ; preds = %4534, %4529
  br label %4547

4547:                                             ; preds = %4546
  call void @llvm.lifetime.start.p0(i64 4, ptr %307) #9
  %4548 = load ptr, ptr %5, align 8, !tbaa !5
  %4549 = getelementptr inbounds i32, ptr %4548, i64 0
  %4550 = load i32, ptr %4549, align 4, !tbaa !16
  store i32 %4550, ptr %307, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %308) #9
  %4551 = load ptr, ptr %5, align 8, !tbaa !5
  %4552 = getelementptr inbounds i32, ptr %4551, i64 1
  %4553 = load i32, ptr %4552, align 4, !tbaa !16
  store i32 %4553, ptr %308, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %309) #9
  %4554 = load ptr, ptr %5, align 8, !tbaa !5
  %4555 = getelementptr inbounds i32, ptr %4554, i64 2
  %4556 = load i32, ptr %4555, align 4, !tbaa !16
  store i32 %4556, ptr %309, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %310) #9
  %4557 = load ptr, ptr %5, align 8, !tbaa !5
  %4558 = getelementptr inbounds i32, ptr %4557, i64 3
  %4559 = load i32, ptr %4558, align 4, !tbaa !16
  store i32 %4559, ptr %310, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %311) #9
  %4560 = load i32, ptr %307, align 4, !tbaa !16
  %4561 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %4560)
  store ptr %4561, ptr %311, align 8, !tbaa !5
  %4562 = load i32, ptr %307, align 4, !tbaa !16
  %4563 = load i32, ptr %308, align 4, !tbaa !16
  %4564 = call noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL39emit_uninitialized_temporary_expressionEjj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4562, i32 noundef %4563)
  call void @llvm.lifetime.start.p0(i64 8, ptr %312) #9
  %4565 = load i32, ptr %6, align 4, !tbaa !13
  %4566 = icmp eq i32 %4565, 149
  %4567 = zext i1 %4566 to i64
  %4568 = select i1 %4566, ptr @.str.495, ptr @.str.509
  store ptr %4568, ptr %312, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %313) #9
  %4569 = load i32, ptr %308, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %313, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4569, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %314) #9
  %4570 = load ptr, ptr %311, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %314, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(336) %4570, i32 noundef 0)
          to label %4571 unwind label %4581

4571:                                             ; preds = %4547
  call void @llvm.lifetime.start.p0(i64 32, ptr %315) #9
  %4572 = load i32, ptr %309, align 4, !tbaa !16
  invoke 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) %885, i32 noundef %4572, i1 noundef zeroext true)
          to label %4573 unwind label %4585

4573:                                             ; preds = %4571
  call void @llvm.lifetime.start.p0(i64 32, ptr %316) #9
  %4574 = load i32, ptr %310, align 4, !tbaa !16
  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) %885, i32 noundef %4574, i1 noundef zeroext true)
          to label %4575 unwind label %4589

4575:                                             ; preds = %4573
  call void @llvm.lifetime.start.p0(i64 32, ptr %317) #9
  %4576 = load i32, ptr %308, align 4, !tbaa !16
  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) %885, i32 noundef %4576, i1 noundef zeroext true)
          to label %4577 unwind label %4593

4577:                                             ; preds = %4575
  call void @llvm.lifetime.start.p0(i64 32, ptr %318) #9
  %4578 = load ptr, ptr %311, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %318, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(336) %4578, i32 noundef 1)
          to label %4579 unwind label %4597

4579:                                             ; preds = %4577
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_RA4_S8_RPS8_SA_S7_RA3_S8_S7_SG_S7_SA_S7_SG_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %313, ptr noundef nonnull align 1 dereferenceable(2) @.str.719, ptr noundef nonnull align 8 dereferenceable(32) %314, ptr noundef nonnull align 1 dereferenceable(4) @.str.335, ptr noundef nonnull align 8 dereferenceable(8) %312, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %315, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %316, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %317, ptr noundef nonnull align 1 dereferenceable(2) @.str.719, ptr noundef nonnull align 8 dereferenceable(32) %318, ptr noundef nonnull align 1 dereferenceable(3) @.str.751)
          to label %4580 unwind label %4601

4580:                                             ; preds = %4579
  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
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %314) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %314) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %313) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %313) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %312) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %311) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %310) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %309) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %308) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %307) #9
  br label %11526

4581:                                             ; preds = %4547
  %4582 = landingpad { ptr, i32 }
          cleanup
  %4583 = extractvalue { ptr, i32 } %4582, 0
  store ptr %4583, ptr %23, align 8
  %4584 = extractvalue { ptr, i32 } %4582, 1
  store i32 %4584, ptr %24, align 4
  br label %4609

4585:                                             ; preds = %4571
  %4586 = landingpad { ptr, i32 }
          cleanup
  %4587 = extractvalue { ptr, i32 } %4586, 0
  store ptr %4587, ptr %23, align 8
  %4588 = extractvalue { ptr, i32 } %4586, 1
  store i32 %4588, ptr %24, align 4
  br label %4608

4589:                                             ; preds = %4573
  %4590 = landingpad { ptr, i32 }
          cleanup
  %4591 = extractvalue { ptr, i32 } %4590, 0
  store ptr %4591, ptr %23, align 8
  %4592 = extractvalue { ptr, i32 } %4590, 1
  store i32 %4592, ptr %24, align 4
  br label %4607

4593:                                             ; preds = %4575
  %4594 = landingpad { ptr, i32 }
          cleanup
  %4595 = extractvalue { ptr, i32 } %4594, 0
  store ptr %4595, ptr %23, align 8
  %4596 = extractvalue { ptr, i32 } %4594, 1
  store i32 %4596, ptr %24, align 4
  br label %4606

4597:                                             ; preds = %4577
  %4598 = landingpad { ptr, i32 }
          cleanup
  %4599 = extractvalue { ptr, i32 } %4598, 0
  store ptr %4599, ptr %23, align 8
  %4600 = extractvalue { ptr, i32 } %4598, 1
  store i32 %4600, ptr %24, align 4
  br label %4605

4601:                                             ; preds = %4579
  %4602 = landingpad { ptr, i32 }
          cleanup
  %4603 = extractvalue { ptr, i32 } %4602, 0
  store ptr %4603, ptr %23, align 8
  %4604 = extractvalue { ptr, i32 } %4602, 1
  store i32 %4604, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %318) #9
  br label %4605

4605:                                             ; preds = %4601, %4597
  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 %4606

4606:                                             ; preds = %4605, %4593
  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 %4607

4607:                                             ; preds = %4606, %4589
  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
  br label %4608

4608:                                             ; preds = %4607, %4585
  call void @llvm.lifetime.end.p0(i64 32, ptr %315) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %314) #9
  br label %4609

4609:                                             ; preds = %4608, %4581
  call void @llvm.lifetime.end.p0(i64 32, ptr %314) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %313) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %313) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %312) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %311) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %310) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %309) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %308) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %307) #9
  br label %11527

4610:                                             ; preds = %919, %919
  %4611 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %4612 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %4611, i32 0, i32 1
  %4613 = load i8, ptr %4612, align 4, !tbaa !210, !range !127, !noundef !128
  %4614 = trunc i8 %4613 to i1
  br i1 %4614, label %4615, label %4627

4615:                                             ; preds = %4610
  %4616 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %4617 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %4616, i32 0, i32 0
  %4618 = load i32, ptr %4617, align 4, !tbaa !207
  %4619 = icmp ult i32 %4618, 310
  br i1 %4619, label %4620, label %4627

4620:                                             ; preds = %4615
  %4621 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %4621, ptr noundef @.str.1389)
          to label %4622 unwind label %4623

4622:                                             ; preds = %4620
  call void @__cxa_throw(ptr %4621, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
  unreachable

4623:                                             ; preds = %4620
  %4624 = landingpad { ptr, i32 }
          cleanup
  %4625 = extractvalue { ptr, i32 } %4624, 0
  store ptr %4625, ptr %23, align 8
  %4626 = extractvalue { ptr, i32 } %4624, 1
  store i32 %4626, ptr %24, align 4
  call void @__cxa_free_exception(ptr %4621) #9
  br label %11527

4627:                                             ; preds = %4615, %4610
  %4628 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %4629 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %4628, i32 0, i32 1
  %4630 = load i8, ptr %4629, align 4, !tbaa !210, !range !127, !noundef !128
  %4631 = trunc i8 %4630 to i1
  br i1 %4631, label %4644, label %4632

4632:                                             ; preds = %4627
  %4633 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %4634 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %4633, i32 0, i32 0
  %4635 = load i32, ptr %4634, align 4, !tbaa !207
  %4636 = icmp ult i32 %4635, 400
  br i1 %4636, label %4637, label %4644

4637:                                             ; preds = %4632
  %4638 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %4638, ptr noundef @.str.1391)
          to label %4639 unwind label %4640

4639:                                             ; preds = %4637
  call void @__cxa_throw(ptr %4638, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
  unreachable

4640:                                             ; preds = %4637
  %4641 = landingpad { ptr, i32 }
          cleanup
  %4642 = extractvalue { ptr, i32 } %4641, 0
  store ptr %4642, ptr %23, align 8
  %4643 = extractvalue { ptr, i32 } %4641, 1
  store i32 %4643, ptr %24, align 4
  call void @__cxa_free_exception(ptr %4638) #9
  br label %11527

4644:                                             ; preds = %4632, %4627
  br label %4645

4645:                                             ; preds = %4644
  call void @llvm.lifetime.start.p0(i64 4, ptr %319) #9
  %4646 = load ptr, ptr %5, align 8, !tbaa !5
  %4647 = getelementptr inbounds i32, ptr %4646, i64 0
  %4648 = load i32, ptr %4647, align 4, !tbaa !16
  store i32 %4648, ptr %319, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %320) #9
  %4649 = load ptr, ptr %5, align 8, !tbaa !5
  %4650 = getelementptr inbounds i32, ptr %4649, i64 1
  %4651 = load i32, ptr %4650, align 4, !tbaa !16
  store i32 %4651, ptr %320, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %321) #9
  %4652 = load ptr, ptr %5, align 8, !tbaa !5
  %4653 = getelementptr inbounds i32, ptr %4652, i64 2
  %4654 = load i32, ptr %4653, align 4, !tbaa !16
  store i32 %4654, ptr %321, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %322) #9
  %4655 = load ptr, ptr %5, align 8, !tbaa !5
  %4656 = getelementptr inbounds i32, ptr %4655, i64 3
  %4657 = load i32, ptr %4656, align 4, !tbaa !16
  store i32 %4657, ptr %322, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %323) #9
  %4658 = load i32, ptr %319, align 4, !tbaa !16
  %4659 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %4658)
  store ptr %4659, ptr %323, align 8, !tbaa !5
  %4660 = load i32, ptr %319, align 4, !tbaa !16
  %4661 = load i32, ptr %320, align 4, !tbaa !16
  %4662 = call noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL39emit_uninitialized_temporary_expressionEjj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4660, i32 noundef %4661)
  call void @llvm.lifetime.start.p0(i64 8, ptr %324) #9
  %4663 = load i32, ptr %6, align 4, !tbaa !13
  %4664 = icmp eq i32 %4663, 151
  br i1 %4664, label %4665, label %4666

4665:                                             ; preds = %4645
  br label %4667

4666:                                             ; preds = %4645
  br label %4667

4667:                                             ; preds = %4666, %4665
  %4668 = phi ptr [ @.str.498, %4665 ], [ @.str.412, %4666 ]
  %4669 = getelementptr inbounds [13 x i8], ptr %4668, i64 0, i64 0
  store ptr %4669, ptr %324, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %325) #9
  %4670 = load i32, ptr %321, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %325, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4670, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %326) #9
  %4671 = load i32, ptr %322, align 4, !tbaa !16
  invoke 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) %885, i32 noundef %4671, i1 noundef zeroext true)
          to label %4672 unwind label %4682

4672:                                             ; preds = %4667
  call void @llvm.lifetime.start.p0(i64 32, ptr %327) #9
  %4673 = load i32, ptr %320, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %327, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4673, i1 noundef zeroext true)
          to label %4674 unwind label %4686

4674:                                             ; preds = %4672
  call void @llvm.lifetime.start.p0(i64 32, ptr %328) #9
  %4675 = load ptr, ptr %323, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %328, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(336) %4675, i32 noundef 1)
          to label %4676 unwind label %4690

4676:                                             ; preds = %4674
  call void @llvm.lifetime.start.p0(i64 32, ptr %329) #9
  %4677 = load i32, ptr %320, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %329, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4677, i1 noundef zeroext true)
          to label %4678 unwind label %4694

4678:                                             ; preds = %4676
  call void @llvm.lifetime.start.p0(i64 32, ptr %330) #9
  %4679 = load ptr, ptr %323, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %330, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(336) %4679, i32 noundef 0)
          to label %4680 unwind label %4698

4680:                                             ; preds = %4678
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRPKcRA2_S2_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_SC_SE_SC_S6_SC_SE_SC_S6_SC_SE_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(8) %324, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %325, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %326, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %327, ptr noundef nonnull align 1 dereferenceable(2) @.str.719, ptr noundef nonnull align 8 dereferenceable(32) %328, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %329, ptr noundef nonnull align 1 dereferenceable(2) @.str.719, ptr noundef nonnull align 8 dereferenceable(32) %330, ptr noundef nonnull align 1 dereferenceable(3) @.str.751)
          to label %4681 unwind label %4702

4681:                                             ; preds = %4680
  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 @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %329) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %329) #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 @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %327) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %327) #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 @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %325) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %325) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %324) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %323) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %322) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %321) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %320) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %319) #9
  br label %11526

4682:                                             ; preds = %4667
  %4683 = landingpad { ptr, i32 }
          cleanup
  %4684 = extractvalue { ptr, i32 } %4683, 0
  store ptr %4684, ptr %23, align 8
  %4685 = extractvalue { ptr, i32 } %4683, 1
  store i32 %4685, ptr %24, align 4
  br label %4710

4686:                                             ; preds = %4672
  %4687 = landingpad { ptr, i32 }
          cleanup
  %4688 = extractvalue { ptr, i32 } %4687, 0
  store ptr %4688, ptr %23, align 8
  %4689 = extractvalue { ptr, i32 } %4687, 1
  store i32 %4689, ptr %24, align 4
  br label %4709

4690:                                             ; preds = %4674
  %4691 = landingpad { ptr, i32 }
          cleanup
  %4692 = extractvalue { ptr, i32 } %4691, 0
  store ptr %4692, ptr %23, align 8
  %4693 = extractvalue { ptr, i32 } %4691, 1
  store i32 %4693, ptr %24, align 4
  br label %4708

4694:                                             ; preds = %4676
  %4695 = landingpad { ptr, i32 }
          cleanup
  %4696 = extractvalue { ptr, i32 } %4695, 0
  store ptr %4696, ptr %23, align 8
  %4697 = extractvalue { ptr, i32 } %4695, 1
  store i32 %4697, ptr %24, align 4
  br label %4707

4698:                                             ; preds = %4678
  %4699 = landingpad { ptr, i32 }
          cleanup
  %4700 = extractvalue { ptr, i32 } %4699, 0
  store ptr %4700, ptr %23, align 8
  %4701 = extractvalue { ptr, i32 } %4699, 1
  store i32 %4701, ptr %24, align 4
  br label %4706

4702:                                             ; preds = %4680
  %4703 = landingpad { ptr, i32 }
          cleanup
  %4704 = extractvalue { ptr, i32 } %4703, 0
  store ptr %4704, ptr %23, align 8
  %4705 = extractvalue { ptr, i32 } %4703, 1
  store i32 %4705, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %330) #9
  br label %4706

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

4707:                                             ; preds = %4706, %4694
  call void @llvm.lifetime.end.p0(i64 32, ptr %329) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %328) #9
  br label %4708

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

4709:                                             ; preds = %4708, %4686
  call void @llvm.lifetime.end.p0(i64 32, ptr %327) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %326) #9
  br label %4710

4710:                                             ; preds = %4709, %4682
  call void @llvm.lifetime.end.p0(i64 32, ptr %326) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %325) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %325) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %324) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %323) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %322) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %321) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %320) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %319) #9
  br label %11527

4711:                                             ; preds = %919
  %4712 = load ptr, ptr %5, align 8, !tbaa !5
  %4713 = getelementptr inbounds i32, ptr %4712, i64 0
  %4714 = load i32, ptr %4713, align 4, !tbaa !16
  %4715 = load ptr, ptr %5, align 8, !tbaa !5
  %4716 = getelementptr inbounds i32, ptr %4715, i64 1
  %4717 = load i32, ptr %4716, align 4, !tbaa !16
  %4718 = load ptr, ptr %5, align 8, !tbaa !5
  %4719 = getelementptr inbounds i32, ptr %4718, i64 2
  %4720 = load i32, ptr %4719, align 4, !tbaa !16
  %4721 = load ptr, ptr %5, align 8, !tbaa !5
  %4722 = getelementptr inbounds i32, ptr %4721, i64 3
  %4723 = load i32, ptr %4722, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4714, i32 noundef %4717, i32 noundef %4720, i32 noundef %4723, ptr noundef @.str.959)
  br label %11526

4724:                                             ; preds = %919
  %4725 = load ptr, ptr %5, align 8, !tbaa !5
  %4726 = getelementptr inbounds i32, ptr %4725, i64 0
  %4727 = load i32, ptr %4726, align 4, !tbaa !16
  %4728 = load ptr, ptr %5, align 8, !tbaa !5
  %4729 = getelementptr inbounds i32, ptr %4728, i64 1
  %4730 = load i32, ptr %4729, align 4, !tbaa !16
  %4731 = load ptr, ptr %5, align 8, !tbaa !5
  %4732 = getelementptr inbounds i32, ptr %4731, i64 2
  %4733 = load i32, ptr %4732, align 4, !tbaa !16
  %4734 = load ptr, ptr %5, align 8, !tbaa !5
  %4735 = getelementptr inbounds i32, ptr %4734, i64 3
  %4736 = load i32, ptr %4735, align 4, !tbaa !16
  %4737 = load i32, ptr %10, align 4, !tbaa !17
  %4738 = load i32, ptr %6, align 4, !tbaa !13
  %4739 = call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %4738)
  %4740 = load i8, ptr %11, align 1, !tbaa !142, !range !127, !noundef !128
  %4741 = trunc i8 %4740 to i1
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4727, i32 noundef %4730, i32 noundef %4733, i32 noundef %4736, ptr noundef @.str.961, i32 noundef %4737, i1 noundef zeroext %4739, i1 noundef zeroext %4741)
  br label %11526

4742:                                             ; preds = %919
  %4743 = load ptr, ptr %5, align 8, !tbaa !5
  %4744 = getelementptr inbounds i32, ptr %4743, i64 0
  %4745 = load i32, ptr %4744, align 4, !tbaa !16
  %4746 = load ptr, ptr %5, align 8, !tbaa !5
  %4747 = getelementptr inbounds i32, ptr %4746, i64 1
  %4748 = load i32, ptr %4747, align 4, !tbaa !16
  %4749 = load ptr, ptr %5, align 8, !tbaa !5
  %4750 = getelementptr inbounds i32, ptr %4749, i64 2
  %4751 = load i32, ptr %4750, align 4, !tbaa !16
  %4752 = load ptr, ptr %5, align 8, !tbaa !5
  %4753 = getelementptr inbounds i32, ptr %4752, i64 3
  %4754 = load i32, ptr %4753, align 4, !tbaa !16
  %4755 = load i32, ptr %9, align 4, !tbaa !17
  %4756 = load i32, ptr %6, align 4, !tbaa !13
  %4757 = call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %4756)
  %4758 = load i8, ptr %11, align 1, !tbaa !142, !range !127, !noundef !128
  %4759 = trunc i8 %4758 to i1
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4745, i32 noundef %4748, i32 noundef %4751, i32 noundef %4754, ptr noundef @.str.961, i32 noundef %4755, i1 noundef zeroext %4757, i1 noundef zeroext %4759)
  br label %11526

4760:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %331) #9
  %4761 = load ptr, ptr %5, align 8, !tbaa !5
  %4762 = getelementptr inbounds i32, ptr %4761, i64 0
  %4763 = load i32, ptr %4762, align 4, !tbaa !16
  %4764 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %4763)
  %4765 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %4764, i32 0, i32 2
  %4766 = load i32, ptr %4765, align 8, !tbaa !148
  store i32 %4766, ptr %331, align 4, !tbaa !17
  %4767 = load ptr, ptr %5, align 8, !tbaa !5
  %4768 = getelementptr inbounds i32, ptr %4767, i64 0
  %4769 = load i32, ptr %4768, align 4, !tbaa !16
  %4770 = load ptr, ptr %5, align 8, !tbaa !5
  %4771 = getelementptr inbounds i32, ptr %4770, i64 1
  %4772 = load i32, ptr %4771, align 4, !tbaa !16
  %4773 = load ptr, ptr %5, align 8, !tbaa !5
  %4774 = getelementptr inbounds i32, ptr %4773, i64 2
  %4775 = load i32, ptr %4774, align 4, !tbaa !16
  %4776 = load ptr, ptr %5, align 8, !tbaa !5
  %4777 = getelementptr inbounds i32, ptr %4776, i64 3
  %4778 = load i32, ptr %4777, align 4, !tbaa !16
  %4779 = load i32, ptr %331, align 4, !tbaa !17
  %4780 = load i32, ptr %6, align 4, !tbaa !13
  %4781 = call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %4780)
  %4782 = load i8, ptr %11, align 1, !tbaa !142, !range !127, !noundef !128
  %4783 = trunc i8 %4782 to i1
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4769, i32 noundef %4772, i32 noundef %4775, i32 noundef %4778, ptr noundef @.str.962, i32 noundef %4779, i1 noundef zeroext %4781, i1 noundef zeroext %4783)
  call void @llvm.lifetime.end.p0(i64 4, ptr %331) #9
  br label %11526

4784:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %332) #9
  %4785 = load ptr, ptr %5, align 8, !tbaa !5
  %4786 = getelementptr inbounds i32, ptr %4785, i64 0
  %4787 = load i32, ptr %4786, align 4, !tbaa !16
  %4788 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %4787)
  %4789 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %4788, i32 0, i32 2
  %4790 = load i32, ptr %4789, align 8, !tbaa !148
  store i32 %4790, ptr %332, align 4, !tbaa !17
  %4791 = load ptr, ptr %5, align 8, !tbaa !5
  %4792 = getelementptr inbounds i32, ptr %4791, i64 0
  %4793 = load i32, ptr %4792, align 4, !tbaa !16
  %4794 = load ptr, ptr %5, align 8, !tbaa !5
  %4795 = getelementptr inbounds i32, ptr %4794, i64 1
  %4796 = load i32, ptr %4795, align 4, !tbaa !16
  %4797 = load ptr, ptr %5, align 8, !tbaa !5
  %4798 = getelementptr inbounds i32, ptr %4797, i64 2
  %4799 = load i32, ptr %4798, align 4, !tbaa !16
  %4800 = load ptr, ptr %5, align 8, !tbaa !5
  %4801 = getelementptr inbounds i32, ptr %4800, i64 3
  %4802 = load i32, ptr %4801, align 4, !tbaa !16
  %4803 = load i32, ptr %332, align 4, !tbaa !17
  %4804 = load i32, ptr %6, align 4, !tbaa !13
  %4805 = call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %4804)
  %4806 = load i8, ptr %11, align 1, !tbaa !142, !range !127, !noundef !128
  %4807 = trunc i8 %4806 to i1
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4793, i32 noundef %4796, i32 noundef %4799, i32 noundef %4802, ptr noundef @.str.963, i32 noundef %4803, i1 noundef zeroext %4805, i1 noundef zeroext %4807)
  call void @llvm.lifetime.end.p0(i64 4, ptr %332) #9
  br label %11526

4808:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %333) #9
  %4809 = load ptr, ptr %5, align 8, !tbaa !5
  %4810 = getelementptr inbounds i32, ptr %4809, i64 0
  %4811 = load i32, ptr %4810, align 4, !tbaa !16
  %4812 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %4811)
  %4813 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %4812, i32 0, i32 2
  %4814 = load i32, ptr %4813, align 8, !tbaa !148
  store i32 %4814, ptr %333, align 4, !tbaa !17
  %4815 = load ptr, ptr %5, align 8, !tbaa !5
  %4816 = getelementptr inbounds i32, ptr %4815, i64 0
  %4817 = load i32, ptr %4816, align 4, !tbaa !16
  %4818 = load ptr, ptr %5, align 8, !tbaa !5
  %4819 = getelementptr inbounds i32, ptr %4818, i64 1
  %4820 = load i32, ptr %4819, align 4, !tbaa !16
  %4821 = load ptr, ptr %5, align 8, !tbaa !5
  %4822 = getelementptr inbounds i32, ptr %4821, i64 2
  %4823 = load i32, ptr %4822, align 4, !tbaa !16
  %4824 = load ptr, ptr %5, align 8, !tbaa !5
  %4825 = getelementptr inbounds i32, ptr %4824, i64 3
  %4826 = load i32, ptr %4825, align 4, !tbaa !16
  %4827 = load i32, ptr %333, align 4, !tbaa !17
  %4828 = load i32, ptr %6, align 4, !tbaa !13
  %4829 = call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %4828)
  %4830 = load i8, ptr %11, align 1, !tbaa !142, !range !127, !noundef !128
  %4831 = trunc i8 %4830 to i1
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4817, i32 noundef %4820, i32 noundef %4823, i32 noundef %4826, ptr noundef @.str.964, i32 noundef %4827, i1 noundef zeroext %4829, i1 noundef zeroext %4831)
  call void @llvm.lifetime.end.p0(i64 4, ptr %333) #9
  br label %11526

4832:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %334) #9
  %4833 = load ptr, ptr %5, align 8, !tbaa !5
  %4834 = getelementptr inbounds i32, ptr %4833, i64 0
  %4835 = load i32, ptr %4834, align 4, !tbaa !16
  %4836 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %4835)
  %4837 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %4836, i32 0, i32 2
  %4838 = load i32, ptr %4837, align 8, !tbaa !148
  store i32 %4838, ptr %334, align 4, !tbaa !17
  %4839 = load ptr, ptr %5, align 8, !tbaa !5
  %4840 = getelementptr inbounds i32, ptr %4839, i64 0
  %4841 = load i32, ptr %4840, align 4, !tbaa !16
  %4842 = load ptr, ptr %5, align 8, !tbaa !5
  %4843 = getelementptr inbounds i32, ptr %4842, i64 1
  %4844 = load i32, ptr %4843, align 4, !tbaa !16
  %4845 = load ptr, ptr %5, align 8, !tbaa !5
  %4846 = getelementptr inbounds i32, ptr %4845, i64 2
  %4847 = load i32, ptr %4846, align 4, !tbaa !16
  %4848 = load ptr, ptr %5, align 8, !tbaa !5
  %4849 = getelementptr inbounds i32, ptr %4848, i64 3
  %4850 = load i32, ptr %4849, align 4, !tbaa !16
  %4851 = load i32, ptr %334, align 4, !tbaa !17
  %4852 = load i32, ptr %6, align 4, !tbaa !13
  %4853 = call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %4852)
  %4854 = load i8, ptr %11, align 1, !tbaa !142, !range !127, !noundef !128
  %4855 = trunc i8 %4854 to i1
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4841, i32 noundef %4844, i32 noundef %4847, i32 noundef %4850, ptr noundef @.str.965, i32 noundef %4851, i1 noundef zeroext %4853, i1 noundef zeroext %4855)
  call void @llvm.lifetime.end.p0(i64 4, ptr %334) #9
  br label %11526

4856:                                             ; preds = %919
  %4857 = load i8, ptr %11, align 1, !tbaa !142, !range !127, !noundef !128
  %4858 = trunc i8 %4857 to i1
  br i1 %4858, label %4868, label %4859

4859:                                             ; preds = %4856
  %4860 = load ptr, ptr %5, align 8, !tbaa !5
  %4861 = getelementptr inbounds i32, ptr %4860, i64 2
  %4862 = load i32, ptr %4861, align 4, !tbaa !16
  %4863 = call noundef i32 @_ZNK11spirv_cross8Compiler18expression_type_idEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %4862)
  %4864 = load ptr, ptr %5, align 8, !tbaa !5
  %4865 = getelementptr inbounds i32, ptr %4864, i64 0
  %4866 = load i32, ptr %4865, align 4, !tbaa !16
  %4867 = icmp ne i32 %4863, %4866
  br i1 %4867, label %4868, label %4878

4868:                                             ; preds = %4859, %4856
  %4869 = load ptr, ptr %5, align 8, !tbaa !5
  %4870 = getelementptr inbounds i32, ptr %4869, i64 0
  %4871 = load i32, ptr %4870, align 4, !tbaa !16
  %4872 = load ptr, ptr %5, align 8, !tbaa !5
  %4873 = getelementptr inbounds i32, ptr %4872, i64 1
  %4874 = load i32, ptr %4873, align 4, !tbaa !16
  %4875 = load ptr, ptr %5, align 8, !tbaa !5
  %4876 = getelementptr inbounds i32, ptr %4875, i64 2
  %4877 = load i32, ptr %4876, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_op_castEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4871, i32 noundef %4874, i32 noundef %4877, ptr noundef @.str.956)
  br label %4888

4878:                                             ; preds = %4859
  %4879 = load ptr, ptr %5, align 8, !tbaa !5
  %4880 = getelementptr inbounds i32, ptr %4879, i64 0
  %4881 = load i32, ptr %4880, align 4, !tbaa !16
  %4882 = load ptr, ptr %5, align 8, !tbaa !5
  %4883 = getelementptr inbounds i32, ptr %4882, i64 1
  %4884 = load i32, ptr %4883, align 4, !tbaa !16
  %4885 = load ptr, ptr %5, align 8, !tbaa !5
  %4886 = getelementptr inbounds i32, ptr %4885, i64 2
  %4887 = load i32, ptr %4886, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL13emit_unary_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4881, i32 noundef %4884, i32 noundef %4887, ptr noundef @.str.956)
  br label %4888

4888:                                             ; preds = %4878, %4868
  br label %11526

4889:                                             ; preds = %919
  %4890 = load ptr, ptr %5, align 8, !tbaa !5
  %4891 = getelementptr inbounds i32, ptr %4890, i64 0
  %4892 = load i32, ptr %4891, align 4, !tbaa !16
  %4893 = load ptr, ptr %5, align 8, !tbaa !5
  %4894 = getelementptr inbounds i32, ptr %4893, i64 1
  %4895 = load i32, ptr %4894, align 4, !tbaa !16
  %4896 = load ptr, ptr %5, align 8, !tbaa !5
  %4897 = getelementptr inbounds i32, ptr %4896, i64 2
  %4898 = load i32, ptr %4897, align 4, !tbaa !16
  %4899 = load ptr, ptr %5, align 8, !tbaa !5
  %4900 = getelementptr inbounds i32, ptr %4899, i64 3
  %4901 = load i32, ptr %4900, align 4, !tbaa !16
  %4902 = load i32, ptr %10, align 4, !tbaa !17
  %4903 = load i32, ptr %6, align 4, !tbaa !13
  %4904 = call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %4903)
  %4905 = load i8, ptr %11, align 1, !tbaa !142, !range !127, !noundef !128
  %4906 = trunc i8 %4905 to i1
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4892, i32 noundef %4895, i32 noundef %4898, i32 noundef %4901, ptr noundef @.str.960, i32 noundef %4902, i1 noundef zeroext %4904, i1 noundef zeroext %4906)
  br label %11526

4907:                                             ; preds = %919
  %4908 = load ptr, ptr %5, align 8, !tbaa !5
  %4909 = getelementptr inbounds i32, ptr %4908, i64 0
  %4910 = load i32, ptr %4909, align 4, !tbaa !16
  %4911 = load ptr, ptr %5, align 8, !tbaa !5
  %4912 = getelementptr inbounds i32, ptr %4911, i64 1
  %4913 = load i32, ptr %4912, align 4, !tbaa !16
  %4914 = load ptr, ptr %5, align 8, !tbaa !5
  %4915 = getelementptr inbounds i32, ptr %4914, i64 2
  %4916 = load i32, ptr %4915, align 4, !tbaa !16
  %4917 = load ptr, ptr %5, align 8, !tbaa !5
  %4918 = getelementptr inbounds i32, ptr %4917, i64 3
  %4919 = load i32, ptr %4918, align 4, !tbaa !16
  %4920 = load i32, ptr %9, align 4, !tbaa !17
  %4921 = load i32, ptr %6, align 4, !tbaa !13
  %4922 = call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %4921)
  %4923 = load i8, ptr %11, align 1, !tbaa !142, !range !127, !noundef !128
  %4924 = trunc i8 %4923 to i1
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4910, i32 noundef %4913, i32 noundef %4916, i32 noundef %4919, ptr noundef @.str.960, i32 noundef %4920, i1 noundef zeroext %4922, i1 noundef zeroext %4924)
  br label %11526

4925:                                             ; preds = %919
  %4926 = load ptr, ptr %5, align 8, !tbaa !5
  %4927 = getelementptr inbounds i32, ptr %4926, i64 0
  %4928 = load i32, ptr %4927, align 4, !tbaa !16
  %4929 = load ptr, ptr %5, align 8, !tbaa !5
  %4930 = getelementptr inbounds i32, ptr %4929, i64 1
  %4931 = load i32, ptr %4930, align 4, !tbaa !16
  %4932 = load ptr, ptr %5, align 8, !tbaa !5
  %4933 = getelementptr inbounds i32, ptr %4932, i64 2
  %4934 = load i32, ptr %4933, align 4, !tbaa !16
  %4935 = load ptr, ptr %5, align 8, !tbaa !5
  %4936 = getelementptr inbounds i32, ptr %4935, i64 3
  %4937 = load i32, ptr %4936, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4928, i32 noundef %4931, i32 noundef %4934, i32 noundef %4937, ptr noundef @.str.437)
  br label %11526

4938:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %335) #9
  %4939 = load ptr, ptr %5, align 8, !tbaa !5
  %4940 = getelementptr inbounds i32, ptr %4939, i64 0
  %4941 = load i32, ptr %4940, align 4, !tbaa !16
  store i32 %4941, ptr %335, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %336) #9
  %4942 = load ptr, ptr %5, align 8, !tbaa !5
  %4943 = getelementptr inbounds i32, ptr %4942, i64 1
  %4944 = load i32, ptr %4943, align 4, !tbaa !16
  store i32 %4944, ptr %336, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %337) #9
  %4945 = load ptr, ptr %5, align 8, !tbaa !5
  %4946 = getelementptr inbounds i32, ptr %4945, i64 2
  %4947 = load i32, ptr %4946, align 4, !tbaa !16
  store i32 %4947, ptr %337, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %338) #9
  %4948 = load ptr, ptr %5, align 8, !tbaa !5
  %4949 = getelementptr inbounds i32, ptr %4948, i64 3
  %4950 = load i32, ptr %4949, align 4, !tbaa !16
  store i32 %4950, ptr %338, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 1, ptr %339) #9
  %4951 = load i32, ptr %337, align 4, !tbaa !16
  %4952 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4951)
  br i1 %4952, label %4953, label %4956

4953:                                             ; preds = %4938
  %4954 = load i32, ptr %338, align 4, !tbaa !16
  %4955 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4954)
  br label %4956

4956:                                             ; preds = %4953, %4938
  %4957 = phi i1 [ false, %4938 ], [ %4955, %4953 ]
  %4958 = zext i1 %4957 to i8
  store i8 %4958, ptr %339, align 1, !tbaa !142
  call void @llvm.lifetime.start.p0(i64 32, ptr %340) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %340) #9
  %4959 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %885)
          to label %4960 unwind label %4972

4960:                                             ; preds = %4956
  br i1 %4959, label %5000, label %4961

4961:                                             ; preds = %4960
  call void @llvm.lifetime.start.p0(i64 32, ptr %341) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %342) #9
  %4962 = load i32, ptr %337, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %342, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4962, i1 noundef zeroext true)
          to label %4963 unwind label %4976

4963:                                             ; preds = %4961
  call void @llvm.lifetime.start.p0(i64 32, ptr %343) #9
  %4964 = load i32, ptr %338, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %343, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4964, i1 noundef zeroext true)
          to label %4965 unwind label %4980

4965:                                             ; preds = %4963
  call void @llvm.lifetime.start.p0(i64 32, ptr %344) #9
  %4966 = load i32, ptr %337, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %344, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4966, i1 noundef zeroext true)
          to label %4967 unwind label %4984

4967:                                             ; preds = %4965
  call void @llvm.lifetime.start.p0(i64 32, ptr %345) #9
  %4968 = load i32, ptr %338, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %345, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %4968, i1 noundef zeroext true)
          to label %4969 unwind label %4988

4969:                                             ; preds = %4967
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS6_S9_RA7_S7_S6_S9_S6_RA2_S7_EEES6_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(4) @.str.975, ptr noundef nonnull align 8 dereferenceable(32) %343, ptr noundef nonnull align 1 dereferenceable(4) @.str.976, ptr noundef nonnull align 1 dereferenceable(7) @.str.1392, ptr noundef nonnull align 8 dereferenceable(32) %344, ptr noundef nonnull align 1 dereferenceable(4) @.str.977, ptr noundef nonnull align 8 dereferenceable(32) %345, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %4970 unwind label %4992

4970:                                             ; preds = %4969
  %4971 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %340, ptr noundef nonnull align 8 dereferenceable(32) %341) #9
  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) %345) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %345) #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 @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %343) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %343) #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 %5070

4972:                                             ; preds = %5079, %5076, %5070, %4956
  %4973 = landingpad { ptr, i32 }
          cleanup
  %4974 = extractvalue { ptr, i32 } %4973, 0
  store ptr %4974, ptr %23, align 8
  %4975 = extractvalue { ptr, i32 } %4973, 1
  store i32 %4975, ptr %24, align 4
  br label %5083

4976:                                             ; preds = %4961
  %4977 = landingpad { ptr, i32 }
          cleanup
  %4978 = extractvalue { ptr, i32 } %4977, 0
  store ptr %4978, ptr %23, align 8
  %4979 = extractvalue { ptr, i32 } %4977, 1
  store i32 %4979, ptr %24, align 4
  br label %4999

4980:                                             ; preds = %4963
  %4981 = landingpad { ptr, i32 }
          cleanup
  %4982 = extractvalue { ptr, i32 } %4981, 0
  store ptr %4982, ptr %23, align 8
  %4983 = extractvalue { ptr, i32 } %4981, 1
  store i32 %4983, ptr %24, align 4
  br label %4998

4984:                                             ; preds = %4965
  %4985 = landingpad { ptr, i32 }
          cleanup
  %4986 = extractvalue { ptr, i32 } %4985, 0
  store ptr %4986, ptr %23, align 8
  %4987 = extractvalue { ptr, i32 } %4985, 1
  store i32 %4987, ptr %24, align 4
  br label %4997

4988:                                             ; preds = %4967
  %4989 = landingpad { ptr, i32 }
          cleanup
  %4990 = extractvalue { ptr, i32 } %4989, 0
  store ptr %4990, ptr %23, align 8
  %4991 = extractvalue { ptr, i32 } %4989, 1
  store i32 %4991, ptr %24, align 4
  br label %4996

4992:                                             ; preds = %4969
  %4993 = landingpad { ptr, i32 }
          cleanup
  %4994 = extractvalue { ptr, i32 } %4993, 0
  store ptr %4994, ptr %23, align 8
  %4995 = extractvalue { ptr, i32 } %4993, 1
  store i32 %4995, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %345) #9
  br label %4996

4996:                                             ; preds = %4992, %4988
  call void @llvm.lifetime.end.p0(i64 32, ptr %345) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %344) #9
  br label %4997

4997:                                             ; preds = %4996, %4984
  call void @llvm.lifetime.end.p0(i64 32, ptr %344) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %343) #9
  br label %4998

4998:                                             ; preds = %4997, %4980
  call void @llvm.lifetime.end.p0(i64 32, ptr %343) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %342) #9
  br label %4999

4999:                                             ; preds = %4998, %4976
  call void @llvm.lifetime.end.p0(i64 32, ptr %342) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %341) #9
  br label %5083

5000:                                             ; preds = %4960
  call void @llvm.lifetime.start.p0(i64 8, ptr %346) #9
  %5001 = load i32, ptr %337, align 4, !tbaa !16
  %5002 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %5001)
          to label %5003 unwind label %5026

5003:                                             ; preds = %5000
  store ptr %5002, ptr %346, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 336, ptr %347) #9
  %5004 = load ptr, ptr %346, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %347, ptr noundef nonnull align 8 dereferenceable(336) %5004)
          to label %5005 unwind label %5030

5005:                                             ; preds = %5003
  %5006 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %347, i32 0, i32 2
  store i32 7, ptr %5006, align 8, !tbaa !148
  call void @llvm.lifetime.start.p0(i64 32, ptr %348) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %349) #9
  %5007 = load i32, ptr %337, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %349, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5007, i1 noundef zeroext true)
          to label %5008 unwind label %5034

5008:                                             ; preds = %5005
  call void @llvm.lifetime.start.p0(i64 32, ptr %350) #9
  %5009 = load i32, ptr %338, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %350, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5009, i1 noundef zeroext true)
          to label %5010 unwind label %5038

5010:                                             ; preds = %5008
  call void @llvm.lifetime.start.p0(i64 32, ptr %351) #9
  %5011 = load ptr, ptr %346, align 8, !tbaa !5
  %5012 = load ptr, ptr %885, align 8, !tbaa !145
  %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 %351, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(336) %5011, i32 noundef 0)
          to label %5015 unwind label %5042

5015:                                             ; preds = %5010
  call void @llvm.lifetime.start.p0(i64 32, ptr %352) #9
  %5016 = load ptr, ptr %885, align 8, !tbaa !145
  %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 %352, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(336) %347, i32 noundef 0)
          to label %5019 unwind label %5046

5019:                                             ; preds = %5015
  call void @llvm.lifetime.start.p0(i64 32, ptr %353) #9
  %5020 = load i32, ptr %337, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %353, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5020, i1 noundef zeroext true)
          to label %5021 unwind label %5050

5021:                                             ; preds = %5019
  call void @llvm.lifetime.start.p0(i64 32, ptr %354) #9
  %5022 = load i32, ptr %338, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %354, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5022, i1 noundef zeroext true)
          to label %5023 unwind label %5054

5023:                                             ; preds = %5021
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS6_S9_S6_RA2_S7_S6_SB_S6_S9_S6_RA3_S7_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %348, ptr noundef nonnull align 8 dereferenceable(32) %349, ptr noundef nonnull align 1 dereferenceable(4) @.str.975, ptr noundef nonnull align 8 dereferenceable(32) %350, ptr noundef nonnull align 1 dereferenceable(4) @.str.976, ptr noundef nonnull align 8 dereferenceable(32) %351, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %352, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %353, ptr noundef nonnull align 1 dereferenceable(4) @.str.977, ptr noundef nonnull align 8 dereferenceable(32) %354, ptr noundef nonnull align 1 dereferenceable(3) @.str.1016)
          to label %5024 unwind label %5058

5024:                                             ; preds = %5023
  %5025 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %340, ptr noundef nonnull align 8 dereferenceable(32) %348) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %348) #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 @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %353) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %353) #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 @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %351) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %351) #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 @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %349) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %349) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %348) #9
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %347) #9
  call void @llvm.lifetime.end.p0(i64 336, ptr %347) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %346) #9
  br label %5070

5026:                                             ; preds = %5000
  %5027 = landingpad { ptr, i32 }
          cleanup
  %5028 = extractvalue { ptr, i32 } %5027, 0
  store ptr %5028, ptr %23, align 8
  %5029 = extractvalue { ptr, i32 } %5027, 1
  store i32 %5029, ptr %24, align 4
  br label %5069

5030:                                             ; preds = %5003
  %5031 = landingpad { ptr, i32 }
          cleanup
  %5032 = extractvalue { ptr, i32 } %5031, 0
  store ptr %5032, ptr %23, align 8
  %5033 = extractvalue { ptr, i32 } %5031, 1
  store i32 %5033, ptr %24, align 4
  br label %5068

5034:                                             ; preds = %5005
  %5035 = landingpad { ptr, i32 }
          cleanup
  %5036 = extractvalue { ptr, i32 } %5035, 0
  store ptr %5036, ptr %23, align 8
  %5037 = extractvalue { ptr, i32 } %5035, 1
  store i32 %5037, ptr %24, align 4
  br label %5067

5038:                                             ; preds = %5008
  %5039 = landingpad { ptr, i32 }
          cleanup
  %5040 = extractvalue { ptr, i32 } %5039, 0
  store ptr %5040, ptr %23, align 8
  %5041 = extractvalue { ptr, i32 } %5039, 1
  store i32 %5041, ptr %24, align 4
  br label %5066

5042:                                             ; preds = %5010
  %5043 = landingpad { ptr, i32 }
          cleanup
  %5044 = extractvalue { ptr, i32 } %5043, 0
  store ptr %5044, ptr %23, align 8
  %5045 = extractvalue { ptr, i32 } %5043, 1
  store i32 %5045, ptr %24, align 4
  br label %5065

5046:                                             ; preds = %5015
  %5047 = landingpad { ptr, i32 }
          cleanup
  %5048 = extractvalue { ptr, i32 } %5047, 0
  store ptr %5048, ptr %23, align 8
  %5049 = extractvalue { ptr, i32 } %5047, 1
  store i32 %5049, ptr %24, align 4
  br label %5064

5050:                                             ; preds = %5019
  %5051 = landingpad { ptr, i32 }
          cleanup
  %5052 = extractvalue { ptr, i32 } %5051, 0
  store ptr %5052, ptr %23, align 8
  %5053 = extractvalue { ptr, i32 } %5051, 1
  store i32 %5053, ptr %24, align 4
  br label %5063

5054:                                             ; preds = %5021
  %5055 = landingpad { ptr, i32 }
          cleanup
  %5056 = extractvalue { ptr, i32 } %5055, 0
  store ptr %5056, ptr %23, align 8
  %5057 = extractvalue { ptr, i32 } %5055, 1
  store i32 %5057, ptr %24, align 4
  br label %5062

5058:                                             ; preds = %5023
  %5059 = landingpad { ptr, i32 }
          cleanup
  %5060 = extractvalue { ptr, i32 } %5059, 0
  store ptr %5060, ptr %23, align 8
  %5061 = extractvalue { ptr, i32 } %5059, 1
  store i32 %5061, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %354) #9
  br label %5062

5062:                                             ; preds = %5058, %5054
  call void @llvm.lifetime.end.p0(i64 32, ptr %354) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %353) #9
  br label %5063

5063:                                             ; preds = %5062, %5050
  call void @llvm.lifetime.end.p0(i64 32, ptr %353) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %352) #9
  br label %5064

5064:                                             ; preds = %5063, %5046
  call void @llvm.lifetime.end.p0(i64 32, ptr %352) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %351) #9
  br label %5065

5065:                                             ; preds = %5064, %5042
  call void @llvm.lifetime.end.p0(i64 32, ptr %351) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %350) #9
  br label %5066

5066:                                             ; preds = %5065, %5038
  call void @llvm.lifetime.end.p0(i64 32, ptr %350) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %349) #9
  br label %5067

5067:                                             ; preds = %5066, %5034
  call void @llvm.lifetime.end.p0(i64 32, ptr %349) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %348) #9
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %347) #9
  br label %5068

5068:                                             ; preds = %5067, %5030
  call void @llvm.lifetime.end.p0(i64 336, ptr %347) #9
  br label %5069

5069:                                             ; preds = %5068, %5026
  call void @llvm.lifetime.end.p0(i64 8, ptr %346) #9
  br label %5083

5070:                                             ; preds = %5024, %4970
  %5071 = load i32, ptr %335, align 4, !tbaa !16
  %5072 = load i32, ptr %336, align 4, !tbaa !16
  %5073 = load i8, ptr %339, align 1, !tbaa !142, !range !127, !noundef !128
  %5074 = trunc i8 %5073 to i1
  %5075 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5071, i32 noundef %5072, ptr noundef nonnull align 8 dereferenceable(32) %340, i1 noundef zeroext %5074, i1 noundef zeroext false)
          to label %5076 unwind label %4972

5076:                                             ; preds = %5070
  %5077 = load i32, ptr %336, align 4, !tbaa !16
  %5078 = load i32, ptr %337, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %5077, i32 noundef %5078)
          to label %5079 unwind label %4972

5079:                                             ; preds = %5076
  %5080 = load i32, ptr %336, align 4, !tbaa !16
  %5081 = load i32, ptr %338, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %5080, i32 noundef %5081)
          to label %5082 unwind label %4972

5082:                                             ; preds = %5079
  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 1, ptr %339) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %338) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %337) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %336) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %335) #9
  br label %11526

5083:                                             ; preds = %5069, %4999, %4972
  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 1, ptr %339) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %338) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %337) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %336) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %335) #9
  br label %11527

5084:                                             ; preds = %919
  %5085 = load ptr, ptr %5, align 8, !tbaa !5
  %5086 = getelementptr inbounds i32, ptr %5085, i64 0
  %5087 = load i32, ptr %5086, align 4, !tbaa !16
  %5088 = load ptr, ptr %5, align 8, !tbaa !5
  %5089 = getelementptr inbounds i32, ptr %5088, i64 1
  %5090 = load i32, ptr %5089, align 4, !tbaa !16
  %5091 = load ptr, ptr %5, align 8, !tbaa !5
  %5092 = getelementptr inbounds i32, ptr %5091, i64 2
  %5093 = load i32, ptr %5092, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5087, i32 noundef %5090, i32 noundef %5093, ptr noundef @.str.344)
  br label %11526

5094:                                             ; preds = %919
  %5095 = load ptr, ptr %5, align 8, !tbaa !5
  %5096 = getelementptr inbounds i32, ptr %5095, i64 0
  %5097 = load i32, ptr %5096, align 4, !tbaa !16
  %5098 = load ptr, ptr %5, align 8, !tbaa !5
  %5099 = getelementptr inbounds i32, ptr %5098, i64 1
  %5100 = load i32, ptr %5099, align 4, !tbaa !16
  %5101 = load ptr, ptr %5, align 8, !tbaa !5
  %5102 = getelementptr inbounds i32, ptr %5101, i64 2
  %5103 = load i32, ptr %5102, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5097, i32 noundef %5100, i32 noundef %5103, ptr noundef @.str.343)
  br label %11526

5104:                                             ; preds = %919
  %5105 = load ptr, ptr %5, align 8, !tbaa !5
  %5106 = getelementptr inbounds i32, ptr %5105, i64 0
  %5107 = load i32, ptr %5106, align 4, !tbaa !16
  %5108 = load ptr, ptr %5, align 8, !tbaa !5
  %5109 = getelementptr inbounds i32, ptr %5108, i64 1
  %5110 = load i32, ptr %5109, align 4, !tbaa !16
  %5111 = load ptr, ptr %5, align 8, !tbaa !5
  %5112 = getelementptr inbounds i32, ptr %5111, i64 4
  %5113 = load i32, ptr %5112, align 4, !tbaa !16
  %5114 = load ptr, ptr %5, align 8, !tbaa !5
  %5115 = getelementptr inbounds i32, ptr %5114, i64 3
  %5116 = load i32, ptr %5115, align 4, !tbaa !16
  %5117 = load ptr, ptr %5, align 8, !tbaa !5
  %5118 = getelementptr inbounds i32, ptr %5117, i64 2
  %5119 = load i32, ptr %5118, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL11emit_mix_opEjjjjj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5107, i32 noundef %5110, i32 noundef %5113, i32 noundef %5116, i32 noundef %5119)
  br label %11526

5120:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %355) #9
  %5121 = load ptr, ptr %5, align 8, !tbaa !5
  %5122 = getelementptr inbounds i32, ptr %5121, i64 0
  %5123 = load i32, ptr %5122, align 4, !tbaa !16
  store i32 %5123, ptr %355, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %356) #9
  %5124 = load ptr, ptr %5, align 8, !tbaa !5
  %5125 = getelementptr inbounds i32, ptr %5124, i64 1
  %5126 = load i32, ptr %5125, align 4, !tbaa !16
  store i32 %5126, ptr %356, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %357) #9
  %5127 = load i32, ptr %355, align 4, !tbaa !16
  %5128 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %5127)
  store ptr %5128, ptr %357, align 8, !tbaa !5
  %5129 = load ptr, ptr %357, align 8, !tbaa !5
  %5130 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %5129, i32 0, i32 4
  %5131 = load i32, ptr %5130, align 8, !tbaa !129
  %5132 = icmp ugt i32 %5131, 1
  br i1 %5132, label %5133, label %5142

5133:                                             ; preds = %5120
  %5134 = load i32, ptr %355, align 4, !tbaa !16
  %5135 = load i32, ptr %356, align 4, !tbaa !16
  %5136 = load ptr, ptr %5, align 8, !tbaa !5
  %5137 = getelementptr inbounds i32, ptr %5136, i64 2
  %5138 = load i32, ptr %5137, align 4, !tbaa !16
  %5139 = load ptr, ptr %5, align 8, !tbaa !5
  %5140 = getelementptr inbounds i32, ptr %5139, i64 3
  %5141 = load i32, ptr %5140, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL23emit_unrolled_binary_opEjjjjPKcbNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5134, i32 noundef %5135, i32 noundef %5138, i32 noundef %5141, ptr noundef @.str.966, i1 noundef zeroext false, i32 noundef 0)
  br label %5155

5142:                                             ; preds = %5120
  %5143 = load ptr, ptr %5, align 8, !tbaa !5
  %5144 = getelementptr inbounds i32, ptr %5143, i64 0
  %5145 = load i32, ptr %5144, align 4, !tbaa !16
  %5146 = load ptr, ptr %5, align 8, !tbaa !5
  %5147 = getelementptr inbounds i32, ptr %5146, i64 1
  %5148 = load i32, ptr %5147, align 4, !tbaa !16
  %5149 = load ptr, ptr %5, align 8, !tbaa !5
  %5150 = getelementptr inbounds i32, ptr %5149, i64 2
  %5151 = load i32, ptr %5150, align 4, !tbaa !16
  %5152 = load ptr, ptr %5, align 8, !tbaa !5
  %5153 = getelementptr inbounds i32, ptr %5152, i64 3
  %5154 = load i32, ptr %5153, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5145, i32 noundef %5148, i32 noundef %5151, i32 noundef %5154, ptr noundef @.str.966)
  br label %5155

5155:                                             ; preds = %5142, %5133
  call void @llvm.lifetime.end.p0(i64 8, ptr %357) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %356) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %355) #9
  br label %11526

5156:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %358) #9
  %5157 = load ptr, ptr %5, align 8, !tbaa !5
  %5158 = getelementptr inbounds i32, ptr %5157, i64 0
  %5159 = load i32, ptr %5158, align 4, !tbaa !16
  store i32 %5159, ptr %358, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %359) #9
  %5160 = load ptr, ptr %5, align 8, !tbaa !5
  %5161 = getelementptr inbounds i32, ptr %5160, i64 1
  %5162 = load i32, ptr %5161, align 4, !tbaa !16
  store i32 %5162, ptr %359, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %360) #9
  %5163 = load i32, ptr %358, align 4, !tbaa !16
  %5164 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %5163)
  store ptr %5164, ptr %360, align 8, !tbaa !5
  %5165 = load ptr, ptr %360, align 8, !tbaa !5
  %5166 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %5165, i32 0, i32 4
  %5167 = load i32, ptr %5166, align 8, !tbaa !129
  %5168 = icmp ugt i32 %5167, 1
  br i1 %5168, label %5169, label %5178

5169:                                             ; preds = %5156
  %5170 = load i32, ptr %358, align 4, !tbaa !16
  %5171 = load i32, ptr %359, align 4, !tbaa !16
  %5172 = load ptr, ptr %5, align 8, !tbaa !5
  %5173 = getelementptr inbounds i32, ptr %5172, i64 2
  %5174 = load i32, ptr %5173, align 4, !tbaa !16
  %5175 = load ptr, ptr %5, align 8, !tbaa !5
  %5176 = getelementptr inbounds i32, ptr %5175, i64 3
  %5177 = load i32, ptr %5176, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL23emit_unrolled_binary_opEjjjjPKcbNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5170, i32 noundef %5171, i32 noundef %5174, i32 noundef %5177, ptr noundef @.str.967, i1 noundef zeroext false, i32 noundef 0)
  br label %5191

5178:                                             ; preds = %5156
  %5179 = load ptr, ptr %5, align 8, !tbaa !5
  %5180 = getelementptr inbounds i32, ptr %5179, i64 0
  %5181 = load i32, ptr %5180, align 4, !tbaa !16
  %5182 = load ptr, ptr %5, align 8, !tbaa !5
  %5183 = getelementptr inbounds i32, ptr %5182, i64 1
  %5184 = load i32, ptr %5183, align 4, !tbaa !16
  %5185 = load ptr, ptr %5, align 8, !tbaa !5
  %5186 = getelementptr inbounds i32, ptr %5185, i64 2
  %5187 = load i32, ptr %5186, align 4, !tbaa !16
  %5188 = load ptr, ptr %5, align 8, !tbaa !5
  %5189 = getelementptr inbounds i32, ptr %5188, i64 3
  %5190 = load i32, ptr %5189, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5181, i32 noundef %5184, i32 noundef %5187, i32 noundef %5190, ptr noundef @.str.967)
  br label %5191

5191:                                             ; preds = %5178, %5169
  call void @llvm.lifetime.end.p0(i64 8, ptr %360) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %359) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %358) #9
  br label %11526

5192:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 8, ptr %361) #9
  %5193 = load ptr, ptr %5, align 8, !tbaa !5
  %5194 = getelementptr inbounds i32, ptr %5193, i64 0
  %5195 = load i32, ptr %5194, align 4, !tbaa !16
  %5196 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %5195)
  store ptr %5196, ptr %361, align 8, !tbaa !5
  %5197 = load ptr, ptr %361, align 8, !tbaa !5
  %5198 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %5197, i32 0, i32 4
  %5199 = load i32, ptr %5198, align 8, !tbaa !129
  %5200 = icmp ugt i32 %5199, 1
  br i1 %5200, label %5201, label %5211

5201:                                             ; preds = %5192
  %5202 = load ptr, ptr %5, align 8, !tbaa !5
  %5203 = getelementptr inbounds i32, ptr %5202, i64 0
  %5204 = load i32, ptr %5203, align 4, !tbaa !16
  %5205 = load ptr, ptr %5, align 8, !tbaa !5
  %5206 = getelementptr inbounds i32, ptr %5205, i64 1
  %5207 = load i32, ptr %5206, align 4, !tbaa !16
  %5208 = load ptr, ptr %5, align 8, !tbaa !5
  %5209 = getelementptr inbounds i32, ptr %5208, i64 2
  %5210 = load i32, ptr %5209, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5204, i32 noundef %5207, i32 noundef %5210, ptr noundef @.str.445)
  br label %5221

5211:                                             ; preds = %5192
  %5212 = load ptr, ptr %5, align 8, !tbaa !5
  %5213 = getelementptr inbounds i32, ptr %5212, i64 0
  %5214 = load i32, ptr %5213, align 4, !tbaa !16
  %5215 = load ptr, ptr %5, align 8, !tbaa !5
  %5216 = getelementptr inbounds i32, ptr %5215, i64 1
  %5217 = load i32, ptr %5216, align 4, !tbaa !16
  %5218 = load ptr, ptr %5, align 8, !tbaa !5
  %5219 = getelementptr inbounds i32, ptr %5218, i64 2
  %5220 = load i32, ptr %5219, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL13emit_unary_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5214, i32 noundef %5217, i32 noundef %5220, ptr noundef @.str.968)
  br label %5221

5221:                                             ; preds = %5211, %5201
  call void @llvm.lifetime.end.p0(i64 8, ptr %361) #9
  br label %11526

5222:                                             ; preds = %919
  %5223 = load ptr, ptr %5, align 8, !tbaa !5
  %5224 = getelementptr inbounds i32, ptr %5223, i64 2
  %5225 = load i32, ptr %5224, align 4, !tbaa !16
  %5226 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %5225)
  %5227 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %5226, i32 0, i32 4
  %5228 = load i32, ptr %5227, align 8, !tbaa !129
  %5229 = icmp ugt i32 %5228, 1
  br i1 %5229, label %5230, label %5246

5230:                                             ; preds = %5222
  %5231 = load ptr, ptr %5, align 8, !tbaa !5
  %5232 = getelementptr inbounds i32, ptr %5231, i64 0
  %5233 = load i32, ptr %5232, align 4, !tbaa !16
  %5234 = load ptr, ptr %5, align 8, !tbaa !5
  %5235 = getelementptr inbounds i32, ptr %5234, i64 1
  %5236 = load i32, ptr %5235, align 4, !tbaa !16
  %5237 = load ptr, ptr %5, align 8, !tbaa !5
  %5238 = getelementptr inbounds i32, ptr %5237, i64 2
  %5239 = load i32, ptr %5238, align 4, !tbaa !16
  %5240 = load ptr, ptr %5, align 8, !tbaa !5
  %5241 = getelementptr inbounds i32, ptr %5240, i64 3
  %5242 = load i32, ptr %5241, align 4, !tbaa !16
  %5243 = load i32, ptr %9, align 4, !tbaa !17
  %5244 = load i32, ptr %6, align 4, !tbaa !13
  %5245 = call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %5244)
  call void @_ZN11spirv_cross12CompilerGLSL24emit_binary_func_op_castEjjjjPKcNS_8SPIRType8BaseTypeEb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5233, i32 noundef %5236, i32 noundef %5239, i32 noundef %5242, ptr noundef @.str.380, i32 noundef %5243, i1 noundef zeroext %5245)
  br label %5264

5246:                                             ; preds = %5222
  %5247 = load ptr, ptr %5, align 8, !tbaa !5
  %5248 = getelementptr inbounds i32, ptr %5247, i64 0
  %5249 = load i32, ptr %5248, align 4, !tbaa !16
  %5250 = load ptr, ptr %5, align 8, !tbaa !5
  %5251 = getelementptr inbounds i32, ptr %5250, i64 1
  %5252 = load i32, ptr %5251, align 4, !tbaa !16
  %5253 = load ptr, ptr %5, align 8, !tbaa !5
  %5254 = getelementptr inbounds i32, ptr %5253, i64 2
  %5255 = load i32, ptr %5254, align 4, !tbaa !16
  %5256 = load ptr, ptr %5, align 8, !tbaa !5
  %5257 = getelementptr inbounds i32, ptr %5256, i64 3
  %5258 = load i32, ptr %5257, align 4, !tbaa !16
  %5259 = load i32, ptr %9, align 4, !tbaa !17
  %5260 = load i32, ptr %6, align 4, !tbaa !13
  %5261 = call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %5260)
  %5262 = load i8, ptr %11, align 1, !tbaa !142, !range !127, !noundef !128
  %5263 = trunc i8 %5262 to i1
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5249, i32 noundef %5252, i32 noundef %5255, i32 noundef %5258, ptr noundef @.str.969, i32 noundef %5259, i1 noundef zeroext %5261, i1 noundef zeroext %5263)
  br label %5264

5264:                                             ; preds = %5246, %5230
  br label %11526

5265:                                             ; preds = %919, %919
  %5266 = load ptr, ptr %5, align 8, !tbaa !5
  %5267 = getelementptr inbounds i32, ptr %5266, i64 2
  %5268 = load i32, ptr %5267, align 4, !tbaa !16
  %5269 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %5268)
  %5270 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %5269, i32 0, i32 4
  %5271 = load i32, ptr %5270, align 8, !tbaa !129
  %5272 = icmp ugt i32 %5271, 1
  br i1 %5272, label %5273, label %5286

5273:                                             ; preds = %5265
  %5274 = load ptr, ptr %5, align 8, !tbaa !5
  %5275 = getelementptr inbounds i32, ptr %5274, i64 0
  %5276 = load i32, ptr %5275, align 4, !tbaa !16
  %5277 = load ptr, ptr %5, align 8, !tbaa !5
  %5278 = getelementptr inbounds i32, ptr %5277, i64 1
  %5279 = load i32, ptr %5278, align 4, !tbaa !16
  %5280 = load ptr, ptr %5, align 8, !tbaa !5
  %5281 = getelementptr inbounds i32, ptr %5280, i64 2
  %5282 = load i32, ptr %5281, align 4, !tbaa !16
  %5283 = load ptr, ptr %5, align 8, !tbaa !5
  %5284 = getelementptr inbounds i32, ptr %5283, i64 3
  %5285 = load i32, ptr %5284, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5276, i32 noundef %5279, i32 noundef %5282, i32 noundef %5285, ptr noundef @.str.380)
  br label %5299

5286:                                             ; preds = %5265
  %5287 = load ptr, ptr %5, align 8, !tbaa !5
  %5288 = getelementptr inbounds i32, ptr %5287, i64 0
  %5289 = load i32, ptr %5288, align 4, !tbaa !16
  %5290 = load ptr, ptr %5, align 8, !tbaa !5
  %5291 = getelementptr inbounds i32, ptr %5290, i64 1
  %5292 = load i32, ptr %5291, align 4, !tbaa !16
  %5293 = load ptr, ptr %5, align 8, !tbaa !5
  %5294 = getelementptr inbounds i32, ptr %5293, i64 2
  %5295 = load i32, ptr %5294, align 4, !tbaa !16
  %5296 = load ptr, ptr %5, align 8, !tbaa !5
  %5297 = getelementptr inbounds i32, ptr %5296, i64 3
  %5298 = load i32, ptr %5297, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5289, i32 noundef %5292, i32 noundef %5295, i32 noundef %5298, ptr noundef @.str.969)
  br label %5299

5299:                                             ; preds = %5286, %5273
  br label %11526

5300:                                             ; preds = %919
  %5301 = load ptr, ptr %5, align 8, !tbaa !5
  %5302 = getelementptr inbounds i32, ptr %5301, i64 2
  %5303 = load i32, ptr %5302, align 4, !tbaa !16
  %5304 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %5303)
  %5305 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %5304, i32 0, i32 4
  %5306 = load i32, ptr %5305, align 8, !tbaa !129
  %5307 = icmp ugt i32 %5306, 1
  br i1 %5307, label %5308, label %5324

5308:                                             ; preds = %5300
  %5309 = load ptr, ptr %5, align 8, !tbaa !5
  %5310 = getelementptr inbounds i32, ptr %5309, i64 0
  %5311 = load i32, ptr %5310, align 4, !tbaa !16
  %5312 = load ptr, ptr %5, align 8, !tbaa !5
  %5313 = getelementptr inbounds i32, ptr %5312, i64 1
  %5314 = load i32, ptr %5313, align 4, !tbaa !16
  %5315 = load ptr, ptr %5, align 8, !tbaa !5
  %5316 = getelementptr inbounds i32, ptr %5315, i64 2
  %5317 = load i32, ptr %5316, align 4, !tbaa !16
  %5318 = load ptr, ptr %5, align 8, !tbaa !5
  %5319 = getelementptr inbounds i32, ptr %5318, i64 3
  %5320 = load i32, ptr %5319, align 4, !tbaa !16
  %5321 = load i32, ptr %9, align 4, !tbaa !17
  %5322 = load i32, ptr %6, align 4, !tbaa !13
  %5323 = call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %5322)
  call void @_ZN11spirv_cross12CompilerGLSL24emit_binary_func_op_castEjjjjPKcNS_8SPIRType8BaseTypeEb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5311, i32 noundef %5314, i32 noundef %5317, i32 noundef %5320, ptr noundef @.str.446, i32 noundef %5321, i1 noundef zeroext %5323)
  br label %5342

5324:                                             ; preds = %5300
  %5325 = load ptr, ptr %5, align 8, !tbaa !5
  %5326 = getelementptr inbounds i32, ptr %5325, i64 0
  %5327 = load i32, ptr %5326, align 4, !tbaa !16
  %5328 = load ptr, ptr %5, align 8, !tbaa !5
  %5329 = getelementptr inbounds i32, ptr %5328, i64 1
  %5330 = load i32, ptr %5329, align 4, !tbaa !16
  %5331 = load ptr, ptr %5, align 8, !tbaa !5
  %5332 = getelementptr inbounds i32, ptr %5331, i64 2
  %5333 = load i32, ptr %5332, align 4, !tbaa !16
  %5334 = load ptr, ptr %5, align 8, !tbaa !5
  %5335 = getelementptr inbounds i32, ptr %5334, i64 3
  %5336 = load i32, ptr %5335, align 4, !tbaa !16
  %5337 = load i32, ptr %9, align 4, !tbaa !17
  %5338 = load i32, ptr %6, align 4, !tbaa !13
  %5339 = call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %5338)
  %5340 = load i8, ptr %11, align 1, !tbaa !142, !range !127, !noundef !128
  %5341 = trunc i8 %5340 to i1
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5327, i32 noundef %5330, i32 noundef %5333, i32 noundef %5336, ptr noundef @.str.970, i32 noundef %5337, i1 noundef zeroext %5339, i1 noundef zeroext %5341)
  br label %5342

5342:                                             ; preds = %5324, %5308
  br label %11526

5343:                                             ; preds = %919, %919, %919
  %5344 = load ptr, ptr %5, align 8, !tbaa !5
  %5345 = getelementptr inbounds i32, ptr %5344, i64 2
  %5346 = load i32, ptr %5345, align 4, !tbaa !16
  %5347 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %5346)
  %5348 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %5347, i32 0, i32 4
  %5349 = load i32, ptr %5348, align 8, !tbaa !129
  %5350 = icmp ugt i32 %5349, 1
  br i1 %5350, label %5351, label %5364

5351:                                             ; preds = %5343
  %5352 = load ptr, ptr %5, align 8, !tbaa !5
  %5353 = getelementptr inbounds i32, ptr %5352, i64 0
  %5354 = load i32, ptr %5353, align 4, !tbaa !16
  %5355 = load ptr, ptr %5, align 8, !tbaa !5
  %5356 = getelementptr inbounds i32, ptr %5355, i64 1
  %5357 = load i32, ptr %5356, align 4, !tbaa !16
  %5358 = load ptr, ptr %5, align 8, !tbaa !5
  %5359 = getelementptr inbounds i32, ptr %5358, i64 2
  %5360 = load i32, ptr %5359, align 4, !tbaa !16
  %5361 = load ptr, ptr %5, align 8, !tbaa !5
  %5362 = getelementptr inbounds i32, ptr %5361, i64 3
  %5363 = load i32, ptr %5362, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5354, i32 noundef %5357, i32 noundef %5360, i32 noundef %5363, ptr noundef @.str.446)
  br label %5377

5364:                                             ; preds = %5343
  %5365 = load ptr, ptr %5, align 8, !tbaa !5
  %5366 = getelementptr inbounds i32, ptr %5365, i64 0
  %5367 = load i32, ptr %5366, align 4, !tbaa !16
  %5368 = load ptr, ptr %5, align 8, !tbaa !5
  %5369 = getelementptr inbounds i32, ptr %5368, i64 1
  %5370 = load i32, ptr %5369, align 4, !tbaa !16
  %5371 = load ptr, ptr %5, align 8, !tbaa !5
  %5372 = getelementptr inbounds i32, ptr %5371, i64 2
  %5373 = load i32, ptr %5372, align 4, !tbaa !16
  %5374 = load ptr, ptr %5, align 8, !tbaa !5
  %5375 = getelementptr inbounds i32, ptr %5374, i64 3
  %5376 = load i32, ptr %5375, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5367, i32 noundef %5370, i32 noundef %5373, i32 noundef %5376, ptr noundef @.str.970)
  br label %5377

5377:                                             ; preds = %5364, %5351
  br label %11526

5378:                                             ; preds = %919, %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %362) #9
  %5379 = load i32, ptr %6, align 4, !tbaa !13
  %5380 = icmp eq i32 %5379, 172
  br i1 %5380, label %5381, label %5383

5381:                                             ; preds = %5378
  %5382 = load i32, ptr %10, align 4, !tbaa !17
  br label %5385

5383:                                             ; preds = %5378
  %5384 = load i32, ptr %9, align 4, !tbaa !17
  br label %5385

5385:                                             ; preds = %5383, %5381
  %5386 = phi i32 [ %5382, %5381 ], [ %5384, %5383 ]
  store i32 %5386, ptr %362, align 4, !tbaa !17
  %5387 = load ptr, ptr %5, align 8, !tbaa !5
  %5388 = getelementptr inbounds i32, ptr %5387, i64 2
  %5389 = load i32, ptr %5388, align 4, !tbaa !16
  %5390 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %5389)
  %5391 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %5390, i32 0, i32 4
  %5392 = load i32, ptr %5391, align 8, !tbaa !129
  %5393 = icmp ugt i32 %5392, 1
  br i1 %5393, label %5394, label %5410

5394:                                             ; preds = %5385
  %5395 = load ptr, ptr %5, align 8, !tbaa !5
  %5396 = getelementptr inbounds i32, ptr %5395, i64 0
  %5397 = load i32, ptr %5396, align 4, !tbaa !16
  %5398 = load ptr, ptr %5, align 8, !tbaa !5
  %5399 = getelementptr inbounds i32, ptr %5398, i64 1
  %5400 = load i32, ptr %5399, align 4, !tbaa !16
  %5401 = load ptr, ptr %5, align 8, !tbaa !5
  %5402 = getelementptr inbounds i32, ptr %5401, i64 2
  %5403 = load i32, ptr %5402, align 4, !tbaa !16
  %5404 = load ptr, ptr %5, align 8, !tbaa !5
  %5405 = getelementptr inbounds i32, ptr %5404, i64 3
  %5406 = load i32, ptr %5405, align 4, !tbaa !16
  %5407 = load i32, ptr %362, align 4, !tbaa !17
  %5408 = load i32, ptr %6, align 4, !tbaa !13
  %5409 = call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %5408)
  call void @_ZN11spirv_cross12CompilerGLSL24emit_binary_func_op_castEjjjjPKcNS_8SPIRType8BaseTypeEb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5397, i32 noundef %5400, i32 noundef %5403, i32 noundef %5406, ptr noundef @.str.397, i32 noundef %5407, i1 noundef zeroext %5409)
  br label %5428

5410:                                             ; preds = %5385
  %5411 = load ptr, ptr %5, align 8, !tbaa !5
  %5412 = getelementptr inbounds i32, ptr %5411, i64 0
  %5413 = load i32, ptr %5412, align 4, !tbaa !16
  %5414 = load ptr, ptr %5, align 8, !tbaa !5
  %5415 = getelementptr inbounds i32, ptr %5414, i64 1
  %5416 = load i32, ptr %5415, align 4, !tbaa !16
  %5417 = load ptr, ptr %5, align 8, !tbaa !5
  %5418 = getelementptr inbounds i32, ptr %5417, i64 2
  %5419 = load i32, ptr %5418, align 4, !tbaa !16
  %5420 = load ptr, ptr %5, align 8, !tbaa !5
  %5421 = getelementptr inbounds i32, ptr %5420, i64 3
  %5422 = load i32, ptr %5421, align 4, !tbaa !16
  %5423 = load i32, ptr %362, align 4, !tbaa !17
  %5424 = load i32, ptr %6, align 4, !tbaa !13
  %5425 = call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %5424)
  %5426 = load i8, ptr %11, align 1, !tbaa !142, !range !127, !noundef !128
  %5427 = trunc i8 %5426 to i1
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5413, i32 noundef %5416, i32 noundef %5419, i32 noundef %5422, ptr noundef @.str.973, i32 noundef %5423, i1 noundef zeroext %5425, i1 noundef zeroext %5427)
  br label %5428

5428:                                             ; preds = %5410, %5394
  call void @llvm.lifetime.end.p0(i64 4, ptr %362) #9
  br label %11526

5429:                                             ; preds = %919
  %5430 = load ptr, ptr %5, align 8, !tbaa !5
  %5431 = getelementptr inbounds i32, ptr %5430, i64 2
  %5432 = load i32, ptr %5431, align 4, !tbaa !16
  %5433 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %5432)
  %5434 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %5433, i32 0, i32 4
  %5435 = load i32, ptr %5434, align 8, !tbaa !129
  %5436 = icmp ugt i32 %5435, 1
  br i1 %5436, label %5437, label %5450

5437:                                             ; preds = %5429
  %5438 = load ptr, ptr %5, align 8, !tbaa !5
  %5439 = getelementptr inbounds i32, ptr %5438, i64 0
  %5440 = load i32, ptr %5439, align 4, !tbaa !16
  %5441 = load ptr, ptr %5, align 8, !tbaa !5
  %5442 = getelementptr inbounds i32, ptr %5441, i64 1
  %5443 = load i32, ptr %5442, align 4, !tbaa !16
  %5444 = load ptr, ptr %5, align 8, !tbaa !5
  %5445 = getelementptr inbounds i32, ptr %5444, i64 2
  %5446 = load i32, ptr %5445, align 4, !tbaa !16
  %5447 = load ptr, ptr %5, align 8, !tbaa !5
  %5448 = getelementptr inbounds i32, ptr %5447, i64 3
  %5449 = load i32, ptr %5448, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5440, i32 noundef %5443, i32 noundef %5446, i32 noundef %5449, ptr noundef @.str.397)
  br label %5463

5450:                                             ; preds = %5429
  %5451 = load ptr, ptr %5, align 8, !tbaa !5
  %5452 = getelementptr inbounds i32, ptr %5451, i64 0
  %5453 = load i32, ptr %5452, align 4, !tbaa !16
  %5454 = load ptr, ptr %5, align 8, !tbaa !5
  %5455 = getelementptr inbounds i32, ptr %5454, i64 1
  %5456 = load i32, ptr %5455, align 4, !tbaa !16
  %5457 = load ptr, ptr %5, align 8, !tbaa !5
  %5458 = getelementptr inbounds i32, ptr %5457, i64 2
  %5459 = load i32, ptr %5458, align 4, !tbaa !16
  %5460 = load ptr, ptr %5, align 8, !tbaa !5
  %5461 = getelementptr inbounds i32, ptr %5460, i64 3
  %5462 = load i32, ptr %5461, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5453, i32 noundef %5456, i32 noundef %5459, i32 noundef %5462, ptr noundef @.str.973)
  br label %5463

5463:                                             ; preds = %5450, %5437
  br label %11526

5464:                                             ; preds = %919, %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %363) #9
  %5465 = load i32, ptr %6, align 4, !tbaa !13
  %5466 = icmp eq i32 %5465, 174
  br i1 %5466, label %5467, label %5469

5467:                                             ; preds = %5464
  %5468 = load i32, ptr %10, align 4, !tbaa !17
  br label %5471

5469:                                             ; preds = %5464
  %5470 = load i32, ptr %9, align 4, !tbaa !17
  br label %5471

5471:                                             ; preds = %5469, %5467
  %5472 = phi i32 [ %5468, %5467 ], [ %5470, %5469 ]
  store i32 %5472, ptr %363, align 4, !tbaa !17
  %5473 = load ptr, ptr %5, align 8, !tbaa !5
  %5474 = getelementptr inbounds i32, ptr %5473, i64 2
  %5475 = load i32, ptr %5474, align 4, !tbaa !16
  %5476 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %5475)
  %5477 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %5476, i32 0, i32 4
  %5478 = load i32, ptr %5477, align 8, !tbaa !129
  %5479 = icmp ugt i32 %5478, 1
  br i1 %5479, label %5480, label %5496

5480:                                             ; preds = %5471
  %5481 = load ptr, ptr %5, align 8, !tbaa !5
  %5482 = getelementptr inbounds i32, ptr %5481, i64 0
  %5483 = load i32, ptr %5482, align 4, !tbaa !16
  %5484 = load ptr, ptr %5, align 8, !tbaa !5
  %5485 = getelementptr inbounds i32, ptr %5484, i64 1
  %5486 = load i32, ptr %5485, align 4, !tbaa !16
  %5487 = load ptr, ptr %5, align 8, !tbaa !5
  %5488 = getelementptr inbounds i32, ptr %5487, i64 2
  %5489 = load i32, ptr %5488, align 4, !tbaa !16
  %5490 = load ptr, ptr %5, align 8, !tbaa !5
  %5491 = getelementptr inbounds i32, ptr %5490, i64 3
  %5492 = load i32, ptr %5491, align 4, !tbaa !16
  %5493 = load i32, ptr %363, align 4, !tbaa !17
  %5494 = load i32, ptr %6, align 4, !tbaa !13
  %5495 = call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %5494)
  call void @_ZN11spirv_cross12CompilerGLSL24emit_binary_func_op_castEjjjjPKcNS_8SPIRType8BaseTypeEb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5483, i32 noundef %5486, i32 noundef %5489, i32 noundef %5492, ptr noundef @.str.398, i32 noundef %5493, i1 noundef zeroext %5495)
  br label %5514

5496:                                             ; preds = %5471
  %5497 = load ptr, ptr %5, align 8, !tbaa !5
  %5498 = getelementptr inbounds i32, ptr %5497, i64 0
  %5499 = load i32, ptr %5498, align 4, !tbaa !16
  %5500 = load ptr, ptr %5, align 8, !tbaa !5
  %5501 = getelementptr inbounds i32, ptr %5500, i64 1
  %5502 = load i32, ptr %5501, align 4, !tbaa !16
  %5503 = load ptr, ptr %5, align 8, !tbaa !5
  %5504 = getelementptr inbounds i32, ptr %5503, i64 2
  %5505 = load i32, ptr %5504, align 4, !tbaa !16
  %5506 = load ptr, ptr %5, align 8, !tbaa !5
  %5507 = getelementptr inbounds i32, ptr %5506, i64 3
  %5508 = load i32, ptr %5507, align 4, !tbaa !16
  %5509 = load i32, ptr %363, align 4, !tbaa !17
  %5510 = load i32, ptr %6, align 4, !tbaa !13
  %5511 = call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %5510)
  %5512 = load i8, ptr %11, align 1, !tbaa !142, !range !127, !noundef !128
  %5513 = trunc i8 %5512 to i1
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5499, i32 noundef %5502, i32 noundef %5505, i32 noundef %5508, ptr noundef @.str.974, i32 noundef %5509, i1 noundef zeroext %5511, i1 noundef zeroext %5513)
  br label %5514

5514:                                             ; preds = %5496, %5480
  call void @llvm.lifetime.end.p0(i64 4, ptr %363) #9
  br label %11526

5515:                                             ; preds = %919
  %5516 = load ptr, ptr %5, align 8, !tbaa !5
  %5517 = getelementptr inbounds i32, ptr %5516, i64 2
  %5518 = load i32, ptr %5517, align 4, !tbaa !16
  %5519 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %5518)
  %5520 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %5519, i32 0, i32 4
  %5521 = load i32, ptr %5520, align 8, !tbaa !129
  %5522 = icmp ugt i32 %5521, 1
  br i1 %5522, label %5523, label %5536

5523:                                             ; preds = %5515
  %5524 = load ptr, ptr %5, align 8, !tbaa !5
  %5525 = getelementptr inbounds i32, ptr %5524, i64 0
  %5526 = load i32, ptr %5525, align 4, !tbaa !16
  %5527 = load ptr, ptr %5, align 8, !tbaa !5
  %5528 = getelementptr inbounds i32, ptr %5527, i64 1
  %5529 = load i32, ptr %5528, align 4, !tbaa !16
  %5530 = load ptr, ptr %5, align 8, !tbaa !5
  %5531 = getelementptr inbounds i32, ptr %5530, i64 2
  %5532 = load i32, ptr %5531, align 4, !tbaa !16
  %5533 = load ptr, ptr %5, align 8, !tbaa !5
  %5534 = getelementptr inbounds i32, ptr %5533, i64 3
  %5535 = load i32, ptr %5534, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5526, i32 noundef %5529, i32 noundef %5532, i32 noundef %5535, ptr noundef @.str.398)
  br label %5549

5536:                                             ; preds = %5515
  %5537 = load ptr, ptr %5, align 8, !tbaa !5
  %5538 = getelementptr inbounds i32, ptr %5537, i64 0
  %5539 = load i32, ptr %5538, align 4, !tbaa !16
  %5540 = load ptr, ptr %5, align 8, !tbaa !5
  %5541 = getelementptr inbounds i32, ptr %5540, i64 1
  %5542 = load i32, ptr %5541, align 4, !tbaa !16
  %5543 = load ptr, ptr %5, align 8, !tbaa !5
  %5544 = getelementptr inbounds i32, ptr %5543, i64 2
  %5545 = load i32, ptr %5544, align 4, !tbaa !16
  %5546 = load ptr, ptr %5, align 8, !tbaa !5
  %5547 = getelementptr inbounds i32, ptr %5546, i64 3
  %5548 = load i32, ptr %5547, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5539, i32 noundef %5542, i32 noundef %5545, i32 noundef %5548, ptr noundef @.str.974)
  br label %5549

5549:                                             ; preds = %5536, %5523
  br label %11526

5550:                                             ; preds = %919, %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %364) #9
  %5551 = load i32, ptr %6, align 4, !tbaa !13
  %5552 = icmp eq i32 %5551, 176
  br i1 %5552, label %5553, label %5555

5553:                                             ; preds = %5550
  %5554 = load i32, ptr %10, align 4, !tbaa !17
  br label %5557

5555:                                             ; preds = %5550
  %5556 = load i32, ptr %9, align 4, !tbaa !17
  br label %5557

5557:                                             ; preds = %5555, %5553
  %5558 = phi i32 [ %5554, %5553 ], [ %5556, %5555 ]
  store i32 %5558, ptr %364, align 4, !tbaa !17
  %5559 = load ptr, ptr %5, align 8, !tbaa !5
  %5560 = getelementptr inbounds i32, ptr %5559, i64 2
  %5561 = load i32, ptr %5560, align 4, !tbaa !16
  %5562 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %5561)
  %5563 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %5562, i32 0, i32 4
  %5564 = load i32, ptr %5563, align 8, !tbaa !129
  %5565 = icmp ugt i32 %5564, 1
  br i1 %5565, label %5566, label %5582

5566:                                             ; preds = %5557
  %5567 = load ptr, ptr %5, align 8, !tbaa !5
  %5568 = getelementptr inbounds i32, ptr %5567, i64 0
  %5569 = load i32, ptr %5568, align 4, !tbaa !16
  %5570 = load ptr, ptr %5, align 8, !tbaa !5
  %5571 = getelementptr inbounds i32, ptr %5570, i64 1
  %5572 = load i32, ptr %5571, align 4, !tbaa !16
  %5573 = load ptr, ptr %5, align 8, !tbaa !5
  %5574 = getelementptr inbounds i32, ptr %5573, i64 2
  %5575 = load i32, ptr %5574, align 4, !tbaa !16
  %5576 = load ptr, ptr %5, align 8, !tbaa !5
  %5577 = getelementptr inbounds i32, ptr %5576, i64 3
  %5578 = load i32, ptr %5577, align 4, !tbaa !16
  %5579 = load i32, ptr %364, align 4, !tbaa !17
  %5580 = load i32, ptr %6, align 4, !tbaa !13
  %5581 = call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %5580)
  call void @_ZN11spirv_cross12CompilerGLSL24emit_binary_func_op_castEjjjjPKcNS_8SPIRType8BaseTypeEb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5569, i32 noundef %5572, i32 noundef %5575, i32 noundef %5578, ptr noundef @.str.424, i32 noundef %5579, i1 noundef zeroext %5581)
  br label %5600

5582:                                             ; preds = %5557
  %5583 = load ptr, ptr %5, align 8, !tbaa !5
  %5584 = getelementptr inbounds i32, ptr %5583, i64 0
  %5585 = load i32, ptr %5584, align 4, !tbaa !16
  %5586 = load ptr, ptr %5, align 8, !tbaa !5
  %5587 = getelementptr inbounds i32, ptr %5586, i64 1
  %5588 = load i32, ptr %5587, align 4, !tbaa !16
  %5589 = load ptr, ptr %5, align 8, !tbaa !5
  %5590 = getelementptr inbounds i32, ptr %5589, i64 2
  %5591 = load i32, ptr %5590, align 4, !tbaa !16
  %5592 = load ptr, ptr %5, align 8, !tbaa !5
  %5593 = getelementptr inbounds i32, ptr %5592, i64 3
  %5594 = load i32, ptr %5593, align 4, !tbaa !16
  %5595 = load i32, ptr %364, align 4, !tbaa !17
  %5596 = load i32, ptr %6, align 4, !tbaa !13
  %5597 = call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %5596)
  %5598 = load i8, ptr %11, align 1, !tbaa !142, !range !127, !noundef !128
  %5599 = trunc i8 %5598 to i1
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5585, i32 noundef %5588, i32 noundef %5591, i32 noundef %5594, ptr noundef @.str.971, i32 noundef %5595, i1 noundef zeroext %5597, i1 noundef zeroext %5599)
  br label %5600

5600:                                             ; preds = %5582, %5566
  call void @llvm.lifetime.end.p0(i64 4, ptr %364) #9
  br label %11526

5601:                                             ; preds = %919
  %5602 = load ptr, ptr %5, align 8, !tbaa !5
  %5603 = getelementptr inbounds i32, ptr %5602, i64 2
  %5604 = load i32, ptr %5603, align 4, !tbaa !16
  %5605 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %5604)
  %5606 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %5605, i32 0, i32 4
  %5607 = load i32, ptr %5606, align 8, !tbaa !129
  %5608 = icmp ugt i32 %5607, 1
  br i1 %5608, label %5609, label %5622

5609:                                             ; preds = %5601
  %5610 = load ptr, ptr %5, align 8, !tbaa !5
  %5611 = getelementptr inbounds i32, ptr %5610, i64 0
  %5612 = load i32, ptr %5611, align 4, !tbaa !16
  %5613 = load ptr, ptr %5, align 8, !tbaa !5
  %5614 = getelementptr inbounds i32, ptr %5613, i64 1
  %5615 = load i32, ptr %5614, align 4, !tbaa !16
  %5616 = load ptr, ptr %5, align 8, !tbaa !5
  %5617 = getelementptr inbounds i32, ptr %5616, i64 2
  %5618 = load i32, ptr %5617, align 4, !tbaa !16
  %5619 = load ptr, ptr %5, align 8, !tbaa !5
  %5620 = getelementptr inbounds i32, ptr %5619, i64 3
  %5621 = load i32, ptr %5620, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5612, i32 noundef %5615, i32 noundef %5618, i32 noundef %5621, ptr noundef @.str.424)
  br label %5635

5622:                                             ; preds = %5601
  %5623 = load ptr, ptr %5, align 8, !tbaa !5
  %5624 = getelementptr inbounds i32, ptr %5623, i64 0
  %5625 = load i32, ptr %5624, align 4, !tbaa !16
  %5626 = load ptr, ptr %5, align 8, !tbaa !5
  %5627 = getelementptr inbounds i32, ptr %5626, i64 1
  %5628 = load i32, ptr %5627, align 4, !tbaa !16
  %5629 = load ptr, ptr %5, align 8, !tbaa !5
  %5630 = getelementptr inbounds i32, ptr %5629, i64 2
  %5631 = load i32, ptr %5630, align 4, !tbaa !16
  %5632 = load ptr, ptr %5, align 8, !tbaa !5
  %5633 = getelementptr inbounds i32, ptr %5632, i64 3
  %5634 = load i32, ptr %5633, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5625, i32 noundef %5628, i32 noundef %5631, i32 noundef %5634, ptr noundef @.str.971)
  br label %5635

5635:                                             ; preds = %5622, %5609
  br label %11526

5636:                                             ; preds = %919, %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %365) #9
  %5637 = load i32, ptr %6, align 4, !tbaa !13
  %5638 = icmp eq i32 %5637, 178
  br i1 %5638, label %5639, label %5641

5639:                                             ; preds = %5636
  %5640 = load i32, ptr %10, align 4, !tbaa !17
  br label %5643

5641:                                             ; preds = %5636
  %5642 = load i32, ptr %9, align 4, !tbaa !17
  br label %5643

5643:                                             ; preds = %5641, %5639
  %5644 = phi i32 [ %5640, %5639 ], [ %5642, %5641 ]
  store i32 %5644, ptr %365, align 4, !tbaa !17
  %5645 = load ptr, ptr %5, align 8, !tbaa !5
  %5646 = getelementptr inbounds i32, ptr %5645, i64 2
  %5647 = load i32, ptr %5646, align 4, !tbaa !16
  %5648 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %5647)
  %5649 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %5648, i32 0, i32 4
  %5650 = load i32, ptr %5649, align 8, !tbaa !129
  %5651 = icmp ugt i32 %5650, 1
  br i1 %5651, label %5652, label %5668

5652:                                             ; preds = %5643
  %5653 = load ptr, ptr %5, align 8, !tbaa !5
  %5654 = getelementptr inbounds i32, ptr %5653, i64 0
  %5655 = load i32, ptr %5654, align 4, !tbaa !16
  %5656 = load ptr, ptr %5, align 8, !tbaa !5
  %5657 = getelementptr inbounds i32, ptr %5656, i64 1
  %5658 = load i32, ptr %5657, align 4, !tbaa !16
  %5659 = load ptr, ptr %5, align 8, !tbaa !5
  %5660 = getelementptr inbounds i32, ptr %5659, i64 2
  %5661 = load i32, ptr %5660, align 4, !tbaa !16
  %5662 = load ptr, ptr %5, align 8, !tbaa !5
  %5663 = getelementptr inbounds i32, ptr %5662, i64 3
  %5664 = load i32, ptr %5663, align 4, !tbaa !16
  %5665 = load i32, ptr %365, align 4, !tbaa !17
  %5666 = load i32, ptr %6, align 4, !tbaa !13
  %5667 = call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %5666)
  call void @_ZN11spirv_cross12CompilerGLSL24emit_binary_func_op_castEjjjjPKcNS_8SPIRType8BaseTypeEb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5655, i32 noundef %5658, i32 noundef %5661, i32 noundef %5664, ptr noundef @.str.425, i32 noundef %5665, i1 noundef zeroext %5667)
  br label %5686

5668:                                             ; preds = %5643
  %5669 = load ptr, ptr %5, align 8, !tbaa !5
  %5670 = getelementptr inbounds i32, ptr %5669, i64 0
  %5671 = load i32, ptr %5670, align 4, !tbaa !16
  %5672 = load ptr, ptr %5, align 8, !tbaa !5
  %5673 = getelementptr inbounds i32, ptr %5672, i64 1
  %5674 = load i32, ptr %5673, align 4, !tbaa !16
  %5675 = load ptr, ptr %5, align 8, !tbaa !5
  %5676 = getelementptr inbounds i32, ptr %5675, i64 2
  %5677 = load i32, ptr %5676, align 4, !tbaa !16
  %5678 = load ptr, ptr %5, align 8, !tbaa !5
  %5679 = getelementptr inbounds i32, ptr %5678, i64 3
  %5680 = load i32, ptr %5679, align 4, !tbaa !16
  %5681 = load i32, ptr %365, align 4, !tbaa !17
  %5682 = load i32, ptr %6, align 4, !tbaa !13
  %5683 = call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %5682)
  %5684 = load i8, ptr %11, align 1, !tbaa !142, !range !127, !noundef !128
  %5685 = trunc i8 %5684 to i1
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5671, i32 noundef %5674, i32 noundef %5677, i32 noundef %5680, ptr noundef @.str.972, i32 noundef %5681, i1 noundef zeroext %5683, i1 noundef zeroext %5685)
  br label %5686

5686:                                             ; preds = %5668, %5652
  call void @llvm.lifetime.end.p0(i64 4, ptr %365) #9
  br label %11526

5687:                                             ; preds = %919
  %5688 = load ptr, ptr %5, align 8, !tbaa !5
  %5689 = getelementptr inbounds i32, ptr %5688, i64 2
  %5690 = load i32, ptr %5689, align 4, !tbaa !16
  %5691 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %5690)
  %5692 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %5691, i32 0, i32 4
  %5693 = load i32, ptr %5692, align 8, !tbaa !129
  %5694 = icmp ugt i32 %5693, 1
  br i1 %5694, label %5695, label %5708

5695:                                             ; preds = %5687
  %5696 = load ptr, ptr %5, align 8, !tbaa !5
  %5697 = getelementptr inbounds i32, ptr %5696, i64 0
  %5698 = load i32, ptr %5697, align 4, !tbaa !16
  %5699 = load ptr, ptr %5, align 8, !tbaa !5
  %5700 = getelementptr inbounds i32, ptr %5699, i64 1
  %5701 = load i32, ptr %5700, align 4, !tbaa !16
  %5702 = load ptr, ptr %5, align 8, !tbaa !5
  %5703 = getelementptr inbounds i32, ptr %5702, i64 2
  %5704 = load i32, ptr %5703, align 4, !tbaa !16
  %5705 = load ptr, ptr %5, align 8, !tbaa !5
  %5706 = getelementptr inbounds i32, ptr %5705, i64 3
  %5707 = load i32, ptr %5706, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5698, i32 noundef %5701, i32 noundef %5704, i32 noundef %5707, ptr noundef @.str.425)
  br label %5721

5708:                                             ; preds = %5687
  %5709 = load ptr, ptr %5, align 8, !tbaa !5
  %5710 = getelementptr inbounds i32, ptr %5709, i64 0
  %5711 = load i32, ptr %5710, align 4, !tbaa !16
  %5712 = load ptr, ptr %5, align 8, !tbaa !5
  %5713 = getelementptr inbounds i32, ptr %5712, i64 1
  %5714 = load i32, ptr %5713, align 4, !tbaa !16
  %5715 = load ptr, ptr %5, align 8, !tbaa !5
  %5716 = getelementptr inbounds i32, ptr %5715, i64 2
  %5717 = load i32, ptr %5716, align 4, !tbaa !16
  %5718 = load ptr, ptr %5, align 8, !tbaa !5
  %5719 = getelementptr inbounds i32, ptr %5718, i64 3
  %5720 = load i32, ptr %5719, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5711, i32 noundef %5714, i32 noundef %5717, i32 noundef %5720, ptr noundef @.str.972)
  br label %5721

5721:                                             ; preds = %5708, %5695
  br label %11526

5722:                                             ; preds = %919, %919, %919, %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %366) #9
  %5723 = load i32, ptr %6, align 4, !tbaa !13
  %5724 = icmp eq i32 %5723, 114
  br i1 %5724, label %5728, label %5725

5725:                                             ; preds = %5722
  %5726 = load i32, ptr %6, align 4, !tbaa !13
  %5727 = icmp eq i32 %5726, 111
  br i1 %5727, label %5728, label %5730

5728:                                             ; preds = %5725, %5722
  %5729 = load i32, ptr %9, align 4, !tbaa !17
  br label %5732

5730:                                             ; preds = %5725
  %5731 = load i32, ptr %10, align 4, !tbaa !17
  br label %5732

5732:                                             ; preds = %5730, %5728
  %5733 = phi i32 [ %5729, %5728 ], [ %5731, %5730 ]
  store i32 %5733, ptr %366, align 4, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 4, ptr %367) #9
  %5734 = load ptr, ptr %5, align 8, !tbaa !5
  %5735 = getelementptr inbounds i32, ptr %5734, i64 0
  %5736 = load i32, ptr %5735, align 4, !tbaa !16
  store i32 %5736, ptr %367, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %368) #9
  %5737 = load ptr, ptr %5, align 8, !tbaa !5
  %5738 = getelementptr inbounds i32, ptr %5737, i64 1
  %5739 = load i32, ptr %5738, align 4, !tbaa !16
  store i32 %5739, ptr %368, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %369) #9
  %5740 = load i32, ptr %367, align 4, !tbaa !16
  %5741 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %5740)
  store ptr %5741, ptr %369, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %370) #9
  %5742 = load ptr, ptr %5, align 8, !tbaa !5
  %5743 = getelementptr inbounds i32, ptr %5742, i64 2
  %5744 = load i32, ptr %5743, align 4, !tbaa !16
  %5745 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %5744)
  store ptr %5745, ptr %370, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %371) #9
  %5746 = load ptr, ptr %369, 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 %371, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(336) %5746)
  %5747 = load ptr, ptr %370, align 8, !tbaa !5
  %5748 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %5747, i32 0, i32 3
  %5749 = load i32, ptr %5748, align 4, !tbaa !211
  %5750 = load ptr, ptr %369, align 8, !tbaa !5
  %5751 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %5750, i32 0, i32 3
  %5752 = load i32, ptr %5751, align 4, !tbaa !211
  %5753 = icmp ult i32 %5749, %5752
  br i1 %5753, label %5758, label %5754

5754:                                             ; preds = %5732
  %5755 = load ptr, ptr %369, align 8, !tbaa !5
  %5756 = invoke noundef zeroext i1 @_ZN11spirv_crossL22type_is_floating_pointERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(336) %5755)
          to label %5757 unwind label %5770

5757:                                             ; preds = %5754
  br i1 %5756, label %5758, label %5774

5758:                                             ; preds = %5757, %5732
  %5759 = load i32, ptr %367, align 4, !tbaa !16
  %5760 = load i32, ptr %368, align 4, !tbaa !16
  %5761 = load ptr, ptr %5, align 8, !tbaa !5
  %5762 = getelementptr inbounds i32, ptr %5761, i64 2
  %5763 = load i32, ptr %5762, align 4, !tbaa !16
  %5764 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %371) #9
  %5765 = load i32, ptr %366, align 4, !tbaa !17
  %5766 = load ptr, ptr %369, align 8, !tbaa !5
  %5767 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %5766, i32 0, i32 2
  %5768 = load i32, ptr %5767, align 8, !tbaa !148
  invoke void @_ZN11spirv_cross12CompilerGLSL23emit_unary_func_op_castEjjjPKcNS_8SPIRType8BaseTypeES4_(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5759, i32 noundef %5760, i32 noundef %5763, ptr noundef %5764, i32 noundef %5765, i32 noundef %5768)
          to label %5769 unwind label %5770

5769:                                             ; preds = %5758
  br label %5782

5770:                                             ; preds = %5774, %5758, %5754
  %5771 = landingpad { ptr, i32 }
          cleanup
  %5772 = extractvalue { ptr, i32 } %5771, 0
  store ptr %5772, ptr %23, align 8
  %5773 = extractvalue { ptr, i32 } %5771, 1
  store i32 %5773, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %371) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %371) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %370) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %369) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %368) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %367) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %366) #9
  br label %11527

5774:                                             ; preds = %5757
  %5775 = load i32, ptr %367, align 4, !tbaa !16
  %5776 = load i32, ptr %368, align 4, !tbaa !16
  %5777 = load ptr, ptr %5, align 8, !tbaa !5
  %5778 = getelementptr inbounds i32, ptr %5777, i64 2
  %5779 = load i32, ptr %5778, align 4, !tbaa !16
  %5780 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %371) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5775, i32 noundef %5776, i32 noundef %5779, ptr noundef %5780)
          to label %5781 unwind label %5770

5781:                                             ; preds = %5774
  br label %5782

5782:                                             ; preds = %5781, %5769
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %371) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %371) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %370) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %369) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %368) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %367) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %366) #9
  br label %11526

5783:                                             ; preds = %919, %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %372) #9
  %5784 = load ptr, ptr %5, align 8, !tbaa !5
  %5785 = getelementptr inbounds i32, ptr %5784, i64 0
  %5786 = load i32, ptr %5785, align 4, !tbaa !16
  store i32 %5786, ptr %372, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %373) #9
  %5787 = load ptr, ptr %5, align 8, !tbaa !5
  %5788 = getelementptr inbounds i32, ptr %5787, i64 1
  %5789 = load i32, ptr %5788, align 4, !tbaa !16
  store i32 %5789, ptr %373, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %374) #9
  %5790 = load i32, ptr %372, align 4, !tbaa !16
  %5791 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %5790)
  store ptr %5791, ptr %374, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 336, ptr %375) #9
  %5792 = load ptr, ptr %374, align 8, !tbaa !5
  call void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %375, ptr noundef nonnull align 8 dereferenceable(336) %5792)
  call void @llvm.lifetime.start.p0(i64 8, ptr %376) #9
  %5793 = load ptr, ptr %5, align 8, !tbaa !5
  %5794 = getelementptr inbounds i32, ptr %5793, i64 2
  %5795 = load i32, ptr %5794, align 4, !tbaa !16
  %5796 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %5795)
          to label %5797 unwind label %5828

5797:                                             ; preds = %5783
  store ptr %5796, ptr %376, align 8, !tbaa !5
  %5798 = load i32, ptr %6, align 4, !tbaa !13
  %5799 = icmp eq i32 %5798, 110
  br i1 %5799, label %5800, label %5806

5800:                                             ; preds = %5797
  %5801 = load ptr, ptr %374, align 8, !tbaa !5
  %5802 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %5801, i32 0, i32 3
  %5803 = load i32, ptr %5802, align 4, !tbaa !211
  %5804 = invoke noundef i32 @_ZN11spirv_crossL18to_signed_basetypeEj(i32 noundef %5803)
          to label %5805 unwind label %5828

5805:                                             ; preds = %5800
  br label %5812

5806:                                             ; preds = %5797
  %5807 = load ptr, ptr %374, align 8, !tbaa !5
  %5808 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %5807, i32 0, i32 3
  %5809 = load i32, ptr %5808, align 4, !tbaa !211
  %5810 = invoke noundef i32 @_ZN11spirv_crossL20to_unsigned_basetypeEj(i32 noundef %5809)
          to label %5811 unwind label %5828

5811:                                             ; preds = %5806
  br label %5812

5812:                                             ; preds = %5811, %5805
  %5813 = phi i32 [ %5804, %5805 ], [ %5810, %5811 ]
  %5814 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %375, i32 0, i32 2
  store i32 %5813, ptr %5814, align 8, !tbaa !148
  call void @llvm.lifetime.start.p0(i64 32, ptr %377) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %377, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(336) %375)
          to label %5815 unwind label %5832

5815:                                             ; preds = %5812
  %5816 = load i32, ptr %372, align 4, !tbaa !16
  %5817 = load i32, ptr %373, align 4, !tbaa !16
  %5818 = load ptr, ptr %5, align 8, !tbaa !5
  %5819 = getelementptr inbounds i32, ptr %5818, i64 2
  %5820 = load i32, ptr %5819, align 4, !tbaa !16
  %5821 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %377) #9
  %5822 = load ptr, ptr %376, align 8, !tbaa !5
  %5823 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %5822, i32 0, i32 2
  %5824 = load i32, ptr %5823, align 8, !tbaa !148
  %5825 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %375, i32 0, i32 2
  %5826 = load i32, ptr %5825, align 8, !tbaa !148
  invoke void @_ZN11spirv_cross12CompilerGLSL23emit_unary_func_op_castEjjjPKcNS_8SPIRType8BaseTypeES4_(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5816, i32 noundef %5817, i32 noundef %5820, ptr noundef %5821, i32 noundef %5824, i32 noundef %5826)
          to label %5827 unwind label %5836

5827:                                             ; preds = %5815
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %377) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %377) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %376) #9
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %375) #9
  call void @llvm.lifetime.end.p0(i64 336, ptr %375) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %374) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %373) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %372) #9
  br label %11526

5828:                                             ; preds = %5806, %5800, %5783
  %5829 = landingpad { ptr, i32 }
          cleanup
  %5830 = extractvalue { ptr, i32 } %5829, 0
  store ptr %5830, ptr %23, align 8
  %5831 = extractvalue { ptr, i32 } %5829, 1
  store i32 %5831, ptr %24, align 4
  br label %5841

5832:                                             ; preds = %5812
  %5833 = landingpad { ptr, i32 }
          cleanup
  %5834 = extractvalue { ptr, i32 } %5833, 0
  store ptr %5834, ptr %23, align 8
  %5835 = extractvalue { ptr, i32 } %5833, 1
  store i32 %5835, ptr %24, align 4
  br label %5840

5836:                                             ; preds = %5815
  %5837 = landingpad { ptr, i32 }
          cleanup
  %5838 = extractvalue { ptr, i32 } %5837, 0
  store ptr %5838, ptr %23, align 8
  %5839 = extractvalue { ptr, i32 } %5837, 1
  store i32 %5839, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %377) #9
  br label %5840

5840:                                             ; preds = %5836, %5832
  call void @llvm.lifetime.end.p0(i64 32, ptr %377) #9
  br label %5841

5841:                                             ; preds = %5840, %5828
  call void @llvm.lifetime.end.p0(i64 8, ptr %376) #9
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %375) #9
  call void @llvm.lifetime.end.p0(i64 336, ptr %375) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %374) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %373) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %372) #9
  br label %11527

5842:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %378) #9
  %5843 = load ptr, ptr %5, align 8, !tbaa !5
  %5844 = getelementptr inbounds i32, ptr %5843, i64 0
  %5845 = load i32, ptr %5844, align 4, !tbaa !16
  store i32 %5845, ptr %378, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %379) #9
  %5846 = load ptr, ptr %5, align 8, !tbaa !5
  %5847 = getelementptr inbounds i32, ptr %5846, i64 1
  %5848 = load i32, ptr %5847, align 4, !tbaa !16
  store i32 %5848, ptr %379, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %380) #9
  %5849 = load i32, ptr %378, align 4, !tbaa !16
  %5850 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %5849)
  call void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %380, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(336) %5850)
  %5851 = load i32, ptr %378, align 4, !tbaa !16
  %5852 = load i32, ptr %379, align 4, !tbaa !16
  %5853 = load ptr, ptr %5, align 8, !tbaa !5
  %5854 = getelementptr inbounds i32, ptr %5853, i64 2
  %5855 = load i32, ptr %5854, align 4, !tbaa !16
  %5856 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %380) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5851, i32 noundef %5852, i32 noundef %5855, ptr noundef %5856)
          to label %5857 unwind label %5858

5857:                                             ; preds = %5842
  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 4, ptr %379) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %378) #9
  br label %11526

5858:                                             ; preds = %5842
  %5859 = landingpad { ptr, i32 }
          cleanup
  %5860 = extractvalue { ptr, i32 } %5859, 0
  store ptr %5860, ptr %23, align 8
  %5861 = extractvalue { ptr, i32 } %5859, 1
  store i32 %5861, ptr %24, align 4
  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 4, ptr %379) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %378) #9
  br label %11527

5862:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %381) #9
  %5863 = load ptr, ptr %5, align 8, !tbaa !5
  %5864 = getelementptr inbounds i32, ptr %5863, i64 0
  %5865 = load i32, ptr %5864, align 4, !tbaa !16
  store i32 %5865, ptr %381, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %382) #9
  %5866 = load ptr, ptr %5, align 8, !tbaa !5
  %5867 = getelementptr inbounds i32, ptr %5866, i64 1
  %5868 = load i32, ptr %5867, align 4, !tbaa !16
  store i32 %5868, ptr %382, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %383) #9
  %5869 = load ptr, ptr %5, align 8, !tbaa !5
  %5870 = getelementptr inbounds i32, ptr %5869, i64 2
  %5871 = load i32, ptr %5870, align 4, !tbaa !16
  store i32 %5871, ptr %383, align 4, !tbaa !16
  %5872 = load i32, ptr %381, align 4, !tbaa !16
  %5873 = load i32, ptr %382, align 4, !tbaa !16
  %5874 = load i32, ptr %383, align 4, !tbaa !16
  %5875 = load ptr, ptr %885, align 8, !tbaa !145
  %5876 = getelementptr inbounds ptr, ptr %5875, i64 43
  %5877 = load ptr, ptr %5876, align 8
  %5878 = call noundef zeroext i1 %5877(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5872, i32 noundef %5873, i32 noundef %5874)
  br i1 %5878, label %5896, label %5879

5879:                                             ; preds = %5862
  call void @llvm.lifetime.start.p0(i64 32, ptr %384) #9
  %5880 = load i32, ptr %381, align 4, !tbaa !16
  %5881 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %5880)
  %5882 = load i32, ptr %383, align 4, !tbaa !16
  %5883 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %5882)
  %5884 = load ptr, ptr %885, align 8, !tbaa !145
  %5885 = getelementptr inbounds ptr, ptr %5884, i64 59
  %5886 = load ptr, ptr %5885, align 8
  call void %5886(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %384, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(336) %5881, ptr noundef nonnull align 8 dereferenceable(336) %5883)
  %5887 = load i32, ptr %381, align 4, !tbaa !16
  %5888 = load i32, ptr %382, align 4, !tbaa !16
  %5889 = load i32, ptr %383, align 4, !tbaa !16
  %5890 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %384) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5887, i32 noundef %5888, i32 noundef %5889, ptr noundef %5890)
          to label %5891 unwind label %5892

5891:                                             ; preds = %5879
  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 %5896

5892:                                             ; preds = %5879
  %5893 = landingpad { ptr, i32 }
          cleanup
  %5894 = extractvalue { ptr, i32 } %5893, 0
  store ptr %5894, ptr %23, align 8
  %5895 = extractvalue { ptr, i32 } %5893, 1
  store i32 %5895, ptr %24, 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
  call void @llvm.lifetime.end.p0(i64 4, ptr %383) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %382) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %381) #9
  br label %11527

5896:                                             ; preds = %5891, %5862
  call void @llvm.lifetime.end.p0(i64 4, ptr %383) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %382) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %381) #9
  br label %11526

5897:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %385) #9
  %5898 = load ptr, ptr %5, align 8, !tbaa !5
  %5899 = getelementptr inbounds i32, ptr %5898, i64 0
  %5900 = load i32, ptr %5899, align 4, !tbaa !16
  store i32 %5900, ptr %385, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %386) #9
  %5901 = load ptr, ptr %5, align 8, !tbaa !5
  %5902 = getelementptr inbounds i32, ptr %5901, i64 1
  %5903 = load i32, ptr %5902, align 4, !tbaa !16
  store i32 %5903, ptr %386, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %387) #9
  %5904 = load ptr, ptr %5, align 8, !tbaa !5
  %5905 = getelementptr inbounds i32, ptr %5904, i64 2
  %5906 = load i32, ptr %5905, align 4, !tbaa !16
  store i32 %5906, ptr %387, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %388) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %388) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %389) #9
  %5907 = load i32, ptr %385, align 4, !tbaa !16
  %5908 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %5907)
          to label %5909 unwind label %5913

5909:                                             ; preds = %5897
  store ptr %5908, ptr %389, align 8, !tbaa !5
  %5910 = load ptr, ptr %389, align 8, !tbaa !5
  %5911 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %5910, i32 0, i32 4
  %5912 = load i32, ptr %5911, align 8, !tbaa !129
  switch i32 %5912, label %6011 [
    i32 1, label %5917
    i32 2, label %5931
    i32 3, label %5945
    i32 4, label %5978
  ]

5913:                                             ; preds = %6025, %6023, %6018, %6013, %5897
  %5914 = landingpad { ptr, i32 }
          cleanup
  %5915 = extractvalue { ptr, i32 } %5914, 0
  store ptr %5915, ptr %23, align 8
  %5916 = extractvalue { ptr, i32 } %5914, 1
  store i32 %5916, ptr %24, align 4
  br label %6029

5917:                                             ; preds = %5909
  call void @llvm.lifetime.start.p0(i64 32, ptr %390) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %391) #9
  %5918 = load i32, ptr %387, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %391, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5918, i1 noundef zeroext true)
          to label %5919 unwind label %5922

5919:                                             ; preds = %5917
  invoke void @_ZN11spirv_cross4joinIJRA34_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA6_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %390, ptr noundef nonnull align 1 dereferenceable(34) @.str.1393, ptr noundef nonnull align 8 dereferenceable(32) %391, ptr noundef nonnull align 1 dereferenceable(6) @.str.1394)
          to label %5920 unwind label %5926

5920:                                             ; preds = %5919
  %5921 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %388, ptr noundef nonnull align 8 dereferenceable(32) %390) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %390) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %391) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %391) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %390) #9
  br label %6018

5922:                                             ; preds = %5917
  %5923 = landingpad { ptr, i32 }
          cleanup
  %5924 = extractvalue { ptr, i32 } %5923, 0
  store ptr %5924, ptr %23, align 8
  %5925 = extractvalue { ptr, i32 } %5923, 1
  store i32 %5925, ptr %24, align 4
  br label %5930

5926:                                             ; preds = %5919
  %5927 = landingpad { ptr, i32 }
          cleanup
  %5928 = extractvalue { ptr, i32 } %5927, 0
  store ptr %5928, ptr %23, align 8
  %5929 = extractvalue { ptr, i32 } %5927, 1
  store i32 %5929, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %391) #9
  br label %5930

5930:                                             ; preds = %5926, %5922
  call void @llvm.lifetime.end.p0(i64 32, ptr %391) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %390) #9
  br label %6029

5931:                                             ; preds = %5909
  call void @llvm.lifetime.start.p0(i64 32, ptr %392) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %393) #9
  %5932 = load i32, ptr %387, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %393, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5932, i1 noundef zeroext true)
          to label %5933 unwind label %5936

5933:                                             ; preds = %5931
  invoke void @_ZN11spirv_cross4joinIJRA29_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %392, ptr noundef nonnull align 1 dereferenceable(29) @.str.1395, ptr noundef nonnull align 8 dereferenceable(32) %393, ptr noundef nonnull align 1 dereferenceable(3) @.str.1016)
          to label %5934 unwind label %5940

5934:                                             ; preds = %5933
  %5935 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %388, ptr noundef nonnull align 8 dereferenceable(32) %392) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %392) #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 @llvm.lifetime.end.p0(i64 32, ptr %392) #9
  br label %6018

5936:                                             ; preds = %5931
  %5937 = landingpad { ptr, i32 }
          cleanup
  %5938 = extractvalue { ptr, i32 } %5937, 0
  store ptr %5938, ptr %23, align 8
  %5939 = extractvalue { ptr, i32 } %5937, 1
  store i32 %5939, ptr %24, align 4
  br label %5944

5940:                                             ; preds = %5933
  %5941 = landingpad { ptr, i32 }
          cleanup
  %5942 = extractvalue { ptr, i32 } %5941, 0
  store ptr %5942, ptr %23, align 8
  %5943 = extractvalue { ptr, i32 } %5941, 1
  store i32 %5943, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %393) #9
  br label %5944

5944:                                             ; preds = %5940, %5936
  call void @llvm.lifetime.end.p0(i64 32, ptr %393) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %392) #9
  br label %6029

5945:                                             ; preds = %5909
  call void @llvm.lifetime.start.p0(i64 32, ptr %394) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %395) #9
  %5946 = load i32, ptr %387, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %395, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5946, i1 noundef zeroext true)
          to label %5947 unwind label %5954

5947:                                             ; preds = %5945
  invoke void @_ZN11spirv_cross4joinIJRA29_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA6_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %394, ptr noundef nonnull align 1 dereferenceable(29) @.str.1395, ptr noundef nonnull align 8 dereferenceable(32) %395, ptr noundef nonnull align 1 dereferenceable(6) @.str.1396)
          to label %5948 unwind label %5958

5948:                                             ; preds = %5947
  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.start.p0(i64 32, ptr %396) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %397) #9
  %5949 = load i32, ptr %387, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %397, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5949, i1 noundef zeroext true)
          to label %5950 unwind label %5963

5950:                                             ; preds = %5948
  invoke void @_ZN11spirv_cross4joinIJRA29_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA8_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %396, ptr noundef nonnull align 1 dereferenceable(29) @.str.1395, ptr noundef nonnull align 8 dereferenceable(32) %397, ptr noundef nonnull align 1 dereferenceable(8) @.str.1397)
          to label %5951 unwind label %5967

5951:                                             ; preds = %5950
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %397) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %397) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %398) #9
  invoke void @_ZN11spirv_cross4joinIJRA6_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_SA_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %398, ptr noundef nonnull align 1 dereferenceable(6) @.str.1089, ptr noundef nonnull align 8 dereferenceable(32) %394, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %396, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %5952 unwind label %5972

5952:                                             ; preds = %5951
  %5953 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %388, ptr noundef nonnull align 8 dereferenceable(32) %398) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %398) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %398) #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) %394) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %394) #9
  br label %6018

5954:                                             ; preds = %5945
  %5955 = landingpad { ptr, i32 }
          cleanup
  %5956 = extractvalue { ptr, i32 } %5955, 0
  store ptr %5956, ptr %23, align 8
  %5957 = extractvalue { ptr, i32 } %5955, 1
  store i32 %5957, ptr %24, align 4
  br label %5962

5958:                                             ; preds = %5947
  %5959 = landingpad { ptr, i32 }
          cleanup
  %5960 = extractvalue { ptr, i32 } %5959, 0
  store ptr %5960, ptr %23, align 8
  %5961 = extractvalue { ptr, i32 } %5959, 1
  store i32 %5961, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %395) #9
  br label %5962

5962:                                             ; preds = %5958, %5954
  call void @llvm.lifetime.end.p0(i64 32, ptr %395) #9
  br label %5977

5963:                                             ; preds = %5948
  %5964 = landingpad { ptr, i32 }
          cleanup
  %5965 = extractvalue { ptr, i32 } %5964, 0
  store ptr %5965, ptr %23, align 8
  %5966 = extractvalue { ptr, i32 } %5964, 1
  store i32 %5966, ptr %24, align 4
  br label %5971

5967:                                             ; preds = %5950
  %5968 = landingpad { ptr, i32 }
          cleanup
  %5969 = extractvalue { ptr, i32 } %5968, 0
  store ptr %5969, ptr %23, align 8
  %5970 = extractvalue { ptr, i32 } %5968, 1
  store i32 %5970, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %397) #9
  br label %5971

5971:                                             ; preds = %5967, %5963
  call void @llvm.lifetime.end.p0(i64 32, ptr %397) #9
  br label %5976

5972:                                             ; preds = %5951
  %5973 = landingpad { ptr, i32 }
          cleanup
  %5974 = extractvalue { ptr, i32 } %5973, 0
  store ptr %5974, ptr %23, align 8
  %5975 = extractvalue { ptr, i32 } %5973, 1
  store i32 %5975, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %398) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %396) #9
  br label %5976

5976:                                             ; preds = %5972, %5971
  call void @llvm.lifetime.end.p0(i64 32, ptr %396) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %394) #9
  br label %5977

5977:                                             ; preds = %5976, %5962
  call void @llvm.lifetime.end.p0(i64 32, ptr %394) #9
  br label %6029

5978:                                             ; preds = %5909
  call void @llvm.lifetime.start.p0(i64 32, ptr %399) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %400) #9
  %5979 = load i32, ptr %387, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %400, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5979, i1 noundef zeroext true)
          to label %5980 unwind label %5987

5980:                                             ; preds = %5978
  invoke void @_ZN11spirv_cross4joinIJRA29_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA6_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %399, ptr noundef nonnull align 1 dereferenceable(29) @.str.1395, ptr noundef nonnull align 8 dereferenceable(32) %400, ptr noundef nonnull align 1 dereferenceable(6) @.str.1396)
          to label %5981 unwind label %5991

5981:                                             ; preds = %5980
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %400) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %400) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %401) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %402) #9
  %5982 = load i32, ptr %387, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %402, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %5982, i1 noundef zeroext true)
          to label %5983 unwind label %5996

5983:                                             ; preds = %5981
  invoke void @_ZN11spirv_cross4joinIJRA29_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA6_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %401, ptr noundef nonnull align 1 dereferenceable(29) @.str.1395, ptr noundef nonnull align 8 dereferenceable(32) %402, ptr noundef nonnull align 1 dereferenceable(6) @.str.1398)
          to label %5984 unwind label %6000

5984:                                             ; preds = %5983
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %402) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %402) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %403) #9
  invoke void @_ZN11spirv_cross4joinIJRA6_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_SA_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %403, ptr noundef nonnull align 1 dereferenceable(6) @.str.1399, ptr noundef nonnull align 8 dereferenceable(32) %399, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %401, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %5985 unwind label %6005

5985:                                             ; preds = %5984
  %5986 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %388, ptr noundef nonnull align 8 dereferenceable(32) %403) #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 @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %401) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %401) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %399) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %399) #9
  br label %6018

5987:                                             ; preds = %5978
  %5988 = landingpad { ptr, i32 }
          cleanup
  %5989 = extractvalue { ptr, i32 } %5988, 0
  store ptr %5989, ptr %23, align 8
  %5990 = extractvalue { ptr, i32 } %5988, 1
  store i32 %5990, ptr %24, align 4
  br label %5995

5991:                                             ; preds = %5980
  %5992 = landingpad { ptr, i32 }
          cleanup
  %5993 = extractvalue { ptr, i32 } %5992, 0
  store ptr %5993, ptr %23, align 8
  %5994 = extractvalue { ptr, i32 } %5992, 1
  store i32 %5994, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %400) #9
  br label %5995

5995:                                             ; preds = %5991, %5987
  call void @llvm.lifetime.end.p0(i64 32, ptr %400) #9
  br label %6010

5996:                                             ; preds = %5981
  %5997 = landingpad { ptr, i32 }
          cleanup
  %5998 = extractvalue { ptr, i32 } %5997, 0
  store ptr %5998, ptr %23, align 8
  %5999 = extractvalue { ptr, i32 } %5997, 1
  store i32 %5999, ptr %24, align 4
  br label %6004

6000:                                             ; preds = %5983
  %6001 = landingpad { ptr, i32 }
          cleanup
  %6002 = extractvalue { ptr, i32 } %6001, 0
  store ptr %6002, ptr %23, align 8
  %6003 = extractvalue { ptr, i32 } %6001, 1
  store i32 %6003, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %402) #9
  br label %6004

6004:                                             ; preds = %6000, %5996
  call void @llvm.lifetime.end.p0(i64 32, ptr %402) #9
  br label %6009

6005:                                             ; preds = %5984
  %6006 = landingpad { ptr, i32 }
          cleanup
  %6007 = extractvalue { ptr, i32 } %6006, 0
  store ptr %6007, ptr %23, align 8
  %6008 = extractvalue { ptr, i32 } %6006, 1
  store i32 %6008, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %403) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %401) #9
  br label %6009

6009:                                             ; preds = %6005, %6004
  call void @llvm.lifetime.end.p0(i64 32, ptr %401) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %399) #9
  br label %6010

6010:                                             ; preds = %6009, %5995
  call void @llvm.lifetime.end.p0(i64 32, ptr %399) #9
  br label %6029

6011:                                             ; preds = %5909
  %6012 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %6012, ptr noundef @.str.1400)
          to label %6013 unwind label %6014

6013:                                             ; preds = %6011
  invoke void @__cxa_throw(ptr %6012, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
          to label %11533 unwind label %5913

6014:                                             ; preds = %6011
  %6015 = landingpad { ptr, i32 }
          cleanup
  %6016 = extractvalue { ptr, i32 } %6015, 0
  store ptr %6016, ptr %23, align 8
  %6017 = extractvalue { ptr, i32 } %6015, 1
  store i32 %6017, ptr %24, align 4
  call void @__cxa_free_exception(ptr %6012) #9
  br label %6029

6018:                                             ; preds = %5985, %5952, %5934, %5920
  %6019 = load i32, ptr %385, align 4, !tbaa !16
  %6020 = load i32, ptr %386, align 4, !tbaa !16
  %6021 = load i32, ptr %387, align 4, !tbaa !16
  %6022 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6021)
          to label %6023 unwind label %5913

6023:                                             ; preds = %6018
  %6024 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6019, i32 noundef %6020, ptr noundef nonnull align 8 dereferenceable(32) %388, i1 noundef zeroext %6022, i1 noundef zeroext false)
          to label %6025 unwind label %5913

6025:                                             ; preds = %6023
  %6026 = load i32, ptr %386, align 4, !tbaa !16
  %6027 = load i32, ptr %387, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %6026, i32 noundef %6027)
          to label %6028 unwind label %5913

6028:                                             ; preds = %6025
  call void @llvm.lifetime.end.p0(i64 8, ptr %389) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %388) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %388) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %387) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %386) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %385) #9
  br label %11526

6029:                                             ; preds = %6014, %6010, %5977, %5944, %5930, %5913
  call void @llvm.lifetime.end.p0(i64 8, ptr %389) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %388) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %388) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %387) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %386) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %385) #9
  br label %11527

6030:                                             ; preds = %919
  %6031 = load ptr, ptr %5, align 8, !tbaa !5
  %6032 = getelementptr inbounds i32, ptr %6031, i64 0
  %6033 = load i32, ptr %6032, align 4, !tbaa !16
  %6034 = load ptr, ptr %5, align 8, !tbaa !5
  %6035 = getelementptr inbounds i32, ptr %6034, i64 1
  %6036 = load i32, ptr %6035, align 4, !tbaa !16
  %6037 = load ptr, ptr %5, align 8, !tbaa !5
  %6038 = getelementptr inbounds i32, ptr %6037, i64 2
  %6039 = load i32, ptr %6038, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6033, i32 noundef %6036, i32 noundef %6039, ptr noundef @.str.368)
  %6040 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL12is_legacy_esEv(ptr noundef nonnull align 8 dereferenceable(9848) %885)
  br i1 %6040, label %6041, label %6053

6041:                                             ; preds = %6030
  call void @llvm.lifetime.start.p0(i64 32, ptr %404) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %405) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %405) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %404, ptr noundef @.str.1401, ptr noundef nonnull align 1 dereferenceable(1) %405)
          to label %6042 unwind label %6044

6042:                                             ; preds = %6041
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %404)
          to label %6043 unwind label %6048

6043:                                             ; preds = %6042
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %404) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %405) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %405) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %404) #9
  br label %6053

6044:                                             ; preds = %6041
  %6045 = landingpad { ptr, i32 }
          cleanup
  %6046 = extractvalue { ptr, i32 } %6045, 0
  store ptr %6046, ptr %23, align 8
  %6047 = extractvalue { ptr, i32 } %6045, 1
  store i32 %6047, ptr %24, align 4
  br label %6052

6048:                                             ; preds = %6042
  %6049 = landingpad { ptr, i32 }
          cleanup
  %6050 = extractvalue { ptr, i32 } %6049, 0
  store ptr %6050, ptr %23, align 8
  %6051 = extractvalue { ptr, i32 } %6049, 1
  store i32 %6051, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %404) #9
  br label %6052

6052:                                             ; preds = %6048, %6044
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %405) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %405) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %404) #9
  br label %11527

6053:                                             ; preds = %6043, %6030
  %6054 = load ptr, ptr %5, align 8, !tbaa !5
  %6055 = getelementptr inbounds i32, ptr %6054, i64 1
  %6056 = load i32, ptr %6055, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6056)
  br label %11526

6057:                                             ; preds = %919
  %6058 = load ptr, ptr %5, align 8, !tbaa !5
  %6059 = getelementptr inbounds i32, ptr %6058, i64 0
  %6060 = load i32, ptr %6059, align 4, !tbaa !16
  %6061 = load ptr, ptr %5, align 8, !tbaa !5
  %6062 = getelementptr inbounds i32, ptr %6061, i64 1
  %6063 = load i32, ptr %6062, align 4, !tbaa !16
  %6064 = load ptr, ptr %5, align 8, !tbaa !5
  %6065 = getelementptr inbounds i32, ptr %6064, i64 2
  %6066 = load i32, ptr %6065, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6060, i32 noundef %6063, i32 noundef %6066, ptr noundef @.str.371)
  %6067 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL12is_legacy_esEv(ptr noundef nonnull align 8 dereferenceable(9848) %885)
  br i1 %6067, label %6068, label %6080

6068:                                             ; preds = %6057
  call void @llvm.lifetime.start.p0(i64 32, ptr %406) #9
  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 @.str.1401, ptr noundef nonnull align 1 dereferenceable(1) %407)
          to label %6069 unwind label %6071

6069:                                             ; preds = %6068
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %406)
          to label %6070 unwind label %6075

6070:                                             ; preds = %6069
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %406) #9
  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.end.p0(i64 32, ptr %406) #9
  br label %6080

6071:                                             ; preds = %6068
  %6072 = landingpad { ptr, i32 }
          cleanup
  %6073 = extractvalue { ptr, i32 } %6072, 0
  store ptr %6073, ptr %23, align 8
  %6074 = extractvalue { ptr, i32 } %6072, 1
  store i32 %6074, ptr %24, align 4
  br label %6079

6075:                                             ; preds = %6069
  %6076 = landingpad { ptr, i32 }
          cleanup
  %6077 = extractvalue { ptr, i32 } %6076, 0
  store ptr %6077, ptr %23, align 8
  %6078 = extractvalue { ptr, i32 } %6076, 1
  store i32 %6078, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %406) #9
  br label %6079

6079:                                             ; preds = %6075, %6071
  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.end.p0(i64 32, ptr %406) #9
  br label %11527

6080:                                             ; preds = %6070, %6057
  %6081 = load ptr, ptr %5, align 8, !tbaa !5
  %6082 = getelementptr inbounds i32, ptr %6081, i64 1
  %6083 = load i32, ptr %6082, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6083)
  br label %11526

6084:                                             ; preds = %919
  %6085 = load ptr, ptr %5, align 8, !tbaa !5
  %6086 = getelementptr inbounds i32, ptr %6085, i64 0
  %6087 = load i32, ptr %6086, align 4, !tbaa !16
  %6088 = load ptr, ptr %5, align 8, !tbaa !5
  %6089 = getelementptr inbounds i32, ptr %6088, i64 1
  %6090 = load i32, ptr %6089, align 4, !tbaa !16
  %6091 = load ptr, ptr %5, align 8, !tbaa !5
  %6092 = getelementptr inbounds i32, ptr %6091, i64 2
  %6093 = load i32, ptr %6092, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6087, i32 noundef %6090, i32 noundef %6093, ptr noundef @.str.370)
  %6094 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %6095 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %6094, i32 0, i32 1
  %6096 = load i8, ptr %6095, align 4, !tbaa !210, !range !127, !noundef !128
  %6097 = trunc i8 %6096 to i1
  br i1 %6097, label %6098, label %6105

6098:                                             ; preds = %6084
  %6099 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %6099, ptr noundef @.str.1402)
          to label %6100 unwind label %6101

6100:                                             ; preds = %6098
  call void @__cxa_throw(ptr %6099, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
  unreachable

6101:                                             ; preds = %6098
  %6102 = landingpad { ptr, i32 }
          cleanup
  %6103 = extractvalue { ptr, i32 } %6102, 0
  store ptr %6103, ptr %23, align 8
  %6104 = extractvalue { ptr, i32 } %6102, 1
  store i32 %6104, ptr %24, align 4
  call void @__cxa_free_exception(ptr %6099) #9
  br label %11527

6105:                                             ; preds = %6084
  %6106 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %6107 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %6106, i32 0, i32 0
  %6108 = load i32, ptr %6107, align 4, !tbaa !207
  %6109 = icmp ult i32 %6108, 450
  br i1 %6109, label %6110, label %6122

6110:                                             ; preds = %6105
  call void @llvm.lifetime.start.p0(i64 32, ptr %408) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %409) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %409) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %408, ptr noundef @.str.1403, ptr noundef nonnull align 1 dereferenceable(1) %409)
          to label %6111 unwind label %6113

6111:                                             ; preds = %6110
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %408)
          to label %6112 unwind label %6117

6112:                                             ; preds = %6111
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %408) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %409) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %409) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %408) #9
  br label %6122

6113:                                             ; preds = %6110
  %6114 = landingpad { ptr, i32 }
          cleanup
  %6115 = extractvalue { ptr, i32 } %6114, 0
  store ptr %6115, ptr %23, align 8
  %6116 = extractvalue { ptr, i32 } %6114, 1
  store i32 %6116, ptr %24, align 4
  br label %6121

6117:                                             ; preds = %6111
  %6118 = landingpad { ptr, i32 }
          cleanup
  %6119 = extractvalue { ptr, i32 } %6118, 0
  store ptr %6119, ptr %23, align 8
  %6120 = extractvalue { ptr, i32 } %6118, 1
  store i32 %6120, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %408) #9
  br label %6121

6121:                                             ; preds = %6117, %6113
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %409) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %409) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %408) #9
  br label %11527

6122:                                             ; preds = %6112, %6105
  %6123 = load ptr, ptr %5, align 8, !tbaa !5
  %6124 = getelementptr inbounds i32, ptr %6123, i64 1
  %6125 = load i32, ptr %6124, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6125)
  br label %11526

6126:                                             ; preds = %919
  %6127 = load ptr, ptr %5, align 8, !tbaa !5
  %6128 = getelementptr inbounds i32, ptr %6127, i64 0
  %6129 = load i32, ptr %6128, align 4, !tbaa !16
  %6130 = load ptr, ptr %5, align 8, !tbaa !5
  %6131 = getelementptr inbounds i32, ptr %6130, i64 1
  %6132 = load i32, ptr %6131, align 4, !tbaa !16
  %6133 = load ptr, ptr %5, align 8, !tbaa !5
  %6134 = getelementptr inbounds i32, ptr %6133, i64 2
  %6135 = load i32, ptr %6134, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6129, i32 noundef %6132, i32 noundef %6135, ptr noundef @.str.373)
  %6136 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %6137 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %6136, i32 0, i32 1
  %6138 = load i8, ptr %6137, align 4, !tbaa !210, !range !127, !noundef !128
  %6139 = trunc i8 %6138 to i1
  br i1 %6139, label %6140, label %6147

6140:                                             ; preds = %6126
  %6141 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %6141, ptr noundef @.str.1402)
          to label %6142 unwind label %6143

6142:                                             ; preds = %6140
  call void @__cxa_throw(ptr %6141, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
  unreachable

6143:                                             ; preds = %6140
  %6144 = landingpad { ptr, i32 }
          cleanup
  %6145 = extractvalue { ptr, i32 } %6144, 0
  store ptr %6145, ptr %23, align 8
  %6146 = extractvalue { ptr, i32 } %6144, 1
  store i32 %6146, ptr %24, align 4
  call void @__cxa_free_exception(ptr %6141) #9
  br label %11527

6147:                                             ; preds = %6126
  %6148 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %6149 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %6148, i32 0, i32 0
  %6150 = load i32, ptr %6149, align 4, !tbaa !207
  %6151 = icmp ult i32 %6150, 450
  br i1 %6151, label %6152, label %6164

6152:                                             ; preds = %6147
  call void @llvm.lifetime.start.p0(i64 32, ptr %410) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %411) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %411) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %410, ptr noundef @.str.1403, ptr noundef nonnull align 1 dereferenceable(1) %411)
          to label %6153 unwind label %6155

6153:                                             ; preds = %6152
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %410)
          to label %6154 unwind label %6159

6154:                                             ; preds = %6153
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %410) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %411) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %411) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %410) #9
  br label %6164

6155:                                             ; preds = %6152
  %6156 = landingpad { ptr, i32 }
          cleanup
  %6157 = extractvalue { ptr, i32 } %6156, 0
  store ptr %6157, ptr %23, align 8
  %6158 = extractvalue { ptr, i32 } %6156, 1
  store i32 %6158, ptr %24, align 4
  br label %6163

6159:                                             ; preds = %6153
  %6160 = landingpad { ptr, i32 }
          cleanup
  %6161 = extractvalue { ptr, i32 } %6160, 0
  store ptr %6161, ptr %23, align 8
  %6162 = extractvalue { ptr, i32 } %6160, 1
  store i32 %6162, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %410) #9
  br label %6163

6163:                                             ; preds = %6159, %6155
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %411) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %411) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %410) #9
  br label %11527

6164:                                             ; preds = %6154, %6147
  %6165 = load ptr, ptr %5, align 8, !tbaa !5
  %6166 = getelementptr inbounds i32, ptr %6165, i64 1
  %6167 = load i32, ptr %6166, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6167)
  br label %11526

6168:                                             ; preds = %919
  %6169 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %6170 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %6169, i32 0, i32 1
  %6171 = load i8, ptr %6170, align 4, !tbaa !210, !range !127, !noundef !128
  %6172 = trunc i8 %6171 to i1
  br i1 %6172, label %6173, label %6180

6173:                                             ; preds = %6168
  %6174 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %6174, ptr noundef @.str.1402)
          to label %6175 unwind label %6176

6175:                                             ; preds = %6173
  call void @__cxa_throw(ptr %6174, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
  unreachable

6176:                                             ; preds = %6173
  %6177 = landingpad { ptr, i32 }
          cleanup
  %6178 = extractvalue { ptr, i32 } %6177, 0
  store ptr %6178, ptr %23, align 8
  %6179 = extractvalue { ptr, i32 } %6177, 1
  store i32 %6179, ptr %24, align 4
  call void @__cxa_free_exception(ptr %6174) #9
  br label %11527

6180:                                             ; preds = %6168
  %6181 = load ptr, ptr %5, align 8, !tbaa !5
  %6182 = getelementptr inbounds i32, ptr %6181, i64 0
  %6183 = load i32, ptr %6182, align 4, !tbaa !16
  %6184 = load ptr, ptr %5, align 8, !tbaa !5
  %6185 = getelementptr inbounds i32, ptr %6184, i64 1
  %6186 = load i32, ptr %6185, align 4, !tbaa !16
  %6187 = load ptr, ptr %5, align 8, !tbaa !5
  %6188 = getelementptr inbounds i32, ptr %6187, i64 2
  %6189 = load i32, ptr %6188, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6183, i32 noundef %6186, i32 noundef %6189, ptr noundef @.str.369)
  %6190 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %6191 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %6190, i32 0, i32 0
  %6192 = load i32, ptr %6191, align 4, !tbaa !207
  %6193 = icmp ult i32 %6192, 450
  br i1 %6193, label %6194, label %6206

6194:                                             ; preds = %6180
  call void @llvm.lifetime.start.p0(i64 32, ptr %412) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %413) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %413) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %412, ptr noundef @.str.1403, ptr noundef nonnull align 1 dereferenceable(1) %413)
          to label %6195 unwind label %6197

6195:                                             ; preds = %6194
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %412)
          to label %6196 unwind label %6201

6196:                                             ; preds = %6195
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %412) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %413) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %413) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %412) #9
  br label %6206

6197:                                             ; preds = %6194
  %6198 = landingpad { ptr, i32 }
          cleanup
  %6199 = extractvalue { ptr, i32 } %6198, 0
  store ptr %6199, ptr %23, align 8
  %6200 = extractvalue { ptr, i32 } %6198, 1
  store i32 %6200, ptr %24, align 4
  br label %6205

6201:                                             ; preds = %6195
  %6202 = landingpad { ptr, i32 }
          cleanup
  %6203 = extractvalue { ptr, i32 } %6202, 0
  store ptr %6203, ptr %23, align 8
  %6204 = extractvalue { ptr, i32 } %6202, 1
  store i32 %6204, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %412) #9
  br label %6205

6205:                                             ; preds = %6201, %6197
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %413) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %413) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %412) #9
  br label %11527

6206:                                             ; preds = %6196, %6180
  %6207 = load ptr, ptr %5, align 8, !tbaa !5
  %6208 = getelementptr inbounds i32, ptr %6207, i64 1
  %6209 = load i32, ptr %6208, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6209)
  br label %11526

6210:                                             ; preds = %919
  %6211 = load ptr, ptr %5, align 8, !tbaa !5
  %6212 = getelementptr inbounds i32, ptr %6211, i64 0
  %6213 = load i32, ptr %6212, align 4, !tbaa !16
  %6214 = load ptr, ptr %5, align 8, !tbaa !5
  %6215 = getelementptr inbounds i32, ptr %6214, i64 1
  %6216 = load i32, ptr %6215, align 4, !tbaa !16
  %6217 = load ptr, ptr %5, align 8, !tbaa !5
  %6218 = getelementptr inbounds i32, ptr %6217, i64 2
  %6219 = load i32, ptr %6218, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6213, i32 noundef %6216, i32 noundef %6219, ptr noundef @.str.372)
  %6220 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %6221 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %6220, i32 0, i32 1
  %6222 = load i8, ptr %6221, align 4, !tbaa !210, !range !127, !noundef !128
  %6223 = trunc i8 %6222 to i1
  br i1 %6223, label %6224, label %6231

6224:                                             ; preds = %6210
  %6225 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %6225, ptr noundef @.str.1402)
          to label %6226 unwind label %6227

6226:                                             ; preds = %6224
  call void @__cxa_throw(ptr %6225, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
  unreachable

6227:                                             ; preds = %6224
  %6228 = landingpad { ptr, i32 }
          cleanup
  %6229 = extractvalue { ptr, i32 } %6228, 0
  store ptr %6229, ptr %23, align 8
  %6230 = extractvalue { ptr, i32 } %6228, 1
  store i32 %6230, ptr %24, align 4
  call void @__cxa_free_exception(ptr %6225) #9
  br label %11527

6231:                                             ; preds = %6210
  %6232 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %6233 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %6232, i32 0, i32 0
  %6234 = load i32, ptr %6233, align 4, !tbaa !207
  %6235 = icmp ult i32 %6234, 450
  br i1 %6235, label %6236, label %6248

6236:                                             ; preds = %6231
  call void @llvm.lifetime.start.p0(i64 32, ptr %414) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %415) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %415) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %414, ptr noundef @.str.1403, ptr noundef nonnull align 1 dereferenceable(1) %415)
          to label %6237 unwind label %6239

6237:                                             ; preds = %6236
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %414)
          to label %6238 unwind label %6243

6238:                                             ; preds = %6237
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %414) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %415) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %415) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %414) #9
  br label %6248

6239:                                             ; preds = %6236
  %6240 = landingpad { ptr, i32 }
          cleanup
  %6241 = extractvalue { ptr, i32 } %6240, 0
  store ptr %6241, ptr %23, align 8
  %6242 = extractvalue { ptr, i32 } %6240, 1
  store i32 %6242, ptr %24, align 4
  br label %6247

6243:                                             ; preds = %6237
  %6244 = landingpad { ptr, i32 }
          cleanup
  %6245 = extractvalue { ptr, i32 } %6244, 0
  store ptr %6245, ptr %23, align 8
  %6246 = extractvalue { ptr, i32 } %6244, 1
  store i32 %6246, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %414) #9
  br label %6247

6247:                                             ; preds = %6243, %6239
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %415) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %415) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %414) #9
  br label %11527

6248:                                             ; preds = %6238, %6231
  %6249 = load ptr, ptr %5, align 8, !tbaa !5
  %6250 = getelementptr inbounds i32, ptr %6249, i64 1
  %6251 = load i32, ptr %6250, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6251)
  br label %11526

6252:                                             ; preds = %919
  %6253 = load ptr, ptr %5, align 8, !tbaa !5
  %6254 = getelementptr inbounds i32, ptr %6253, i64 0
  %6255 = load i32, ptr %6254, align 4, !tbaa !16
  %6256 = load ptr, ptr %5, align 8, !tbaa !5
  %6257 = getelementptr inbounds i32, ptr %6256, i64 1
  %6258 = load i32, ptr %6257, align 4, !tbaa !16
  %6259 = load ptr, ptr %5, align 8, !tbaa !5
  %6260 = getelementptr inbounds i32, ptr %6259, i64 2
  %6261 = load i32, ptr %6260, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6255, i32 noundef %6258, i32 noundef %6261, ptr noundef @.str.394)
  %6262 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL12is_legacy_esEv(ptr noundef nonnull align 8 dereferenceable(9848) %885)
  br i1 %6262, label %6263, label %6275

6263:                                             ; preds = %6252
  call void @llvm.lifetime.start.p0(i64 32, ptr %416) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %417) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %417) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %416, ptr noundef @.str.1401, ptr noundef nonnull align 1 dereferenceable(1) %417)
          to label %6264 unwind label %6266

6264:                                             ; preds = %6263
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %416)
          to label %6265 unwind label %6270

6265:                                             ; preds = %6264
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %416) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %417) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %417) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %416) #9
  br label %6275

6266:                                             ; preds = %6263
  %6267 = landingpad { ptr, i32 }
          cleanup
  %6268 = extractvalue { ptr, i32 } %6267, 0
  store ptr %6268, ptr %23, align 8
  %6269 = extractvalue { ptr, i32 } %6267, 1
  store i32 %6269, ptr %24, align 4
  br label %6274

6270:                                             ; preds = %6264
  %6271 = landingpad { ptr, i32 }
          cleanup
  %6272 = extractvalue { ptr, i32 } %6271, 0
  store ptr %6272, ptr %23, align 8
  %6273 = extractvalue { ptr, i32 } %6271, 1
  store i32 %6273, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %416) #9
  br label %6274

6274:                                             ; preds = %6270, %6266
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %417) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %417) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %416) #9
  br label %11527

6275:                                             ; preds = %6265, %6252
  %6276 = load ptr, ptr %5, align 8, !tbaa !5
  %6277 = getelementptr inbounds i32, ptr %6276, i64 1
  %6278 = load i32, ptr %6277, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6278)
  br label %11526

6279:                                             ; preds = %919
  %6280 = load ptr, ptr %5, align 8, !tbaa !5
  %6281 = getelementptr inbounds i32, ptr %6280, i64 0
  %6282 = load i32, ptr %6281, align 4, !tbaa !16
  %6283 = load ptr, ptr %5, align 8, !tbaa !5
  %6284 = getelementptr inbounds i32, ptr %6283, i64 1
  %6285 = load i32, ptr %6284, align 4, !tbaa !16
  %6286 = load ptr, ptr %5, align 8, !tbaa !5
  %6287 = getelementptr inbounds i32, ptr %6286, i64 2
  %6288 = load i32, ptr %6287, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6282, i32 noundef %6285, i32 noundef %6288, ptr noundef @.str.395)
  %6289 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %6290 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %6289, i32 0, i32 1
  %6291 = load i8, ptr %6290, align 4, !tbaa !210, !range !127, !noundef !128
  %6292 = trunc i8 %6291 to i1
  br i1 %6292, label %6293, label %6300

6293:                                             ; preds = %6279
  %6294 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %6294, ptr noundef @.str.1402)
          to label %6295 unwind label %6296

6295:                                             ; preds = %6293
  call void @__cxa_throw(ptr %6294, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
  unreachable

6296:                                             ; preds = %6293
  %6297 = landingpad { ptr, i32 }
          cleanup
  %6298 = extractvalue { ptr, i32 } %6297, 0
  store ptr %6298, ptr %23, align 8
  %6299 = extractvalue { ptr, i32 } %6297, 1
  store i32 %6299, ptr %24, align 4
  call void @__cxa_free_exception(ptr %6294) #9
  br label %11527

6300:                                             ; preds = %6279
  %6301 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %6302 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %6301, i32 0, i32 0
  %6303 = load i32, ptr %6302, align 4, !tbaa !207
  %6304 = icmp ult i32 %6303, 450
  br i1 %6304, label %6305, label %6317

6305:                                             ; preds = %6300
  call void @llvm.lifetime.start.p0(i64 32, ptr %418) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %419) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %419) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %418, ptr noundef @.str.1403, ptr noundef nonnull align 1 dereferenceable(1) %419)
          to label %6306 unwind label %6308

6306:                                             ; preds = %6305
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %418)
          to label %6307 unwind label %6312

6307:                                             ; preds = %6306
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %418) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %419) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %419) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %418) #9
  br label %6317

6308:                                             ; preds = %6305
  %6309 = landingpad { ptr, i32 }
          cleanup
  %6310 = extractvalue { ptr, i32 } %6309, 0
  store ptr %6310, ptr %23, align 8
  %6311 = extractvalue { ptr, i32 } %6309, 1
  store i32 %6311, ptr %24, align 4
  br label %6316

6312:                                             ; preds = %6306
  %6313 = landingpad { ptr, i32 }
          cleanup
  %6314 = extractvalue { ptr, i32 } %6313, 0
  store ptr %6314, ptr %23, align 8
  %6315 = extractvalue { ptr, i32 } %6313, 1
  store i32 %6315, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %418) #9
  br label %6316

6316:                                             ; preds = %6312, %6308
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %419) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %419) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %418) #9
  br label %11527

6317:                                             ; preds = %6307, %6300
  %6318 = load ptr, ptr %5, align 8, !tbaa !5
  %6319 = getelementptr inbounds i32, ptr %6318, i64 1
  %6320 = load i32, ptr %6319, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6320)
  br label %11526

6321:                                             ; preds = %919
  %6322 = load ptr, ptr %5, align 8, !tbaa !5
  %6323 = getelementptr inbounds i32, ptr %6322, i64 0
  %6324 = load i32, ptr %6323, align 4, !tbaa !16
  %6325 = load ptr, ptr %5, align 8, !tbaa !5
  %6326 = getelementptr inbounds i32, ptr %6325, i64 1
  %6327 = load i32, ptr %6326, align 4, !tbaa !16
  %6328 = load ptr, ptr %5, align 8, !tbaa !5
  %6329 = getelementptr inbounds i32, ptr %6328, i64 2
  %6330 = load i32, ptr %6329, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6324, i32 noundef %6327, i32 noundef %6330, ptr noundef @.str.396)
  %6331 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %6332 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %6331, i32 0, i32 1
  %6333 = load i8, ptr %6332, align 4, !tbaa !210, !range !127, !noundef !128
  %6334 = trunc i8 %6333 to i1
  br i1 %6334, label %6335, label %6342

6335:                                             ; preds = %6321
  %6336 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %6336, ptr noundef @.str.1402)
          to label %6337 unwind label %6338

6337:                                             ; preds = %6335
  call void @__cxa_throw(ptr %6336, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
  unreachable

6338:                                             ; preds = %6335
  %6339 = landingpad { ptr, i32 }
          cleanup
  %6340 = extractvalue { ptr, i32 } %6339, 0
  store ptr %6340, ptr %23, align 8
  %6341 = extractvalue { ptr, i32 } %6339, 1
  store i32 %6341, ptr %24, align 4
  call void @__cxa_free_exception(ptr %6336) #9
  br label %11527

6342:                                             ; preds = %6321
  %6343 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %6344 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %6343, i32 0, i32 0
  %6345 = load i32, ptr %6344, align 4, !tbaa !207
  %6346 = icmp ult i32 %6345, 450
  br i1 %6346, label %6347, label %6359

6347:                                             ; preds = %6342
  call void @llvm.lifetime.start.p0(i64 32, ptr %420) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %421) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %421) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %420, ptr noundef @.str.1403, ptr noundef nonnull align 1 dereferenceable(1) %421)
          to label %6348 unwind label %6350

6348:                                             ; preds = %6347
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %420)
          to label %6349 unwind label %6354

6349:                                             ; preds = %6348
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %420) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %421) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %421) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %420) #9
  br label %6359

6350:                                             ; preds = %6347
  %6351 = landingpad { ptr, i32 }
          cleanup
  %6352 = extractvalue { ptr, i32 } %6351, 0
  store ptr %6352, ptr %23, align 8
  %6353 = extractvalue { ptr, i32 } %6351, 1
  store i32 %6353, ptr %24, align 4
  br label %6358

6354:                                             ; preds = %6348
  %6355 = landingpad { ptr, i32 }
          cleanup
  %6356 = extractvalue { ptr, i32 } %6355, 0
  store ptr %6356, ptr %23, align 8
  %6357 = extractvalue { ptr, i32 } %6355, 1
  store i32 %6357, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %420) #9
  br label %6358

6358:                                             ; preds = %6354, %6350
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %421) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %421) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %420) #9
  br label %11527

6359:                                             ; preds = %6349, %6342
  %6360 = load ptr, ptr %5, align 8, !tbaa !5
  %6361 = getelementptr inbounds i32, ptr %6360, i64 1
  %6362 = load i32, ptr %6361, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6362)
  br label %11526

6363:                                             ; preds = %919
  %6364 = load ptr, ptr %5, align 8, !tbaa !5
  %6365 = getelementptr inbounds i32, ptr %6364, i64 0
  %6366 = load i32, ptr %6365, align 4, !tbaa !16
  %6367 = load ptr, ptr %5, align 8, !tbaa !5
  %6368 = getelementptr inbounds i32, ptr %6367, i64 1
  %6369 = load i32, ptr %6368, align 4, !tbaa !16
  %6370 = load ptr, ptr %5, align 8, !tbaa !5
  %6371 = getelementptr inbounds i32, ptr %6370, i64 2
  %6372 = load i32, ptr %6371, align 4, !tbaa !16
  %6373 = load ptr, ptr %5, align 8, !tbaa !5
  %6374 = getelementptr inbounds i32, ptr %6373, i64 3
  %6375 = load i32, ptr %6374, align 4, !tbaa !16
  %6376 = load ptr, ptr %5, align 8, !tbaa !5
  %6377 = getelementptr inbounds i32, ptr %6376, i64 4
  %6378 = load i32, ptr %6377, align 4, !tbaa !16
  %6379 = load ptr, ptr %5, align 8, !tbaa !5
  %6380 = getelementptr inbounds i32, ptr %6379, i64 5
  %6381 = load i32, ptr %6380, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL23emit_bitfield_insert_opEjjjjjjPKcNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6366, i32 noundef %6369, i32 noundef %6372, i32 noundef %6375, i32 noundef %6378, i32 noundef %6381, ptr noundef @.str.361, i32 noundef 7)
  br label %11526

6382:                                             ; preds = %919
  %6383 = load ptr, ptr %5, align 8, !tbaa !5
  %6384 = getelementptr inbounds i32, ptr %6383, i64 0
  %6385 = load i32, ptr %6384, align 4, !tbaa !16
  %6386 = load ptr, ptr %5, align 8, !tbaa !5
  %6387 = getelementptr inbounds i32, ptr %6386, i64 1
  %6388 = load i32, ptr %6387, align 4, !tbaa !16
  %6389 = load ptr, ptr %5, align 8, !tbaa !5
  %6390 = getelementptr inbounds i32, ptr %6389, i64 2
  %6391 = load i32, ptr %6390, align 4, !tbaa !16
  %6392 = load ptr, ptr %5, align 8, !tbaa !5
  %6393 = getelementptr inbounds i32, ptr %6392, i64 3
  %6394 = load i32, ptr %6393, align 4, !tbaa !16
  %6395 = load ptr, ptr %5, align 8, !tbaa !5
  %6396 = getelementptr inbounds i32, ptr %6395, i64 4
  %6397 = load i32, ptr %6396, align 4, !tbaa !16
  %6398 = load i32, ptr %9, align 4, !tbaa !17
  %6399 = load i32, ptr %9, align 4, !tbaa !17
  call void @_ZN11spirv_cross12CompilerGLSL31emit_trinary_func_op_bitextractEjjjjjPKcNS_8SPIRType8BaseTypeES4_S4_S4_(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6385, i32 noundef %6388, i32 noundef %6391, i32 noundef %6394, i32 noundef %6397, ptr noundef @.str.360, i32 noundef %6398, i32 noundef %6399, i32 noundef 7, i32 noundef 7)
  br label %11526

6400:                                             ; preds = %919
  %6401 = load ptr, ptr %5, align 8, !tbaa !5
  %6402 = getelementptr inbounds i32, ptr %6401, i64 0
  %6403 = load i32, ptr %6402, align 4, !tbaa !16
  %6404 = load ptr, ptr %5, align 8, !tbaa !5
  %6405 = getelementptr inbounds i32, ptr %6404, i64 1
  %6406 = load i32, ptr %6405, align 4, !tbaa !16
  %6407 = load ptr, ptr %5, align 8, !tbaa !5
  %6408 = getelementptr inbounds i32, ptr %6407, i64 2
  %6409 = load i32, ptr %6408, align 4, !tbaa !16
  %6410 = load ptr, ptr %5, align 8, !tbaa !5
  %6411 = getelementptr inbounds i32, ptr %6410, i64 3
  %6412 = load i32, ptr %6411, align 4, !tbaa !16
  %6413 = load ptr, ptr %5, align 8, !tbaa !5
  %6414 = getelementptr inbounds i32, ptr %6413, i64 4
  %6415 = load i32, ptr %6414, align 4, !tbaa !16
  %6416 = load i32, ptr %10, align 4, !tbaa !17
  %6417 = load i32, ptr %10, align 4, !tbaa !17
  call void @_ZN11spirv_cross12CompilerGLSL31emit_trinary_func_op_bitextractEjjjjjPKcNS_8SPIRType8BaseTypeES4_S4_S4_(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6403, i32 noundef %6406, i32 noundef %6409, i32 noundef %6412, i32 noundef %6415, ptr noundef @.str.360, i32 noundef %6416, i32 noundef %6417, i32 noundef 7, i32 noundef 7)
  br label %11526

6418:                                             ; preds = %919
  %6419 = load ptr, ptr %5, align 8, !tbaa !5
  %6420 = getelementptr inbounds i32, ptr %6419, i64 0
  %6421 = load i32, ptr %6420, align 4, !tbaa !16
  %6422 = load ptr, ptr %5, align 8, !tbaa !5
  %6423 = getelementptr inbounds i32, ptr %6422, i64 1
  %6424 = load i32, ptr %6423, align 4, !tbaa !16
  %6425 = load ptr, ptr %5, align 8, !tbaa !5
  %6426 = getelementptr inbounds i32, ptr %6425, i64 2
  %6427 = load i32, ptr %6426, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6421, i32 noundef %6424, i32 noundef %6427, ptr noundef @.str.362)
  br label %11526

6428:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %422) #9
  %6429 = load ptr, ptr %5, align 8, !tbaa !5
  %6430 = getelementptr inbounds i32, ptr %6429, i64 2
  %6431 = load i32, ptr %6430, align 4, !tbaa !16
  %6432 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %6431)
  %6433 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %6432, i32 0, i32 2
  %6434 = load i32, ptr %6433, align 8, !tbaa !148
  store i32 %6434, ptr %422, align 4, !tbaa !17
  %6435 = load ptr, ptr %5, align 8, !tbaa !5
  %6436 = getelementptr inbounds i32, ptr %6435, i64 0
  %6437 = load i32, ptr %6436, align 4, !tbaa !16
  %6438 = load ptr, ptr %5, align 8, !tbaa !5
  %6439 = getelementptr inbounds i32, ptr %6438, i64 1
  %6440 = load i32, ptr %6439, align 4, !tbaa !16
  %6441 = load ptr, ptr %5, align 8, !tbaa !5
  %6442 = getelementptr inbounds i32, ptr %6441, i64 2
  %6443 = load i32, ptr %6442, align 4, !tbaa !16
  %6444 = load i32, ptr %422, align 4, !tbaa !17
  %6445 = load i32, ptr %9, align 4, !tbaa !17
  call void @_ZN11spirv_cross12CompilerGLSL23emit_unary_func_op_castEjjjPKcNS_8SPIRType8BaseTypeES4_(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6437, i32 noundef %6440, i32 noundef %6443, ptr noundef @.str.359, i32 noundef %6444, i32 noundef %6445)
  call void @llvm.lifetime.end.p0(i64 4, ptr %422) #9
  br label %11526

6446:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %423) #9
  %6447 = load ptr, ptr %5, align 8, !tbaa !5
  %6448 = getelementptr inbounds i32, ptr %6447, i64 0
  %6449 = load i32, ptr %6448, align 4, !tbaa !16
  store i32 %6449, ptr %423, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %424) #9
  %6450 = load ptr, ptr %5, align 8, !tbaa !5
  %6451 = getelementptr inbounds i32, ptr %6450, i64 1
  %6452 = load i32, ptr %6451, align 4, !tbaa !16
  store i32 %6452, ptr %424, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %425) #9
  %6453 = load ptr, ptr %5, align 8, !tbaa !5
  %6454 = getelementptr inbounds i32, ptr %6453, i64 2
  %6455 = load i32, ptr %6454, align 4, !tbaa !16
  store i32 %6455, ptr %425, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %426) #9
  %6456 = load ptr, ptr %5, align 8, !tbaa !5
  %6457 = getelementptr inbounds i32, ptr %6456, i64 5
  %6458 = load i32, ptr %6457, align 4, !tbaa !16
  store i32 %6458, ptr %426, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %427) #9
  %6459 = load i32, ptr %425, align 4, !tbaa !16
  %6460 = call noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL18check_atomic_imageEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6459)
  %6461 = zext i1 %6460 to i64
  %6462 = select i1 %6460, ptr @.str.403, ptr @.str.354
  store ptr %6462, ptr %427, align 8, !tbaa !5
  %6463 = load i32, ptr %423, align 4, !tbaa !16
  %6464 = load i32, ptr %424, align 4, !tbaa !16
  %6465 = load i32, ptr %425, align 4, !tbaa !16
  %6466 = load i32, ptr %426, align 4, !tbaa !16
  %6467 = load ptr, ptr %427, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL19emit_atomic_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6463, i32 noundef %6464, i32 noundef %6465, i32 noundef %6466, ptr noundef %6467)
  call void @llvm.lifetime.end.p0(i64 8, ptr %427) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %426) #9
  call void @llvm.lifetime.end.p0(i64 4, 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
  br label %11526

6468:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %428) #9
  %6469 = load ptr, ptr %5, align 8, !tbaa !5
  %6470 = getelementptr inbounds i32, ptr %6469, i64 0
  %6471 = load i32, ptr %6470, align 4, !tbaa !16
  store i32 %6471, ptr %428, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %429) #9
  %6472 = load ptr, ptr %5, align 8, !tbaa !5
  %6473 = getelementptr inbounds i32, ptr %6472, i64 1
  %6474 = load i32, ptr %6473, align 4, !tbaa !16
  store i32 %6474, ptr %429, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %430) #9
  %6475 = load ptr, ptr %5, align 8, !tbaa !5
  %6476 = getelementptr inbounds i32, ptr %6475, i64 2
  %6477 = load i32, ptr %6476, align 4, !tbaa !16
  store i32 %6477, ptr %430, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %431) #9
  %6478 = load ptr, ptr %5, align 8, !tbaa !5
  %6479 = getelementptr inbounds i32, ptr %6478, i64 6
  %6480 = load i32, ptr %6479, align 4, !tbaa !16
  store i32 %6480, ptr %431, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %432) #9
  %6481 = load ptr, ptr %5, align 8, !tbaa !5
  %6482 = getelementptr inbounds i32, ptr %6481, i64 7
  %6483 = load i32, ptr %6482, align 4, !tbaa !16
  store i32 %6483, ptr %432, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %433) #9
  %6484 = load i32, ptr %430, align 4, !tbaa !16
  %6485 = call noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL18check_atomic_imageEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6484)
  %6486 = zext i1 %6485 to i64
  %6487 = select i1 %6485, ptr @.str.402, ptr @.str.350
  store ptr %6487, ptr %433, align 8, !tbaa !5
  %6488 = load i32, ptr %428, align 4, !tbaa !16
  %6489 = load i32, ptr %429, align 4, !tbaa !16
  %6490 = load i32, ptr %430, align 4, !tbaa !16
  %6491 = load i32, ptr %432, align 4, !tbaa !16
  %6492 = load i32, ptr %431, align 4, !tbaa !16
  %6493 = load ptr, ptr %433, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL19emit_atomic_func_opEjjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6488, i32 noundef %6489, i32 noundef %6490, i32 noundef %6491, i32 noundef %6492, ptr noundef %6493)
  call void @llvm.lifetime.end.p0(i64 8, ptr %433) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %432) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %431) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %430) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %429) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %428) #9
  br label %11526

6494:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 8, ptr %434) #9
  %6495 = load ptr, ptr %5, align 8, !tbaa !5
  %6496 = getelementptr inbounds i32, ptr %6495, i64 2
  %6497 = load i32, ptr %6496, align 4, !tbaa !16
  %6498 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %6497)
  store ptr %6498, ptr %434, align 8, !tbaa !5
  %6499 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %885, i32 0, i32 15
  %6500 = load ptr, ptr %5, align 8, !tbaa !5
  %6501 = getelementptr inbounds i32, ptr %6500, i64 1
  %6502 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %6499, ptr noundef nonnull align 4 dereferenceable(4) %6501)
  %6503 = getelementptr inbounds { ptr, i8 }, ptr %435, i32 0, i32 0
  %6504 = extractvalue { ptr, i8 } %6502, 0
  store ptr %6504, ptr %6503, align 8
  %6505 = getelementptr inbounds { ptr, i8 }, ptr %435, i32 0, i32 1
  %6506 = extractvalue { ptr, i8 } %6502, 1
  store i8 %6506, ptr %6505, align 8
  call void @llvm.lifetime.start.p0(i64 1, ptr %436) #9
  %6507 = load ptr, ptr %5, align 8, !tbaa !5
  %6508 = getelementptr inbounds i32, ptr %6507, i64 2
  %6509 = load i32, ptr %6508, align 4, !tbaa !16
  %6510 = call noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL18check_atomic_imageEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6509)
  %6511 = zext i1 %6510 to i8
  store i8 %6511, ptr %436, align 1, !tbaa !142
  call void @llvm.lifetime.start.p0(i64 1, ptr %437) #9
  %6512 = load ptr, ptr %434, align 8, !tbaa !5
  %6513 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %6512, i32 0, i32 2
  %6514 = load i32, ptr %6513, align 8, !tbaa !148
  %6515 = icmp eq i32 %6514, 8
  br i1 %6515, label %6530, label %6516

6516:                                             ; preds = %6494
  %6517 = load i8, ptr %436, align 1, !tbaa !142, !range !127, !noundef !128
  %6518 = trunc i8 %6517 to i1
  br i1 %6518, label %6519, label %6528

6519:                                             ; preds = %6516
  %6520 = load ptr, ptr %434, align 8, !tbaa !5
  %6521 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %6520, i32 0, i32 14
  %6522 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %6521, i32 0, i32 0
  %6523 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %6522)
  %6524 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %6523)
  %6525 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %6524, i32 0, i32 2
  %6526 = load i32, ptr %6525, align 8, !tbaa !148
  %6527 = icmp eq i32 %6526, 8
  br label %6528

6528:                                             ; preds = %6519, %6516
  %6529 = phi i1 [ false, %6516 ], [ %6527, %6519 ]
  br label %6530

6530:                                             ; preds = %6528, %6494
  %6531 = phi i1 [ true, %6494 ], [ %6529, %6528 ]
  %6532 = zext i1 %6531 to i8
  store i8 %6532, ptr %437, align 1, !tbaa !142
  call void @llvm.lifetime.start.p0(i64 8, ptr %438) #9
  %6533 = load i8, ptr %436, align 1, !tbaa !142, !range !127, !noundef !128
  %6534 = trunc i8 %6533 to i1
  %6535 = zext i1 %6534 to i64
  %6536 = select i1 %6534, ptr @.str.400, ptr @.str.349
  store ptr %6536, ptr %438, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %439) #9
  %6537 = load i8, ptr %437, align 1, !tbaa !142, !range !127, !noundef !128
  %6538 = trunc i8 %6537 to i1
  %6539 = zext i1 %6538 to i64
  %6540 = select i1 %6538, ptr @.str.756, ptr @.str.760
  store ptr %6540, ptr %439, align 8, !tbaa !5
  %6541 = load ptr, ptr %5, align 8, !tbaa !5
  %6542 = getelementptr inbounds i32, ptr %6541, i64 0
  %6543 = load i32, ptr %6542, align 4, !tbaa !16
  %6544 = load ptr, ptr %5, align 8, !tbaa !5
  %6545 = getelementptr inbounds i32, ptr %6544, i64 1
  %6546 = load i32, ptr %6545, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %440) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %441) #9
  %6547 = load ptr, ptr %5, align 8, !tbaa !5
  %6548 = getelementptr inbounds i32, ptr %6547, i64 2
  %6549 = load i32, ptr %6548, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %441, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6549)
  invoke void @_ZN11spirv_cross4joinIJRPKcRA2_S1_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_S3_S5_EEESB_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %440, ptr noundef nonnull align 8 dereferenceable(8) %438, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %441, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(8) %439, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %6550 unwind label %6553

6550:                                             ; preds = %6530
  %6551 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6543, i32 noundef %6546, ptr noundef nonnull align 8 dereferenceable(32) %440, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %6552 unwind label %6557

6552:                                             ; preds = %6550
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %440) #9
  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 32, ptr %440) #9
  call void @_ZN11spirv_cross8Compiler34flush_all_atomic_capable_variablesEv(ptr noundef nonnull align 8 dereferenceable(3176) %885)
  call void @llvm.lifetime.end.p0(i64 8, ptr %439) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %438) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %437) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %436) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %434) #9
  br label %11526

6553:                                             ; preds = %6530
  %6554 = landingpad { ptr, i32 }
          cleanup
  %6555 = extractvalue { ptr, i32 } %6554, 0
  store ptr %6555, ptr %23, align 8
  %6556 = extractvalue { ptr, i32 } %6554, 1
  store i32 %6556, ptr %24, align 4
  br label %6561

6557:                                             ; preds = %6550
  %6558 = landingpad { ptr, i32 }
          cleanup
  %6559 = extractvalue { ptr, i32 } %6558, 0
  store ptr %6559, ptr %23, align 8
  %6560 = extractvalue { ptr, i32 } %6558, 1
  store i32 %6560, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %440) #9
  br label %6561

6561:                                             ; preds = %6557, %6553
  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 32, ptr %440) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %439) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %438) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %437) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %436) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %434) #9
  br label %11527

6562:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %442) #9
  %6563 = load ptr, ptr %5, align 8, !tbaa !5
  %6564 = getelementptr inbounds i32, ptr %6563, i64 0
  %6565 = load i32, ptr %6564, align 4, !tbaa !16
  store i32 %6565, ptr %442, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %443) #9
  %6566 = load ptr, ptr %5, align 8, !tbaa !5
  %6567 = getelementptr inbounds i32, ptr %6566, i64 3
  %6568 = load i32, ptr %6567, align 4, !tbaa !16
  store i32 %6568, ptr %443, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %444) #9
  %6569 = load i32, ptr %442, align 4, !tbaa !16
  %6570 = call noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL18check_atomic_imageEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6569)
  %6571 = zext i1 %6570 to i64
  %6572 = select i1 %6570, ptr @.str.403, ptr @.str.354
  store ptr %6572, ptr %444, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %445) #9
  %6573 = load i32, ptr %442, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %445, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6573)
  call void @llvm.lifetime.start.p0(i64 32, ptr %446) #9
  %6574 = load i32, ptr %443, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %446, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6574, i1 noundef zeroext true)
          to label %6575 unwind label %6577

6575:                                             ; preds = %6562
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRPKcRA2_S2_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_SC_SE_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(8) %444, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %445, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %446, ptr noundef nonnull align 1 dereferenceable(3) @.str.751)
          to label %6576 unwind label %6581

6576:                                             ; preds = %6575
  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
  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 @_ZN11spirv_cross8Compiler34flush_all_atomic_capable_variablesEv(ptr noundef nonnull align 8 dereferenceable(3176) %885)
  call void @llvm.lifetime.end.p0(i64 8, ptr %444) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %443) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %442) #9
  br label %11526

6577:                                             ; preds = %6562
  %6578 = landingpad { ptr, i32 }
          cleanup
  %6579 = extractvalue { ptr, i32 } %6578, 0
  store ptr %6579, ptr %23, align 8
  %6580 = extractvalue { ptr, i32 } %6578, 1
  store i32 %6580, ptr %24, align 4
  br label %6585

6581:                                             ; preds = %6575
  %6582 = landingpad { ptr, i32 }
          cleanup
  %6583 = extractvalue { ptr, i32 } %6582, 0
  store ptr %6583, ptr %23, align 8
  %6584 = extractvalue { ptr, i32 } %6582, 1
  store i32 %6584, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %446) #9
  br label %6585

6585:                                             ; preds = %6581, %6577
  call void @llvm.lifetime.end.p0(i64 32, ptr %446) #9
  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 @llvm.lifetime.end.p0(i64 8, ptr %444) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %443) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %442) #9
  br label %11527

6586:                                             ; preds = %919, %919
  %6587 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %885, i32 0, i32 15
  %6588 = load ptr, ptr %5, align 8, !tbaa !5
  %6589 = getelementptr inbounds i32, ptr %6588, i64 1
  %6590 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %6587, ptr noundef nonnull align 4 dereferenceable(4) %6589)
  %6591 = getelementptr inbounds { ptr, i8 }, ptr %447, i32 0, i32 0
  %6592 = extractvalue { ptr, i8 } %6590, 0
  store ptr %6592, ptr %6591, align 8
  %6593 = getelementptr inbounds { ptr, i8 }, ptr %447, i32 0, i32 1
  %6594 = extractvalue { ptr, i8 } %6590, 1
  store i8 %6594, ptr %6593, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %448) #9
  %6595 = load ptr, ptr %5, align 8, !tbaa !5
  %6596 = getelementptr inbounds i32, ptr %6595, i64 2
  %6597 = load i32, ptr %6596, align 4, !tbaa !16
  %6598 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %6597)
  store ptr %6598, ptr %448, align 8, !tbaa !5
  %6599 = load ptr, ptr %448, align 8, !tbaa !5
  %6600 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %6599, i32 0, i32 11
  %6601 = load i32, ptr %6600, align 8, !tbaa !212
  %6602 = icmp eq i32 %6601, 10
  br i1 %6602, label %6603, label %6627

6603:                                             ; preds = %6586
  %6604 = load i32, ptr %6, align 4, !tbaa !13
  %6605 = icmp eq i32 %6604, 232
  br i1 %6605, label %6606, label %6616

6606:                                             ; preds = %6603
  %6607 = load ptr, ptr %5, align 8, !tbaa !5
  %6608 = getelementptr inbounds i32, ptr %6607, i64 0
  %6609 = load i32, ptr %6608, align 4, !tbaa !16
  %6610 = load ptr, ptr %5, align 8, !tbaa !5
  %6611 = getelementptr inbounds i32, ptr %6610, i64 1
  %6612 = load i32, ptr %6611, align 4, !tbaa !16
  %6613 = load ptr, ptr %5, align 8, !tbaa !5
  %6614 = getelementptr inbounds i32, ptr %6613, i64 2
  %6615 = load i32, ptr %6614, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6609, i32 noundef %6612, i32 noundef %6615, ptr noundef @.str.353)
  br label %6626

6616:                                             ; preds = %6603
  %6617 = load ptr, ptr %5, align 8, !tbaa !5
  %6618 = getelementptr inbounds i32, ptr %6617, i64 0
  %6619 = load i32, ptr %6618, align 4, !tbaa !16
  %6620 = load ptr, ptr %5, align 8, !tbaa !5
  %6621 = getelementptr inbounds i32, ptr %6620, i64 1
  %6622 = load i32, ptr %6621, align 4, !tbaa !16
  %6623 = load ptr, ptr %5, align 8, !tbaa !5
  %6624 = getelementptr inbounds i32, ptr %6623, i64 2
  %6625 = load i32, ptr %6624, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6619, i32 noundef %6622, i32 noundef %6625, ptr noundef @.str.352)
  br label %6626

6626:                                             ; preds = %6616, %6606
  br label %6697

6627:                                             ; preds = %6586
  call void @llvm.lifetime.start.p0(i64 1, ptr %449) #9
  %6628 = load ptr, ptr %5, align 8, !tbaa !5
  %6629 = getelementptr inbounds i32, ptr %6628, i64 2
  %6630 = load i32, ptr %6629, align 4, !tbaa !16
  %6631 = call noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL18check_atomic_imageEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6630)
  %6632 = zext i1 %6631 to i8
  store i8 %6632, ptr %449, align 1, !tbaa !142
  call void @llvm.lifetime.start.p0(i64 1, ptr %450) #9
  %6633 = load ptr, ptr %448, align 8, !tbaa !5
  %6634 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %6633, i32 0, i32 2
  %6635 = load i32, ptr %6634, align 8, !tbaa !148
  %6636 = icmp eq i32 %6635, 8
  br i1 %6636, label %6651, label %6637

6637:                                             ; preds = %6627
  %6638 = load i8, ptr %449, align 1, !tbaa !142, !range !127, !noundef !128
  %6639 = trunc i8 %6638 to i1
  br i1 %6639, label %6640, label %6649

6640:                                             ; preds = %6637
  %6641 = load ptr, ptr %448, align 8, !tbaa !5
  %6642 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %6641, i32 0, i32 14
  %6643 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %6642, i32 0, i32 0
  %6644 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %6643)
  %6645 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %6644)
  %6646 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %6645, i32 0, i32 2
  %6647 = load i32, ptr %6646, align 8, !tbaa !148
  %6648 = icmp eq i32 %6647, 8
  br label %6649

6649:                                             ; preds = %6640, %6637
  %6650 = phi i1 [ false, %6637 ], [ %6648, %6640 ]
  br label %6651

6651:                                             ; preds = %6649, %6627
  %6652 = phi i1 [ true, %6627 ], [ %6650, %6649 ]
  %6653 = zext i1 %6652 to i8
  store i8 %6653, ptr %450, align 1, !tbaa !142
  call void @llvm.lifetime.start.p0(i64 8, ptr %451) #9
  %6654 = load i8, ptr %449, align 1, !tbaa !142, !range !127, !noundef !128
  %6655 = trunc i8 %6654 to i1
  %6656 = zext i1 %6655 to i64
  %6657 = select i1 %6655, ptr @.str.400, ptr @.str.349
  store ptr %6657, ptr %451, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %452) #9
  store ptr null, ptr %452, align 8, !tbaa !5
  %6658 = load i32, ptr %6, align 4, !tbaa !13
  %6659 = icmp eq i32 %6658, 232
  br i1 %6659, label %6660, label %6664

6660:                                             ; preds = %6651
  %6661 = load i8, ptr %450, align 1, !tbaa !142, !range !127, !noundef !128
  %6662 = trunc i8 %6661 to i1
  br i1 %6662, label %6663, label %6664

6663:                                             ; preds = %6660
  store ptr @.str.772, ptr %452, align 8, !tbaa !5
  br label %6675

6664:                                             ; preds = %6660, %6651
  %6665 = load i32, ptr %6, align 4, !tbaa !13
  %6666 = icmp eq i32 %6665, 232
  br i1 %6666, label %6667, label %6668

6667:                                             ; preds = %6664
  store ptr @.str.776, ptr %452, align 8, !tbaa !5
  br label %6674

6668:                                             ; preds = %6664
  %6669 = load i8, ptr %450, align 1, !tbaa !142, !range !127, !noundef !128
  %6670 = trunc i8 %6669 to i1
  br i1 %6670, label %6671, label %6672

6671:                                             ; preds = %6668
  store ptr @.str.1404, ptr %452, align 8, !tbaa !5
  br label %6673

6672:                                             ; preds = %6668
  store ptr @.str.1405, ptr %452, align 8, !tbaa !5
  br label %6673

6673:                                             ; preds = %6672, %6671
  br label %6674

6674:                                             ; preds = %6673, %6667
  br label %6675

6675:                                             ; preds = %6674, %6663
  %6676 = load ptr, ptr %5, align 8, !tbaa !5
  %6677 = getelementptr inbounds i32, ptr %6676, i64 0
  %6678 = load i32, ptr %6677, align 4, !tbaa !16
  %6679 = load ptr, ptr %5, align 8, !tbaa !5
  %6680 = getelementptr inbounds i32, ptr %6679, i64 1
  %6681 = load i32, ptr %6680, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %453) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %454) #9
  %6682 = load ptr, ptr %5, align 8, !tbaa !5
  %6683 = getelementptr inbounds i32, ptr %6682, i64 2
  %6684 = load i32, ptr %6683, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %454, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6684)
  invoke void @_ZN11spirv_cross4joinIJRPKcRA2_S1_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_S3_S5_EEESB_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %453, ptr noundef nonnull align 8 dereferenceable(8) %451, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %454, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(8) %452, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %6685 unwind label %6688

6685:                                             ; preds = %6675
  %6686 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6678, i32 noundef %6681, ptr noundef nonnull align 8 dereferenceable(32) %453, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %6687 unwind label %6692

6687:                                             ; preds = %6685
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %453) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %454) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %454) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %453) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %452) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %451) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %450) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %449) #9
  br label %6697

6688:                                             ; preds = %6675
  %6689 = landingpad { ptr, i32 }
          cleanup
  %6690 = extractvalue { ptr, i32 } %6689, 0
  store ptr %6690, ptr %23, align 8
  %6691 = extractvalue { ptr, i32 } %6689, 1
  store i32 %6691, ptr %24, align 4
  br label %6696

6692:                                             ; preds = %6685
  %6693 = landingpad { ptr, i32 }
          cleanup
  %6694 = extractvalue { ptr, i32 } %6693, 0
  store ptr %6694, ptr %23, align 8
  %6695 = extractvalue { ptr, i32 } %6693, 1
  store i32 %6695, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %453) #9
  br label %6696

6696:                                             ; preds = %6692, %6688
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %454) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %454) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %453) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %452) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %451) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %450) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %449) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %448) #9
  br label %11527

6697:                                             ; preds = %6687, %6626
  call void @_ZN11spirv_cross8Compiler34flush_all_atomic_capable_variablesEv(ptr noundef nonnull align 8 dereferenceable(3176) %885)
  call void @llvm.lifetime.end.p0(i64 8, ptr %448) #9
  br label %11526

6698:                                             ; preds = %919, %919
  call void @llvm.lifetime.start.p0(i64 8, ptr %455) #9
  %6699 = load ptr, ptr %5, align 8, !tbaa !5
  %6700 = getelementptr inbounds i32, ptr %6699, i64 2
  %6701 = load i32, ptr %6700, align 4, !tbaa !16
  %6702 = call noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL18check_atomic_imageEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6701)
  %6703 = zext i1 %6702 to i64
  %6704 = select i1 %6702, ptr @.str.400, ptr @.str.349
  store ptr %6704, ptr %455, align 8, !tbaa !5
  %6705 = load ptr, ptr %5, align 8, !tbaa !5
  %6706 = getelementptr inbounds i32, ptr %6705, i64 0
  %6707 = load i32, ptr %6706, align 4, !tbaa !16
  %6708 = load ptr, ptr %5, align 8, !tbaa !5
  %6709 = getelementptr inbounds i32, ptr %6708, i64 1
  %6710 = load i32, ptr %6709, align 4, !tbaa !16
  %6711 = load ptr, ptr %5, align 8, !tbaa !5
  %6712 = getelementptr inbounds i32, ptr %6711, i64 2
  %6713 = load i32, ptr %6712, align 4, !tbaa !16
  %6714 = load ptr, ptr %5, align 8, !tbaa !5
  %6715 = getelementptr inbounds i32, ptr %6714, i64 5
  %6716 = load i32, ptr %6715, align 4, !tbaa !16
  %6717 = load ptr, ptr %455, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL19emit_atomic_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6707, i32 noundef %6710, i32 noundef %6713, i32 noundef %6716, ptr noundef %6717)
  call void @llvm.lifetime.end.p0(i64 8, ptr %455) #9
  br label %11526

6718:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 8, ptr %456) #9
  %6719 = load ptr, ptr %5, align 8, !tbaa !5
  %6720 = getelementptr inbounds i32, ptr %6719, i64 2
  %6721 = load i32, ptr %6720, align 4, !tbaa !16
  %6722 = call noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL18check_atomic_imageEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6721)
  %6723 = zext i1 %6722 to i64
  %6724 = select i1 %6722, ptr @.str.400, ptr @.str.349
  store ptr %6724, ptr %456, align 8, !tbaa !5
  %6725 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %885, i32 0, i32 15
  %6726 = load ptr, ptr %5, align 8, !tbaa !5
  %6727 = getelementptr inbounds i32, ptr %6726, i64 1
  %6728 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %6725, ptr noundef nonnull align 4 dereferenceable(4) %6727)
  %6729 = getelementptr inbounds { ptr, i8 }, ptr %457, i32 0, i32 0
  %6730 = extractvalue { ptr, i8 } %6728, 0
  store ptr %6730, ptr %6729, align 8
  %6731 = getelementptr inbounds { ptr, i8 }, ptr %457, i32 0, i32 1
  %6732 = extractvalue { ptr, i8 } %6728, 1
  store i8 %6732, ptr %6731, align 8
  call void @llvm.lifetime.start.p0(i64 32, ptr %458) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %459) #9
  %6733 = load ptr, ptr %5, align 8, !tbaa !5
  %6734 = getelementptr inbounds i32, ptr %6733, i64 2
  %6735 = load i32, ptr %6734, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %459, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6735)
  call void @llvm.lifetime.start.p0(i64 32, ptr %460) #9
  %6736 = load ptr, ptr %5, align 8, !tbaa !5
  %6737 = getelementptr inbounds i32, ptr %6736, i64 5
  %6738 = load i32, ptr %6737, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %460, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6738, i1 noundef zeroext true)
          to label %6739 unwind label %6763

6739:                                             ; preds = %6718
  invoke void @_ZN11spirv_cross4joinIJRPKcRA2_S1_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_S1_SB_S5_EEESB_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %458, ptr noundef nonnull align 8 dereferenceable(8) %456, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %459, ptr noundef nonnull align 1 dereferenceable(4) @.str.1406, ptr noundef nonnull align 8 dereferenceable(32) %460, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %6740 unwind label %6767

6740:                                             ; preds = %6739
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %460) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %460) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %459) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %459) #9
  %6741 = load ptr, ptr %5, align 8, !tbaa !5
  %6742 = getelementptr inbounds i32, ptr %6741, i64 0
  %6743 = load i32, ptr %6742, align 4, !tbaa !16
  %6744 = load ptr, ptr %5, align 8, !tbaa !5
  %6745 = getelementptr inbounds i32, ptr %6744, i64 1
  %6746 = load i32, ptr %6745, align 4, !tbaa !16
  %6747 = load ptr, ptr %5, align 8, !tbaa !5
  %6748 = getelementptr inbounds i32, ptr %6747, i64 2
  %6749 = load i32, ptr %6748, align 4, !tbaa !16
  %6750 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6749)
          to label %6751 unwind label %6772

6751:                                             ; preds = %6740
  br i1 %6750, label %6752, label %6758

6752:                                             ; preds = %6751
  %6753 = load ptr, ptr %5, align 8, !tbaa !5
  %6754 = getelementptr inbounds i32, ptr %6753, i64 5
  %6755 = load i32, ptr %6754, align 4, !tbaa !16
  %6756 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6755)
          to label %6757 unwind label %6772

6757:                                             ; preds = %6752
  br label %6758

6758:                                             ; preds = %6757, %6751
  %6759 = phi i1 [ false, %6751 ], [ %6756, %6757 ]
  %6760 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6743, i32 noundef %6746, ptr noundef nonnull align 8 dereferenceable(32) %458, i1 noundef zeroext %6759, i1 noundef zeroext false)
          to label %6761 unwind label %6772

6761:                                             ; preds = %6758
  invoke void @_ZN11spirv_cross8Compiler34flush_all_atomic_capable_variablesEv(ptr noundef nonnull align 8 dereferenceable(3176) %885)
          to label %6762 unwind label %6772

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

6763:                                             ; preds = %6718
  %6764 = landingpad { ptr, i32 }
          cleanup
  %6765 = extractvalue { ptr, i32 } %6764, 0
  store ptr %6765, ptr %23, align 8
  %6766 = extractvalue { ptr, i32 } %6764, 1
  store i32 %6766, ptr %24, align 4
  br label %6771

6767:                                             ; preds = %6739
  %6768 = landingpad { ptr, i32 }
          cleanup
  %6769 = extractvalue { ptr, i32 } %6768, 0
  store ptr %6769, ptr %23, align 8
  %6770 = extractvalue { ptr, i32 } %6768, 1
  store i32 %6770, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %460) #9
  br label %6771

6771:                                             ; preds = %6767, %6763
  call void @llvm.lifetime.end.p0(i64 32, ptr %460) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %459) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %459) #9
  br label %6776

6772:                                             ; preds = %6761, %6758, %6752, %6740
  %6773 = landingpad { ptr, i32 }
          cleanup
  %6774 = extractvalue { ptr, i32 } %6773, 0
  store ptr %6774, ptr %23, align 8
  %6775 = extractvalue { ptr, i32 } %6773, 1
  store i32 %6775, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %458) #9
  br label %6776

6776:                                             ; preds = %6772, %6771
  call void @llvm.lifetime.end.p0(i64 32, ptr %458) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %456) #9
  br label %11527

6777:                                             ; preds = %919, %919
  call void @llvm.lifetime.start.p0(i64 8, ptr %461) #9
  %6778 = load ptr, ptr %5, align 8, !tbaa !5
  %6779 = getelementptr inbounds i32, ptr %6778, i64 2
  %6780 = load i32, ptr %6779, align 4, !tbaa !16
  %6781 = call noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL18check_atomic_imageEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6780)
  %6782 = zext i1 %6781 to i64
  %6783 = select i1 %6781, ptr @.str.405, ptr @.str.356
  store ptr %6783, ptr %461, align 8, !tbaa !5
  %6784 = load ptr, ptr %5, align 8, !tbaa !5
  %6785 = getelementptr inbounds i32, ptr %6784, i64 0
  %6786 = load i32, ptr %6785, align 4, !tbaa !16
  %6787 = load ptr, ptr %5, align 8, !tbaa !5
  %6788 = getelementptr inbounds i32, ptr %6787, i64 1
  %6789 = load i32, ptr %6788, align 4, !tbaa !16
  %6790 = load ptr, ptr %5, align 8, !tbaa !5
  %6791 = getelementptr inbounds i32, ptr %6790, i64 2
  %6792 = load i32, ptr %6791, align 4, !tbaa !16
  %6793 = load ptr, ptr %5, align 8, !tbaa !5
  %6794 = getelementptr inbounds i32, ptr %6793, i64 5
  %6795 = load i32, ptr %6794, align 4, !tbaa !16
  %6796 = load ptr, ptr %461, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL19emit_atomic_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6786, i32 noundef %6789, i32 noundef %6792, i32 noundef %6795, ptr noundef %6796)
  call void @llvm.lifetime.end.p0(i64 8, ptr %461) #9
  br label %11526

6797:                                             ; preds = %919, %919
  call void @llvm.lifetime.start.p0(i64 8, ptr %462) #9
  %6798 = load ptr, ptr %5, align 8, !tbaa !5
  %6799 = getelementptr inbounds i32, ptr %6798, i64 2
  %6800 = load i32, ptr %6799, align 4, !tbaa !16
  %6801 = call noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL18check_atomic_imageEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6800)
  %6802 = zext i1 %6801 to i64
  %6803 = select i1 %6801, ptr @.str.404, ptr @.str.355
  store ptr %6803, ptr %462, align 8, !tbaa !5
  %6804 = load ptr, ptr %5, align 8, !tbaa !5
  %6805 = getelementptr inbounds i32, ptr %6804, i64 0
  %6806 = load i32, ptr %6805, align 4, !tbaa !16
  %6807 = load ptr, ptr %5, align 8, !tbaa !5
  %6808 = getelementptr inbounds i32, ptr %6807, i64 1
  %6809 = load i32, ptr %6808, align 4, !tbaa !16
  %6810 = load ptr, ptr %5, align 8, !tbaa !5
  %6811 = getelementptr inbounds i32, ptr %6810, i64 2
  %6812 = load i32, ptr %6811, align 4, !tbaa !16
  %6813 = load ptr, ptr %5, align 8, !tbaa !5
  %6814 = getelementptr inbounds i32, ptr %6813, i64 5
  %6815 = load i32, ptr %6814, align 4, !tbaa !16
  %6816 = load ptr, ptr %462, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL19emit_atomic_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6806, i32 noundef %6809, i32 noundef %6812, i32 noundef %6815, ptr noundef %6816)
  call void @llvm.lifetime.end.p0(i64 8, ptr %462) #9
  br label %11526

6817:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 8, ptr %463) #9
  %6818 = load ptr, ptr %5, align 8, !tbaa !5
  %6819 = getelementptr inbounds i32, ptr %6818, i64 2
  %6820 = load i32, ptr %6819, align 4, !tbaa !16
  %6821 = call noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL18check_atomic_imageEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6820)
  %6822 = zext i1 %6821 to i64
  %6823 = select i1 %6821, ptr @.str.401, ptr @.str.1407
  store ptr %6823, ptr %463, align 8, !tbaa !5
  %6824 = load ptr, ptr %5, align 8, !tbaa !5
  %6825 = getelementptr inbounds i32, ptr %6824, i64 0
  %6826 = load i32, ptr %6825, align 4, !tbaa !16
  %6827 = load ptr, ptr %5, align 8, !tbaa !5
  %6828 = getelementptr inbounds i32, ptr %6827, i64 1
  %6829 = load i32, ptr %6828, align 4, !tbaa !16
  %6830 = load ptr, ptr %5, align 8, !tbaa !5
  %6831 = getelementptr inbounds i32, ptr %6830, i64 2
  %6832 = load i32, ptr %6831, align 4, !tbaa !16
  %6833 = load ptr, ptr %5, align 8, !tbaa !5
  %6834 = getelementptr inbounds i32, ptr %6833, i64 5
  %6835 = load i32, ptr %6834, align 4, !tbaa !16
  %6836 = load ptr, ptr %463, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL19emit_atomic_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6826, i32 noundef %6829, i32 noundef %6832, i32 noundef %6835, ptr noundef %6836)
  call void @llvm.lifetime.end.p0(i64 8, ptr %463) #9
  br label %11526

6837:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 8, ptr %464) #9
  %6838 = load ptr, ptr %5, align 8, !tbaa !5
  %6839 = getelementptr inbounds i32, ptr %6838, i64 2
  %6840 = load i32, ptr %6839, align 4, !tbaa !16
  %6841 = call noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL18check_atomic_imageEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6840)
  %6842 = zext i1 %6841 to i64
  %6843 = select i1 %6841, ptr @.str.406, ptr @.str.357
  store ptr %6843, ptr %464, align 8, !tbaa !5
  %6844 = load ptr, ptr %5, align 8, !tbaa !5
  %6845 = getelementptr inbounds i32, ptr %6844, i64 0
  %6846 = load i32, ptr %6845, align 4, !tbaa !16
  %6847 = load ptr, ptr %5, align 8, !tbaa !5
  %6848 = getelementptr inbounds i32, ptr %6847, i64 1
  %6849 = load i32, ptr %6848, align 4, !tbaa !16
  %6850 = load ptr, ptr %5, align 8, !tbaa !5
  %6851 = getelementptr inbounds i32, ptr %6850, i64 2
  %6852 = load i32, ptr %6851, align 4, !tbaa !16
  %6853 = load ptr, ptr %5, align 8, !tbaa !5
  %6854 = getelementptr inbounds i32, ptr %6853, i64 5
  %6855 = load i32, ptr %6854, align 4, !tbaa !16
  %6856 = load ptr, ptr %464, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL19emit_atomic_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6846, i32 noundef %6849, i32 noundef %6852, i32 noundef %6855, ptr noundef %6856)
  call void @llvm.lifetime.end.p0(i64 8, ptr %464) #9
  br label %11526

6857:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 8, ptr %465) #9
  %6858 = load ptr, ptr %5, align 8, !tbaa !5
  %6859 = getelementptr inbounds i32, ptr %6858, i64 2
  %6860 = load i32, ptr %6859, align 4, !tbaa !16
  %6861 = call noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL18check_atomic_imageEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6860)
  %6862 = zext i1 %6861 to i64
  %6863 = select i1 %6861, ptr @.str.407, ptr @.str.358
  store ptr %6863, ptr %465, align 8, !tbaa !5
  %6864 = load ptr, ptr %5, align 8, !tbaa !5
  %6865 = getelementptr inbounds i32, ptr %6864, i64 0
  %6866 = load i32, ptr %6865, align 4, !tbaa !16
  %6867 = load ptr, ptr %5, align 8, !tbaa !5
  %6868 = getelementptr inbounds i32, ptr %6867, i64 1
  %6869 = load i32, ptr %6868, align 4, !tbaa !16
  %6870 = load ptr, ptr %5, align 8, !tbaa !5
  %6871 = getelementptr inbounds i32, ptr %6870, i64 2
  %6872 = load i32, ptr %6871, align 4, !tbaa !16
  %6873 = load ptr, ptr %5, align 8, !tbaa !5
  %6874 = getelementptr inbounds i32, ptr %6873, i64 5
  %6875 = load i32, ptr %6874, align 4, !tbaa !16
  %6876 = load ptr, ptr %465, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL19emit_atomic_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6866, i32 noundef %6869, i32 noundef %6872, i32 noundef %6875, ptr noundef %6876)
  call void @llvm.lifetime.end.p0(i64 8, ptr %465) #9
  br label %11526

6877:                                             ; preds = %919
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA14_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 1 dereferenceable(14) @.str.1408)
  br label %11526

6878:                                             ; preds = %919
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA16_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 1 dereferenceable(16) @.str.1409)
  br label %11526

6879:                                             ; preds = %919
  %6880 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %6881 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %6880, i32 0, i32 1
  %6882 = load i8, ptr %6881, align 4, !tbaa !210, !range !127, !noundef !128
  %6883 = trunc i8 %6882 to i1
  br i1 %6883, label %6884, label %6891

6884:                                             ; preds = %6879
  %6885 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %6885, ptr noundef @.str.1410)
          to label %6886 unwind label %6887

6886:                                             ; preds = %6884
  call void @__cxa_throw(ptr %6885, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
  unreachable

6887:                                             ; preds = %6884
  %6888 = landingpad { ptr, i32 }
          cleanup
  %6889 = extractvalue { ptr, i32 } %6888, 0
  store ptr %6889, ptr %23, align 8
  %6890 = extractvalue { ptr, i32 } %6888, 1
  store i32 %6890, ptr %24, align 4
  call void @__cxa_free_exception(ptr %6885) #9
  br label %11527

6891:                                             ; preds = %6879
  %6892 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %6893 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %6892, i32 0, i32 1
  %6894 = load i8, ptr %6893, align 4, !tbaa !210, !range !127, !noundef !128
  %6895 = trunc i8 %6894 to i1
  br i1 %6895, label %6908, label %6896

6896:                                             ; preds = %6891
  %6897 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %6898 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %6897, i32 0, i32 0
  %6899 = load i32, ptr %6898, align 4, !tbaa !207
  %6900 = icmp ult i32 %6899, 400
  br i1 %6900, label %6901, label %6908

6901:                                             ; preds = %6896
  %6902 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %6902, ptr noundef @.str.1411)
          to label %6903 unwind label %6904

6903:                                             ; preds = %6901
  call void @__cxa_throw(ptr %6902, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
  unreachable

6904:                                             ; preds = %6901
  %6905 = landingpad { ptr, i32 }
          cleanup
  %6906 = extractvalue { ptr, i32 } %6905, 0
  store ptr %6906, ptr %23, align 8
  %6907 = extractvalue { ptr, i32 } %6905, 1
  store i32 %6907, ptr %24, align 4
  call void @__cxa_free_exception(ptr %6902) #9
  br label %11527

6908:                                             ; preds = %6896, %6891
  br label %6909

6909:                                             ; preds = %6908
  call void @llvm.lifetime.start.p0(i64 32, ptr %466) #9
  %6910 = load ptr, ptr %5, align 8, !tbaa !5
  %6911 = getelementptr inbounds i32, ptr %6910, i64 0
  %6912 = load i32, ptr %6911, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %466, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6912, i1 noundef zeroext true)
  %6913 = load ptr, ptr %5, align 8, !tbaa !5
  %6914 = getelementptr inbounds i32, ptr %6913, i64 0
  %6915 = load i32, ptr %6914, align 4, !tbaa !16
  %6916 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %6915)
          to label %6917 unwind label %6924

6917:                                             ; preds = %6909
  %6918 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %6916, i32 0, i32 2
  %6919 = load i32, ptr %6918, align 8, !tbaa !148
  %6920 = icmp ne i32 %6919, 7
  br i1 %6920, label %6921, label %6932

6921:                                             ; preds = %6917
  call void @llvm.lifetime.start.p0(i64 32, ptr %467) #9
  invoke void @_ZN11spirv_cross4joinIJRA5_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %467, ptr noundef nonnull align 1 dereferenceable(5) @.str.1412, ptr noundef nonnull align 8 dereferenceable(32) %466, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %6922 unwind label %6928

6922:                                             ; preds = %6921
  %6923 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %466, ptr noundef nonnull align 8 dereferenceable(32) %467) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %467) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %467) #9
  br label %6932

6924:                                             ; preds = %6932, %6909
  %6925 = landingpad { ptr, i32 }
          cleanup
  %6926 = extractvalue { ptr, i32 } %6925, 0
  store ptr %6926, ptr %23, align 8
  %6927 = extractvalue { ptr, i32 } %6925, 1
  store i32 %6927, ptr %24, align 4
  br label %6934

6928:                                             ; preds = %6921
  %6929 = landingpad { ptr, i32 }
          cleanup
  %6930 = extractvalue { ptr, i32 } %6929, 0
  store ptr %6930, ptr %23, align 8
  %6931 = extractvalue { ptr, i32 } %6929, 1
  store i32 %6931, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %467) #9
  br label %6934

6932:                                             ; preds = %6922, %6917
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA18_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 1 dereferenceable(18) @.str.1413, ptr noundef nonnull align 8 dereferenceable(32) %466, ptr noundef nonnull align 1 dereferenceable(3) @.str.751)
          to label %6933 unwind label %6924

6933:                                             ; preds = %6932
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %466) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %466) #9
  br label %11526

6934:                                             ; preds = %6928, %6924
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %466) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %466) #9
  br label %11527

6935:                                             ; preds = %919
  %6936 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %6937 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %6936, i32 0, i32 1
  %6938 = load i8, ptr %6937, align 4, !tbaa !210, !range !127, !noundef !128
  %6939 = trunc i8 %6938 to i1
  br i1 %6939, label %6940, label %6947

6940:                                             ; preds = %6935
  %6941 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %6941, ptr noundef @.str.1410)
          to label %6942 unwind label %6943

6942:                                             ; preds = %6940
  call void @__cxa_throw(ptr %6941, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
  unreachable

6943:                                             ; preds = %6940
  %6944 = landingpad { ptr, i32 }
          cleanup
  %6945 = extractvalue { ptr, i32 } %6944, 0
  store ptr %6945, ptr %23, align 8
  %6946 = extractvalue { ptr, i32 } %6944, 1
  store i32 %6946, ptr %24, align 4
  call void @__cxa_free_exception(ptr %6941) #9
  br label %11527

6947:                                             ; preds = %6935
  %6948 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %6949 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %6948, i32 0, i32 1
  %6950 = load i8, ptr %6949, align 4, !tbaa !210, !range !127, !noundef !128
  %6951 = trunc i8 %6950 to i1
  br i1 %6951, label %6964, label %6952

6952:                                             ; preds = %6947
  %6953 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %6954 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %6953, i32 0, i32 0
  %6955 = load i32, ptr %6954, align 4, !tbaa !207
  %6956 = icmp ult i32 %6955, 400
  br i1 %6956, label %6957, label %6964

6957:                                             ; preds = %6952
  %6958 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %6958, ptr noundef @.str.1411)
          to label %6959 unwind label %6960

6959:                                             ; preds = %6957
  call void @__cxa_throw(ptr %6958, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
  unreachable

6960:                                             ; preds = %6957
  %6961 = landingpad { ptr, i32 }
          cleanup
  %6962 = extractvalue { ptr, i32 } %6961, 0
  store ptr %6962, ptr %23, align 8
  %6963 = extractvalue { ptr, i32 } %6961, 1
  store i32 %6963, ptr %24, align 4
  call void @__cxa_free_exception(ptr %6958) #9
  br label %11527

6964:                                             ; preds = %6952, %6947
  br label %6965

6965:                                             ; preds = %6964
  call void @llvm.lifetime.start.p0(i64 32, ptr %468) #9
  %6966 = load ptr, ptr %5, align 8, !tbaa !5
  %6967 = getelementptr inbounds i32, ptr %6966, i64 0
  %6968 = load i32, ptr %6967, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %468, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %6968, i1 noundef zeroext true)
  %6969 = load ptr, ptr %5, align 8, !tbaa !5
  %6970 = getelementptr inbounds i32, ptr %6969, i64 0
  %6971 = load i32, ptr %6970, align 4, !tbaa !16
  %6972 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %6971)
          to label %6973 unwind label %6980

6973:                                             ; preds = %6965
  %6974 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %6972, i32 0, i32 2
  %6975 = load i32, ptr %6974, align 8, !tbaa !148
  %6976 = icmp ne i32 %6975, 7
  br i1 %6976, label %6977, label %6988

6977:                                             ; preds = %6973
  call void @llvm.lifetime.start.p0(i64 32, ptr %469) #9
  invoke void @_ZN11spirv_cross4joinIJRA5_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %469, ptr noundef nonnull align 1 dereferenceable(5) @.str.1412, ptr noundef nonnull align 8 dereferenceable(32) %468, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %6978 unwind label %6984

6978:                                             ; preds = %6977
  %6979 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %468, ptr noundef nonnull align 8 dereferenceable(32) %469) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %469) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %469) #9
  br label %6988

6980:                                             ; preds = %6988, %6965
  %6981 = landingpad { ptr, i32 }
          cleanup
  %6982 = extractvalue { ptr, i32 } %6981, 0
  store ptr %6982, ptr %23, align 8
  %6983 = extractvalue { ptr, i32 } %6981, 1
  store i32 %6983, ptr %24, align 4
  br label %6990

6984:                                             ; preds = %6977
  %6985 = landingpad { ptr, i32 }
          cleanup
  %6986 = extractvalue { ptr, i32 } %6985, 0
  store ptr %6986, ptr %23, align 8
  %6987 = extractvalue { ptr, i32 } %6985, 1
  store i32 %6987, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %469) #9
  br label %6990

6988:                                             ; preds = %6978, %6973
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA20_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 1 dereferenceable(20) @.str.1414, ptr noundef nonnull align 8 dereferenceable(32) %468, ptr noundef nonnull align 1 dereferenceable(3) @.str.751)
          to label %6989 unwind label %6980

6989:                                             ; preds = %6988
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %468) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %468) #9
  br label %11526

6990:                                             ; preds = %6984, %6980
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %468) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %468) #9
  br label %11527

6991:                                             ; preds = %919, %919, %919, %919, %919, %919, %919, %919, %919, %919, %919
  %6992 = load ptr, ptr %4, align 8, !tbaa !5
  %6993 = load ptr, ptr %885, align 8, !tbaa !145
  %6994 = getelementptr inbounds ptr, ptr %6993, i64 16
  %6995 = load ptr, ptr %6994, align 8
  call void %6995(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 4 dereferenceable(12) %6992, i1 noundef zeroext false)
  br label %11526

6996:                                             ; preds = %919, %919, %919, %919, %919, %919, %919, %919, %919, %919, %919
  %6997 = load ptr, ptr %4, align 8, !tbaa !5
  %6998 = load ptr, ptr %885, align 8, !tbaa !145
  %6999 = getelementptr inbounds ptr, ptr %6998, i64 16
  %7000 = load ptr, ptr %6999, align 8
  call void %7000(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 4 dereferenceable(12) %6997, i1 noundef zeroext true)
  br label %11526

7001:                                             ; preds = %919
  %7002 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %7003 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %7002, i32 0, i32 1
  %7004 = load i8, ptr %7003, align 4, !tbaa !210, !range !127, !noundef !128
  %7005 = trunc i8 %7004 to i1
  br i1 %7005, label %7006, label %7013

7006:                                             ; preds = %7001
  %7007 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %7007, ptr noundef @.str.1415)
          to label %7008 unwind label %7009

7008:                                             ; preds = %7006
  call void @__cxa_throw(ptr %7007, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
  unreachable

7009:                                             ; preds = %7006
  %7010 = landingpad { ptr, i32 }
          cleanup
  %7011 = extractvalue { ptr, i32 } %7010, 0
  store ptr %7011, ptr %23, align 8
  %7012 = extractvalue { ptr, i32 } %7010, 1
  store i32 %7012, ptr %24, align 4
  call void @__cxa_free_exception(ptr %7007) #9
  br label %11527

7013:                                             ; preds = %7001
  call void @llvm.lifetime.start.p0(i64 32, ptr %470) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %471) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %471) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %470, ptr noundef @.str.1061, ptr noundef nonnull align 1 dereferenceable(1) %471)
          to label %7014 unwind label %7026

7014:                                             ; preds = %7013
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %470)
          to label %7015 unwind label %7030

7015:                                             ; preds = %7014
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %470) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %471) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %471) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %470) #9
  %7016 = load ptr, ptr %5, align 8, !tbaa !5
  %7017 = getelementptr inbounds i32, ptr %7016, i64 0
  %7018 = load i32, ptr %7017, align 4, !tbaa !16
  %7019 = load ptr, ptr %5, align 8, !tbaa !5
  %7020 = getelementptr inbounds i32, ptr %7019, i64 1
  %7021 = load i32, ptr %7020, align 4, !tbaa !16
  %7022 = load ptr, ptr %5, align 8, !tbaa !5
  %7023 = getelementptr inbounds i32, ptr %7022, i64 2
  %7024 = load i32, ptr %7023, align 4, !tbaa !16
  %7025 = load i32, ptr %9, align 4, !tbaa !17
  call void @_ZN11spirv_cross12CompilerGLSL23emit_unary_func_op_castEjjjPKcNS_8SPIRType8BaseTypeES4_(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %7018, i32 noundef %7021, i32 noundef %7024, ptr noundef @.str.1416, i32 noundef %7025, i32 noundef 2)
  br label %11526

7026:                                             ; preds = %7013
  %7027 = landingpad { ptr, i32 }
          cleanup
  %7028 = extractvalue { ptr, i32 } %7027, 0
  store ptr %7028, ptr %23, align 8
  %7029 = extractvalue { ptr, i32 } %7027, 1
  store i32 %7029, ptr %24, align 4
  br label %7034

7030:                                             ; preds = %7014
  %7031 = landingpad { ptr, i32 }
          cleanup
  %7032 = extractvalue { ptr, i32 } %7031, 0
  store ptr %7032, ptr %23, align 8
  %7033 = extractvalue { ptr, i32 } %7031, 1
  store i32 %7033, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %470) #9
  br label %7034

7034:                                             ; preds = %7030, %7026
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %471) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %471) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %470) #9
  br label %11527

7035:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %472) #9
  %7036 = load ptr, ptr %5, align 8, !tbaa !5
  %7037 = getelementptr inbounds i32, ptr %7036, i64 0
  %7038 = load i32, ptr %7037, align 4, !tbaa !16
  store i32 %7038, ptr %472, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %473) #9
  %7039 = load ptr, ptr %5, align 8, !tbaa !5
  %7040 = getelementptr inbounds i32, ptr %7039, i64 1
  %7041 = load i32, ptr %7040, align 4, !tbaa !16
  store i32 %7041, ptr %473, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %474) #9
  %7042 = load i32, ptr %472, align 4, !tbaa !16
  %7043 = load i32, ptr %473, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %475) #9
  %7044 = load ptr, ptr %5, align 8, !tbaa !5
  %7045 = getelementptr inbounds i32, ptr %7044, i64 2
  %7046 = load i32, ptr %7045, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %475, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %7046, i1 noundef zeroext true)
  %7047 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %7042, i32 noundef %7043, ptr noundef nonnull align 8 dereferenceable(32) %475, i1 noundef zeroext true, i1 noundef zeroext true)
          to label %7048 unwind label %7062

7048:                                             ; preds = %7035
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %475) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %475) #9
  store ptr %7047, ptr %474, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %476) #9
  %7049 = load ptr, ptr %5, align 8, !tbaa !5
  %7050 = getelementptr inbounds i32, ptr %7049, i64 2
  %7051 = load i32, ptr %7050, align 4, !tbaa !16
  %7052 = call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %7051)
  store ptr %7052, ptr %476, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %477) #9
  %7053 = load ptr, ptr %476, align 8, !tbaa !5
  %7054 = icmp ne ptr %7053, null
  br i1 %7054, label %7055, label %7058

7055:                                             ; preds = %7048
  %7056 = load ptr, ptr %476, align 8, !tbaa !5
  %7057 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %7056, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %477, ptr align 8 %7057, i64 4, i1 false), !tbaa.struct !151
  br label %7059

7058:                                             ; preds = %7048
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %477, i32 noundef 0)
  br label %7059

7059:                                             ; preds = %7058, %7055
  %7060 = load ptr, ptr %474, align 8, !tbaa !5
  %7061 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %7060, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %7061, ptr align 4 %477, i64 4, i1 false), !tbaa.struct !151
  call void @llvm.lifetime.end.p0(i64 4, ptr %477) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %476) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %474) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %473) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %472) #9
  br label %11526

7062:                                             ; preds = %7035
  %7063 = landingpad { ptr, i32 }
          cleanup
  %7064 = extractvalue { ptr, i32 } %7063, 0
  store ptr %7064, ptr %23, align 8
  %7065 = extractvalue { ptr, i32 } %7063, 1
  store i32 %7065, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %475) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %475) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %474) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %473) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %472) #9
  br label %11527

7066:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 8, ptr %478) #9
  store ptr null, ptr %478, align 8, !tbaa !5
  %7067 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %7068 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %7067, i32 0, i32 1
  %7069 = load i8, ptr %7068, align 4, !tbaa !210, !range !127, !noundef !128
  %7070 = trunc i8 %7069 to i1
  br i1 %7070, label %7088, label %7071

7071:                                             ; preds = %7066
  %7072 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %7073 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %7072, i32 0, i32 0
  %7074 = load i32, ptr %7073, align 4, !tbaa !207
  %7075 = icmp ult i32 %7074, 400
  br i1 %7075, label %7076, label %7088

7076:                                             ; preds = %7071
  call void @llvm.lifetime.start.p0(i64 32, ptr %479) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %480) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %480) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %479, ptr noundef @.str.1417, ptr noundef nonnull align 1 dereferenceable(1) %480)
          to label %7077 unwind label %7079

7077:                                             ; preds = %7076
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %479)
          to label %7078 unwind label %7083

7078:                                             ; preds = %7077
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %479) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %480) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %480) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %479) #9
  store ptr @.str.1418, ptr %478, align 8, !tbaa !5
  br label %7119

7079:                                             ; preds = %7076
  %7080 = landingpad { ptr, i32 }
          cleanup
  %7081 = extractvalue { ptr, i32 } %7080, 0
  store ptr %7081, ptr %23, align 8
  %7082 = extractvalue { ptr, i32 } %7080, 1
  store i32 %7082, ptr %24, align 4
  br label %7087

7083:                                             ; preds = %7077
  %7084 = landingpad { ptr, i32 }
          cleanup
  %7085 = extractvalue { ptr, i32 } %7084, 0
  store ptr %7085, ptr %23, align 8
  %7086 = extractvalue { ptr, i32 } %7084, 1
  store i32 %7086, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %479) #9
  br label %7087

7087:                                             ; preds = %7083, %7079
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %480) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %480) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %479) #9
  br label %7225

7088:                                             ; preds = %7071, %7066
  %7089 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %7090 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %7089, i32 0, i32 1
  %7091 = load i8, ptr %7090, align 4, !tbaa !210, !range !127, !noundef !128
  %7092 = trunc i8 %7091 to i1
  br i1 %7092, label %7093, label %7117

7093:                                             ; preds = %7088
  %7094 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %7095 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %7094, i32 0, i32 0
  %7096 = load i32, ptr %7095, align 4, !tbaa !207
  %7097 = icmp ult i32 %7096, 300
  br i1 %7097, label %7098, label %7105

7098:                                             ; preds = %7093
  %7099 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %7099, ptr noundef @.str.1419)
          to label %7100 unwind label %7101

7100:                                             ; preds = %7098
  call void @__cxa_throw(ptr %7099, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
  unreachable

7101:                                             ; preds = %7098
  %7102 = landingpad { ptr, i32 }
          cleanup
  %7103 = extractvalue { ptr, i32 } %7102, 0
  store ptr %7103, ptr %23, align 8
  %7104 = extractvalue { ptr, i32 } %7102, 1
  store i32 %7104, ptr %24, align 4
  call void @__cxa_free_exception(ptr %7099) #9
  br label %7225

7105:                                             ; preds = %7093
  call void @llvm.lifetime.start.p0(i64 32, ptr %481) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %482) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %482) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %481, ptr noundef @.str.1420, ptr noundef nonnull align 1 dereferenceable(1) %482)
          to label %7106 unwind label %7108

7106:                                             ; preds = %7105
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %481)
          to label %7107 unwind label %7112

7107:                                             ; preds = %7106
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %481) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %482) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %482) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %481) #9
  store ptr @.str.1418, ptr %478, align 8, !tbaa !5
  br label %7118

7108:                                             ; preds = %7105
  %7109 = landingpad { ptr, i32 }
          cleanup
  %7110 = extractvalue { ptr, i32 } %7109, 0
  store ptr %7110, ptr %23, align 8
  %7111 = extractvalue { ptr, i32 } %7109, 1
  store i32 %7111, ptr %24, align 4
  br label %7116

7112:                                             ; preds = %7106
  %7113 = landingpad { ptr, i32 }
          cleanup
  %7114 = extractvalue { ptr, i32 } %7113, 0
  store ptr %7114, ptr %23, align 8
  %7115 = extractvalue { ptr, i32 } %7113, 1
  store i32 %7115, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %481) #9
  br label %7116

7116:                                             ; preds = %7112, %7108
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %482) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %482) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %481) #9
  br label %7225

7117:                                             ; preds = %7088
  store ptr @.str.490, ptr %478, align 8, !tbaa !5
  br label %7118

7118:                                             ; preds = %7117, %7107
  br label %7119

7119:                                             ; preds = %7118, %7078
  call void @llvm.lifetime.start.p0(i64 32, ptr %483) #9
  %7120 = load ptr, ptr %5, align 8, !tbaa !5
  %7121 = getelementptr inbounds i32, ptr %7120, i64 2
  %7122 = load i32, ptr %7121, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %483, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %7122, i1 noundef zeroext true)
  %7123 = load ptr, ptr %5, align 8, !tbaa !5
  %7124 = getelementptr inbounds i32, ptr %7123, i64 2
  %7125 = load i32, ptr %7124, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %484, i32 noundef %7125)
          to label %7126 unwind label %7143

7126:                                             ; preds = %7119
  %7127 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %484, i32 0, i32 0
  %7128 = load i32, ptr %7127, align 4
  %7129 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 %7128, i32 noundef 5300)
          to label %7130 unwind label %7143

7130:                                             ; preds = %7126
  br i1 %7129, label %7131, label %7165

7131:                                             ; preds = %7130
  %7132 = load ptr, ptr %5, align 8, !tbaa !5
  %7133 = getelementptr inbounds i32, ptr %7132, i64 2
  %7134 = load i32, ptr %7133, align 4, !tbaa !16
  %7135 = invoke noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %7134)
          to label %7136 unwind label %7143

7136:                                             ; preds = %7131
  %7137 = icmp ne ptr %7135, null
  br i1 %7137, label %7138, label %7147

7138:                                             ; preds = %7136
  %7139 = load ptr, ptr %5, align 8, !tbaa !5
  %7140 = getelementptr inbounds i32, ptr %7139, i64 2
  %7141 = load i32, ptr %7140, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL30convert_non_uniform_expressionERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %483, i32 noundef %7141)
          to label %7142 unwind label %7143

7142:                                             ; preds = %7138
  br label %7164

7143:                                             ; preds = %7138, %7131, %7126, %7119
  %7144 = landingpad { ptr, i32 }
          cleanup
  %7145 = extractvalue { ptr, i32 } %7144, 0
  store ptr %7145, ptr %23, align 8
  %7146 = extractvalue { ptr, i32 } %7144, 1
  store i32 %7146, ptr %24, align 4
  br label %7224

7147:                                             ; preds = %7136
  %7148 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 21
  %7149 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %7148, i32 0, i32 16
  %7150 = load ptr, ptr %7149, align 8, !tbaa !213
  %7151 = load i8, ptr %7150, align 1, !tbaa !209
  %7152 = sext i8 %7151 to i32
  %7153 = icmp ne i32 %7152, 0
  br i1 %7153, label %7154, label %7163

7154:                                             ; preds = %7147
  call void @llvm.lifetime.start.p0(i64 32, ptr %485) #9
  %7155 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 21
  %7156 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %7155, i32 0, i32 16
  invoke void @_ZN11spirv_cross4joinIJRPKcRA2_S1_RNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EEESB_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %485, ptr noundef nonnull align 8 dereferenceable(8) %7156, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %483, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %7157 unwind label %7159

7157:                                             ; preds = %7154
  %7158 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %483, ptr noundef nonnull align 8 dereferenceable(32) %485) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %485) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %485) #9
  br label %7163

7159:                                             ; preds = %7154
  %7160 = landingpad { ptr, i32 }
          cleanup
  %7161 = extractvalue { ptr, i32 } %7160, 0
  store ptr %7161, ptr %23, align 8
  %7162 = extractvalue { ptr, i32 } %7160, 1
  store i32 %7162, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %485) #9
  br label %7224

7163:                                             ; preds = %7157, %7147
  br label %7164

7164:                                             ; preds = %7163, %7142
  br label %7165

7165:                                             ; preds = %7164, %7130
  call void @llvm.lifetime.start.p0(i64 1, ptr %486) #9
  %7166 = load ptr, ptr %5, align 8, !tbaa !5
  %7167 = getelementptr inbounds i32, ptr %7166, i64 3
  %7168 = load i32, ptr %7167, align 4, !tbaa !16
  %7169 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %7168)
          to label %7170 unwind label %7205

7170:                                             ; preds = %7165
  %7171 = zext i1 %7169 to i8
  store i8 %7171, ptr %486, align 1, !tbaa !142
  %7172 = load ptr, ptr %5, align 8, !tbaa !5
  %7173 = getelementptr inbounds i32, ptr %7172, i64 0
  %7174 = load i32, ptr %7173, align 4, !tbaa !16
  %7175 = load ptr, ptr %5, align 8, !tbaa !5
  %7176 = getelementptr inbounds i32, ptr %7175, i64 1
  %7177 = load i32, ptr %7176, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %487) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %488) #9
  %7178 = load ptr, ptr %5, align 8, !tbaa !5
  %7179 = getelementptr inbounds i32, ptr %7178, i64 3
  %7180 = load i32, ptr %7179, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %488, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %7180, i1 noundef zeroext true)
          to label %7181 unwind label %7209

7181:                                             ; preds = %7170
  invoke void @_ZN11spirv_cross4joinIJRPKcRA2_S1_RNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_SB_S5_EEESB_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %487, ptr noundef nonnull align 8 dereferenceable(8) %478, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %483, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %488, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %7182 unwind label %7213

7182:                                             ; preds = %7181
  %7183 = load i8, ptr %486, align 1, !tbaa !142, !range !127, !noundef !128
  %7184 = trunc i8 %7183 to i1
  %7185 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %7174, i32 noundef %7177, ptr noundef nonnull align 8 dereferenceable(32) %487, i1 noundef zeroext %7184, i1 noundef zeroext false)
          to label %7186 unwind label %7217

7186:                                             ; preds = %7182
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %487) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %488) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %488) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %487) #9
  %7187 = load ptr, ptr %5, align 8, !tbaa !5
  %7188 = getelementptr inbounds i32, ptr %7187, i64 1
  %7189 = load i32, ptr %7188, align 4, !tbaa !16
  %7190 = load ptr, ptr %5, align 8, !tbaa !5
  %7191 = getelementptr inbounds i32, ptr %7190, i64 2
  %7192 = load i32, ptr %7191, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %7189, i32 noundef %7192)
          to label %7193 unwind label %7205

7193:                                             ; preds = %7186
  %7194 = load ptr, ptr %5, align 8, !tbaa !5
  %7195 = getelementptr inbounds i32, ptr %7194, i64 1
  %7196 = load i32, ptr %7195, align 4, !tbaa !16
  %7197 = load ptr, ptr %5, align 8, !tbaa !5
  %7198 = getelementptr inbounds i32, ptr %7197, i64 3
  %7199 = load i32, ptr %7198, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %7196, i32 noundef %7199)
          to label %7200 unwind label %7205

7200:                                             ; preds = %7193
  %7201 = load ptr, ptr %5, align 8, !tbaa !5
  %7202 = getelementptr inbounds i32, ptr %7201, i64 1
  %7203 = load i32, ptr %7202, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %7203)
          to label %7204 unwind label %7205

7204:                                             ; preds = %7200
  call void @llvm.lifetime.end.p0(i64 1, ptr %486) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %483) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %483) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %478) #9
  br label %11526

7205:                                             ; preds = %7200, %7193, %7186, %7165
  %7206 = landingpad { ptr, i32 }
          cleanup
  %7207 = extractvalue { ptr, i32 } %7206, 0
  store ptr %7207, ptr %23, align 8
  %7208 = extractvalue { ptr, i32 } %7206, 1
  store i32 %7208, ptr %24, align 4
  br label %7223

7209:                                             ; preds = %7170
  %7210 = landingpad { ptr, i32 }
          cleanup
  %7211 = extractvalue { ptr, i32 } %7210, 0
  store ptr %7211, ptr %23, align 8
  %7212 = extractvalue { ptr, i32 } %7210, 1
  store i32 %7212, ptr %24, align 4
  br label %7222

7213:                                             ; preds = %7181
  %7214 = landingpad { ptr, i32 }
          cleanup
  %7215 = extractvalue { ptr, i32 } %7214, 0
  store ptr %7215, ptr %23, align 8
  %7216 = extractvalue { ptr, i32 } %7214, 1
  store i32 %7216, ptr %24, align 4
  br label %7221

7217:                                             ; preds = %7182
  %7218 = landingpad { ptr, i32 }
          cleanup
  %7219 = extractvalue { ptr, i32 } %7218, 0
  store ptr %7219, ptr %23, align 8
  %7220 = extractvalue { ptr, i32 } %7218, 1
  store i32 %7220, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %487) #9
  br label %7221

7221:                                             ; preds = %7217, %7213
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %488) #9
  br label %7222

7222:                                             ; preds = %7221, %7209
  call void @llvm.lifetime.end.p0(i64 32, ptr %488) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %487) #9
  br label %7223

7223:                                             ; preds = %7222, %7205
  call void @llvm.lifetime.end.p0(i64 1, ptr %486) #9
  br label %7224

7224:                                             ; preds = %7223, %7159, %7143
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %483) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %483) #9
  br label %7225

7225:                                             ; preds = %7224, %7116, %7101, %7087
  call void @llvm.lifetime.end.p0(i64 8, ptr %478) #9
  br label %11527

7226:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %489) #9
  %7227 = load ptr, ptr %5, align 8, !tbaa !5
  %7228 = getelementptr inbounds i32, ptr %7227, i64 0
  %7229 = load i32, ptr %7228, align 4, !tbaa !16
  store i32 %7229, ptr %489, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %490) #9
  %7230 = load ptr, ptr %5, align 8, !tbaa !5
  %7231 = getelementptr inbounds i32, ptr %7230, i64 1
  %7232 = load i32, ptr %7231, align 4, !tbaa !16
  store i32 %7232, ptr %490, align 4, !tbaa !16
  %7233 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %7234 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %7233, i32 0, i32 1
  %7235 = load i8, ptr %7234, align 4, !tbaa !210, !range !127, !noundef !128
  %7236 = trunc i8 %7235 to i1
  br i1 %7236, label %7254, label %7237

7237:                                             ; preds = %7226
  %7238 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %7239 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %7238, i32 0, i32 0
  %7240 = load i32, ptr %7239, align 4, !tbaa !207
  %7241 = icmp ult i32 %7240, 430
  br i1 %7241, label %7242, label %7254

7242:                                             ; preds = %7237
  call void @llvm.lifetime.start.p0(i64 32, ptr %491) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %492) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %492) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %491, ptr noundef @.str.1421, ptr noundef nonnull align 1 dereferenceable(1) %492)
          to label %7243 unwind label %7245

7243:                                             ; preds = %7242
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %491)
          to label %7244 unwind label %7249

7244:                                             ; preds = %7243
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %491) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %492) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %492) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %491) #9
  br label %7254

7245:                                             ; preds = %7242
  %7246 = landingpad { ptr, i32 }
          cleanup
  %7247 = extractvalue { ptr, i32 } %7246, 0
  store ptr %7247, ptr %23, align 8
  %7248 = extractvalue { ptr, i32 } %7246, 1
  store i32 %7248, ptr %24, align 4
  br label %7253

7249:                                             ; preds = %7243
  %7250 = landingpad { ptr, i32 }
          cleanup
  %7251 = extractvalue { ptr, i32 } %7250, 0
  store ptr %7251, ptr %23, align 8
  %7252 = extractvalue { ptr, i32 } %7250, 1
  store i32 %7252, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %491) #9
  br label %7253

7253:                                             ; preds = %7249, %7245
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %492) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %492) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %491) #9
  br label %7297

7254:                                             ; preds = %7244, %7237, %7226
  %7255 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %7256 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %7255, i32 0, i32 1
  %7257 = load i8, ptr %7256, align 4, !tbaa !210, !range !127, !noundef !128
  %7258 = trunc i8 %7257 to i1
  br i1 %7258, label %7259, label %7266

7259:                                             ; preds = %7254
  %7260 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %7260, ptr noundef @.str.1422)
          to label %7261 unwind label %7262

7261:                                             ; preds = %7259
  call void @__cxa_throw(ptr %7260, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
  unreachable

7262:                                             ; preds = %7259
  %7263 = landingpad { ptr, i32 }
          cleanup
  %7264 = extractvalue { ptr, i32 } %7263, 0
  store ptr %7264, ptr %23, align 8
  %7265 = extractvalue { ptr, i32 } %7263, 1
  store i32 %7265, ptr %24, align 4
  call void @__cxa_free_exception(ptr %7260) #9
  br label %7297

7266:                                             ; preds = %7254
  call void @llvm.lifetime.start.p0(i64 32, ptr %493) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %494) #9
  %7267 = load ptr, ptr %5, align 8, !tbaa !5
  %7268 = getelementptr inbounds i32, ptr %7267, i64 2
  %7269 = load i32, ptr %7268, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL36convert_separate_image_to_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %494, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %7269)
  invoke void @_ZN11spirv_cross4joinIJRA20_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %493, ptr noundef nonnull align 1 dereferenceable(20) @.str.1423, ptr noundef nonnull align 8 dereferenceable(32) %494, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %7270 unwind label %7283

7270:                                             ; preds = %7266
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %494) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %494) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %495) #9
  %7271 = load ptr, ptr %5, align 8, !tbaa !5
  %7272 = getelementptr inbounds i32, ptr %7271, i64 0
  %7273 = load i32, ptr %7272, align 4, !tbaa !16
  %7274 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %7273)
          to label %7275 unwind label %7287

7275:                                             ; preds = %7270
  store ptr %7274, ptr %495, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %496) #9
  %7276 = load ptr, ptr %495, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionERKNS_8SPIRTypeENS1_8BaseTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %496, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(336) %7276, i32 noundef 7, ptr noundef nonnull align 8 dereferenceable(32) %493)
          to label %7277 unwind label %7291

7277:                                             ; preds = %7275
  %7278 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %493, ptr noundef nonnull align 8 dereferenceable(32) %496) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %496) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %496) #9
  %7279 = load i32, ptr %489, align 4, !tbaa !16
  %7280 = load i32, ptr %490, align 4, !tbaa !16
  %7281 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %7279, i32 noundef %7280, ptr noundef nonnull align 8 dereferenceable(32) %493, i1 noundef zeroext true, i1 noundef zeroext false)
          to label %7282 unwind label %7287

7282:                                             ; preds = %7277
  call void @llvm.lifetime.end.p0(i64 8, ptr %495) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %493) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %493) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %490) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %489) #9
  br label %11526

7283:                                             ; preds = %7266
  %7284 = landingpad { ptr, i32 }
          cleanup
  %7285 = extractvalue { ptr, i32 } %7284, 0
  store ptr %7285, ptr %23, align 8
  %7286 = extractvalue { ptr, i32 } %7284, 1
  store i32 %7286, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %494) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %494) #9
  br label %7296

7287:                                             ; preds = %7277, %7270
  %7288 = landingpad { ptr, i32 }
          cleanup
  %7289 = extractvalue { ptr, i32 } %7288, 0
  store ptr %7289, ptr %23, align 8
  %7290 = extractvalue { ptr, i32 } %7288, 1
  store i32 %7290, ptr %24, align 4
  br label %7295

7291:                                             ; preds = %7275
  %7292 = landingpad { ptr, i32 }
          cleanup
  %7293 = extractvalue { ptr, i32 } %7292, 0
  store ptr %7293, ptr %23, align 8
  %7294 = extractvalue { ptr, i32 } %7292, 1
  store i32 %7294, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %496) #9
  br label %7295

7295:                                             ; preds = %7291, %7287
  call void @llvm.lifetime.end.p0(i64 8, ptr %495) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %493) #9
  br label %7296

7296:                                             ; preds = %7295, %7283
  call void @llvm.lifetime.end.p0(i64 32, ptr %493) #9
  br label %7297

7297:                                             ; preds = %7296, %7262, %7253
  call void @llvm.lifetime.end.p0(i64 4, ptr %490) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %489) #9
  br label %11527

7298:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 8, ptr %497) #9
  %7299 = load ptr, ptr %5, align 8, !tbaa !5
  %7300 = getelementptr inbounds i32, ptr %7299, i64 2
  %7301 = load i32, ptr %7300, align 4, !tbaa !16
  %7302 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %7301)
  store ptr %7302, ptr %497, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %498) #9
  %7303 = load ptr, ptr %5, align 8, !tbaa !5
  %7304 = getelementptr inbounds i32, ptr %7303, i64 0
  %7305 = load i32, ptr %7304, align 4, !tbaa !16
  store i32 %7305, ptr %498, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %499) #9
  %7306 = load ptr, ptr %5, align 8, !tbaa !5
  %7307 = getelementptr inbounds i32, ptr %7306, i64 1
  %7308 = load i32, ptr %7307, align 4, !tbaa !16
  store i32 %7308, ptr %499, align 4, !tbaa !16
  %7309 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %7310 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %7309, i32 0, i32 1
  %7311 = load i8, ptr %7310, align 4, !tbaa !210, !range !127, !noundef !128
  %7312 = trunc i8 %7311 to i1
  br i1 %7312, label %7313, label %7320

7313:                                             ; preds = %7298
  %7314 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %7314, ptr noundef @.str.1424)
          to label %7315 unwind label %7316

7315:                                             ; preds = %7313
  call void @__cxa_throw(ptr %7314, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
  unreachable

7316:                                             ; preds = %7313
  %7317 = landingpad { ptr, i32 }
          cleanup
  %7318 = extractvalue { ptr, i32 } %7317, 0
  store ptr %7318, ptr %23, align 8
  %7319 = extractvalue { ptr, i32 } %7317, 1
  store i32 %7319, ptr %24, align 4
  call void @__cxa_free_exception(ptr %7314) #9
  br label %7399

7320:                                             ; preds = %7298
  %7321 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %7322 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %7321, i32 0, i32 0
  %7323 = load i32, ptr %7322, align 4, !tbaa !207
  %7324 = icmp ult i32 %7323, 450
  br i1 %7324, label %7325, label %7337

7325:                                             ; preds = %7320
  call void @llvm.lifetime.start.p0(i64 32, ptr %500) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %501) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %501) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %500, ptr noundef @.str.1425, ptr noundef nonnull align 1 dereferenceable(1) %501)
          to label %7326 unwind label %7328

7326:                                             ; preds = %7325
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %500)
          to label %7327 unwind label %7332

7327:                                             ; preds = %7326
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %500) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %501) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %501) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %500) #9
  br label %7337

7328:                                             ; preds = %7325
  %7329 = landingpad { ptr, i32 }
          cleanup
  %7330 = extractvalue { ptr, i32 } %7329, 0
  store ptr %7330, ptr %23, align 8
  %7331 = extractvalue { ptr, i32 } %7329, 1
  store i32 %7331, ptr %24, align 4
  br label %7336

7332:                                             ; preds = %7326
  %7333 = landingpad { ptr, i32 }
          cleanup
  %7334 = extractvalue { ptr, i32 } %7333, 0
  store ptr %7334, ptr %23, align 8
  %7335 = extractvalue { ptr, i32 } %7333, 1
  store i32 %7335, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %500) #9
  br label %7336

7336:                                             ; preds = %7332, %7328
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %501) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %501) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %500) #9
  br label %7399

7337:                                             ; preds = %7327, %7320
  br label %7338

7338:                                             ; preds = %7337
  call void @llvm.lifetime.start.p0(i64 32, ptr %502) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %502) #9
  %7339 = load ptr, ptr %497, align 8, !tbaa !5
  %7340 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %7339, i32 0, i32 14
  %7341 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %7340, i32 0, i32 5
  %7342 = load i32, ptr %7341, align 4, !tbaa !214
  %7343 = icmp eq i32 %7342, 2
  br i1 %7343, label %7344, label %7360

7344:                                             ; preds = %7338
  call void @llvm.lifetime.start.p0(i64 32, ptr %503) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %504) #9
  %7345 = load ptr, ptr %5, align 8, !tbaa !5
  %7346 = getelementptr inbounds i32, ptr %7345, i64 2
  %7347 = load i32, ptr %7346, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %504, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %7347)
          to label %7348 unwind label %7351

7348:                                             ; preds = %7344
  invoke void @_ZN11spirv_cross4joinIJRA14_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %503, ptr noundef nonnull align 1 dereferenceable(14) @.str.1426, ptr noundef nonnull align 8 dereferenceable(32) %504, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %7349 unwind label %7355

7349:                                             ; preds = %7348
  %7350 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %502, ptr noundef nonnull align 8 dereferenceable(32) %503) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %503) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %504) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %504) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %503) #9
  br label %7376

7351:                                             ; preds = %7344
  %7352 = landingpad { ptr, i32 }
          cleanup
  %7353 = extractvalue { ptr, i32 } %7352, 0
  store ptr %7353, ptr %23, align 8
  %7354 = extractvalue { ptr, i32 } %7352, 1
  store i32 %7354, ptr %24, align 4
  br label %7359

7355:                                             ; preds = %7348
  %7356 = landingpad { ptr, i32 }
          cleanup
  %7357 = extractvalue { ptr, i32 } %7356, 0
  store ptr %7357, ptr %23, align 8
  %7358 = extractvalue { ptr, i32 } %7356, 1
  store i32 %7358, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %504) #9
  br label %7359

7359:                                             ; preds = %7355, %7351
  call void @llvm.lifetime.end.p0(i64 32, ptr %504) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %503) #9
  br label %7398

7360:                                             ; preds = %7338
  call void @llvm.lifetime.start.p0(i64 32, ptr %505) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %506) #9
  %7361 = load ptr, ptr %5, align 8, !tbaa !5
  %7362 = getelementptr inbounds i32, ptr %7361, i64 2
  %7363 = load i32, ptr %7362, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL36convert_separate_image_to_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %506, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %7363)
          to label %7364 unwind label %7367

7364:                                             ; preds = %7360
  invoke void @_ZN11spirv_cross4joinIJRA16_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %505, ptr noundef nonnull align 1 dereferenceable(16) @.str.1427, ptr noundef nonnull align 8 dereferenceable(32) %506, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %7365 unwind label %7371

7365:                                             ; preds = %7364
  %7366 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %502, ptr noundef nonnull align 8 dereferenceable(32) %505) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %505) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %506) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %506) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %505) #9
  br label %7376

7367:                                             ; preds = %7360
  %7368 = landingpad { ptr, i32 }
          cleanup
  %7369 = extractvalue { ptr, i32 } %7368, 0
  store ptr %7369, ptr %23, align 8
  %7370 = extractvalue { ptr, i32 } %7368, 1
  store i32 %7370, ptr %24, align 4
  br label %7375

7371:                                             ; preds = %7364
  %7372 = landingpad { ptr, i32 }
          cleanup
  %7373 = extractvalue { ptr, i32 } %7372, 0
  store ptr %7373, ptr %23, align 8
  %7374 = extractvalue { ptr, i32 } %7372, 1
  store i32 %7374, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %506) #9
  br label %7375

7375:                                             ; preds = %7371, %7367
  call void @llvm.lifetime.end.p0(i64 32, ptr %506) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %505) #9
  br label %7398

7376:                                             ; preds = %7365, %7349
  call void @llvm.lifetime.start.p0(i64 8, ptr %507) #9
  %7377 = load ptr, ptr %5, align 8, !tbaa !5
  %7378 = getelementptr inbounds i32, ptr %7377, i64 0
  %7379 = load i32, ptr %7378, align 4, !tbaa !16
  %7380 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %7379)
          to label %7381 unwind label %7389

7381:                                             ; preds = %7376
  store ptr %7380, ptr %507, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %508) #9
  %7382 = load ptr, ptr %507, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionERKNS_8SPIRTypeENS1_8BaseTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %508, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(336) %7382, i32 noundef 7, ptr noundef nonnull align 8 dereferenceable(32) %502)
          to label %7383 unwind label %7393

7383:                                             ; preds = %7381
  %7384 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %502, ptr noundef nonnull align 8 dereferenceable(32) %508) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %508) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %508) #9
  %7385 = load i32, ptr %498, align 4, !tbaa !16
  %7386 = load i32, ptr %499, align 4, !tbaa !16
  %7387 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %7385, i32 noundef %7386, ptr noundef nonnull align 8 dereferenceable(32) %502, i1 noundef zeroext true, i1 noundef zeroext false)
          to label %7388 unwind label %7389

7388:                                             ; preds = %7383
  call void @llvm.lifetime.end.p0(i64 8, ptr %507) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %502) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %502) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %499) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %498) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %497) #9
  br label %11526

7389:                                             ; preds = %7383, %7376
  %7390 = landingpad { ptr, i32 }
          cleanup
  %7391 = extractvalue { ptr, i32 } %7390, 0
  store ptr %7391, ptr %23, align 8
  %7392 = extractvalue { ptr, i32 } %7390, 1
  store i32 %7392, ptr %24, align 4
  br label %7397

7393:                                             ; preds = %7381
  %7394 = landingpad { ptr, i32 }
          cleanup
  %7395 = extractvalue { ptr, i32 } %7394, 0
  store ptr %7395, ptr %23, align 8
  %7396 = extractvalue { ptr, i32 } %7394, 1
  store i32 %7396, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %508) #9
  br label %7397

7397:                                             ; preds = %7393, %7389
  call void @llvm.lifetime.end.p0(i64 8, ptr %507) #9
  br label %7398

7398:                                             ; preds = %7397, %7375, %7359
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %502) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %502) #9
  br label %7399

7399:                                             ; preds = %7398, %7336, %7316
  call void @llvm.lifetime.end.p0(i64 4, ptr %499) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %498) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %497) #9
  br label %11527

7400:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %509) #9
  %7401 = load ptr, ptr %5, align 8, !tbaa !5
  %7402 = getelementptr inbounds i32, ptr %7401, i64 0
  %7403 = load i32, ptr %7402, align 4, !tbaa !16
  store i32 %7403, ptr %509, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %510) #9
  %7404 = load ptr, ptr %5, align 8, !tbaa !5
  %7405 = getelementptr inbounds i32, ptr %7404, i64 1
  %7406 = load i32, ptr %7405, align 4, !tbaa !16
  store i32 %7406, ptr %510, align 4, !tbaa !16
  %7407 = load i32, ptr %509, align 4, !tbaa !16
  %7408 = load i32, ptr %510, align 4, !tbaa !16
  %7409 = load ptr, ptr %5, align 8, !tbaa !5
  %7410 = getelementptr inbounds i32, ptr %7409, i64 2
  %7411 = load i32, ptr %7410, align 4, !tbaa !16
  %7412 = load ptr, ptr %5, align 8, !tbaa !5
  %7413 = getelementptr inbounds i32, ptr %7412, i64 3
  %7414 = load i32, ptr %7413, align 4, !tbaa !16
  %7415 = load ptr, ptr %885, align 8, !tbaa !145
  %7416 = getelementptr inbounds ptr, ptr %7415, i64 15
  %7417 = load ptr, ptr %7416, align 8
  call void %7417(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %7407, i32 noundef %7408, i32 noundef %7411, i32 noundef %7414)
  %7418 = load i32, ptr %510, align 4, !tbaa !16
  %7419 = load ptr, ptr %5, align 8, !tbaa !5
  %7420 = getelementptr inbounds i32, ptr %7419, i64 2
  %7421 = load i32, ptr %7420, align 4, !tbaa !16
  call void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %7418, i32 noundef %7421)
  %7422 = load i32, ptr %510, align 4, !tbaa !16
  %7423 = load ptr, ptr %5, align 8, !tbaa !5
  %7424 = getelementptr inbounds i32, ptr %7423, i64 3
  %7425 = load i32, ptr %7424, align 4, !tbaa !16
  call void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %7422, i32 noundef %7425)
  call void @llvm.lifetime.end.p0(i64 4, ptr %510) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %509) #9
  br label %11526

7426:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %511) #9
  %7427 = load ptr, ptr %5, align 8, !tbaa !5
  %7428 = getelementptr inbounds i32, ptr %7427, i64 0
  %7429 = load i32, ptr %7428, align 4, !tbaa !16
  store i32 %7429, ptr %511, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %512) #9
  %7430 = load ptr, ptr %5, align 8, !tbaa !5
  %7431 = getelementptr inbounds i32, ptr %7430, i64 1
  %7432 = load i32, ptr %7431, align 4, !tbaa !16
  store i32 %7432, ptr %512, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %513) #9
  %7433 = load ptr, ptr %5, align 8, !tbaa !5
  %7434 = getelementptr inbounds i32, ptr %7433, i64 2
  %7435 = load i32, ptr %7434, align 4, !tbaa !16
  store i32 %7435, ptr %513, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 8, ptr %514) #9
  %7436 = load i32, ptr %513, align 4, !tbaa !16
  %7437 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %7436)
  store ptr %7437, ptr %514, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %515) #9
  %7438 = load ptr, ptr %514, align 8, !tbaa !5
  %7439 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %7438, i32 0, i32 1
  %7440 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %7439)
  %7441 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %7440)
  store ptr %7441, ptr %515, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %516) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %517) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %517) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %516, ptr noundef @.str.492, ptr noundef nonnull align 1 dereferenceable(1) %517)
          to label %7442 unwind label %7450

7442:                                             ; preds = %7426
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %517) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %517) #9
  %7443 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL17is_legacy_desktopEv(ptr noundef nonnull align 8 dereferenceable(9848) %885)
          to label %7444 unwind label %7454

7444:                                             ; preds = %7442
  br i1 %7443, label %7445, label %7462

7445:                                             ; preds = %7444
  call void @llvm.lifetime.start.p0(i64 32, ptr %518) #9
  %7446 = load ptr, ptr %515, align 8, !tbaa !5
  %7447 = load i32, ptr %513, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13legacy_tex_opERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %518, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %516, ptr noundef nonnull align 8 dereferenceable(336) %7446, i32 noundef %7447)
          to label %7448 unwind label %7458

7448:                                             ; preds = %7445
  %7449 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %516, ptr noundef nonnull align 8 dereferenceable(32) %518) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %518) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %518) #9
  br label %7473

7450:                                             ; preds = %7426
  %7451 = landingpad { ptr, i32 }
          cleanup
  %7452 = extractvalue { ptr, i32 } %7451, 0
  store ptr %7452, ptr %23, align 8
  %7453 = extractvalue { ptr, i32 } %7451, 1
  store i32 %7453, ptr %24, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %517) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %517) #9
  br label %7537

7454:                                             ; preds = %7467, %7462, %7442
  %7455 = landingpad { ptr, i32 }
          cleanup
  %7456 = extractvalue { ptr, i32 } %7455, 0
  store ptr %7456, ptr %23, align 8
  %7457 = extractvalue { ptr, i32 } %7455, 1
  store i32 %7457, ptr %24, align 4
  br label %7536

7458:                                             ; preds = %7445
  %7459 = landingpad { ptr, i32 }
          cleanup
  %7460 = extractvalue { ptr, i32 } %7459, 0
  store ptr %7460, ptr %23, align 8
  %7461 = extractvalue { ptr, i32 } %7459, 1
  store i32 %7461, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %518) #9
  br label %7536

7462:                                             ; preds = %7444
  %7463 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL12is_legacy_esEv(ptr noundef nonnull align 8 dereferenceable(9848) %885)
          to label %7464 unwind label %7454

7464:                                             ; preds = %7462
  br i1 %7463, label %7465, label %7472

7465:                                             ; preds = %7464
  %7466 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %7466, ptr noundef @.str.1428)
          to label %7467 unwind label %7468

7467:                                             ; preds = %7465
  invoke void @__cxa_throw(ptr %7466, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
          to label %11533 unwind label %7454

7468:                                             ; preds = %7465
  %7469 = landingpad { ptr, i32 }
          cleanup
  %7470 = extractvalue { ptr, i32 } %7469, 0
  store ptr %7470, ptr %23, align 8
  %7471 = extractvalue { ptr, i32 } %7469, 1
  store i32 %7471, ptr %24, align 4
  call void @__cxa_free_exception(ptr %7466) #9
  br label %7536

7472:                                             ; preds = %7464
  br label %7473

7473:                                             ; preds = %7472, %7448
  call void @llvm.lifetime.start.p0(i64 32, ptr %519) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %520) #9
  %7474 = load i32, ptr %513, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL36convert_separate_image_to_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %520, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %7474)
          to label %7475 unwind label %7494

7475:                                             ; preds = %7473
  call void @llvm.lifetime.start.p0(i64 32, ptr %521) #9
  %7476 = load ptr, ptr %5, align 8, !tbaa !5
  %7477 = getelementptr inbounds i32, ptr %7476, i64 3
  %7478 = load i32, ptr %7477, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionB5cxx11ENS_8SPIRType8BaseTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %521, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef 7, i32 noundef %7478)
          to label %7479 unwind label %7498

7479:                                             ; preds = %7475
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS6_RA3_S8_S6_SA_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %519, ptr noundef nonnull align 8 dereferenceable(32) %516, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %520, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %521, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %7480 unwind label %7502

7480:                                             ; preds = %7479
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %521) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %521) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %520) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %520) #9
  %7481 = load ptr, ptr %514, align 8, !tbaa !5
  %7482 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %7481, i32 0, i32 14
  %7483 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %7482, i32 0, i32 1
  %7484 = load i32, ptr %7483, align 4, !tbaa !215
  %7485 = icmp eq i32 %7484, 0
  br i1 %7485, label %7486, label %7512

7486:                                             ; preds = %7480
  %7487 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %7488 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %7487, i32 0, i32 1
  %7489 = load i8, ptr %7488, align 4, !tbaa !210, !range !127, !noundef !128
  %7490 = trunc i8 %7489 to i1
  br i1 %7490, label %7491, label %7512

7491:                                             ; preds = %7486
  call void @llvm.lifetime.start.p0(i64 32, ptr %522) #9
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_KcEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %522, ptr noundef nonnull align 8 dereferenceable(32) %519, ptr noundef nonnull align 1 dereferenceable(3) @.str)
          to label %7492 unwind label %7508

7492:                                             ; preds = %7491
  %7493 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %519, ptr noundef nonnull align 8 dereferenceable(32) %522) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %522) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %522) #9
  br label %7512

7494:                                             ; preds = %7473
  %7495 = landingpad { ptr, i32 }
          cleanup
  %7496 = extractvalue { ptr, i32 } %7495, 0
  store ptr %7496, ptr %23, align 8
  %7497 = extractvalue { ptr, i32 } %7495, 1
  store i32 %7497, ptr %24, align 4
  br label %7507

7498:                                             ; preds = %7475
  %7499 = landingpad { ptr, i32 }
          cleanup
  %7500 = extractvalue { ptr, i32 } %7499, 0
  store ptr %7500, ptr %23, align 8
  %7501 = extractvalue { ptr, i32 } %7499, 1
  store i32 %7501, ptr %24, align 4
  br label %7506

7502:                                             ; preds = %7479
  %7503 = landingpad { ptr, i32 }
          cleanup
  %7504 = extractvalue { ptr, i32 } %7503, 0
  store ptr %7504, ptr %23, align 8
  %7505 = extractvalue { ptr, i32 } %7503, 1
  store i32 %7505, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %521) #9
  br label %7506

7506:                                             ; preds = %7502, %7498
  call void @llvm.lifetime.end.p0(i64 32, ptr %521) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %520) #9
  br label %7507

7507:                                             ; preds = %7506, %7494
  call void @llvm.lifetime.end.p0(i64 32, ptr %520) #9
  br label %7535

7508:                                             ; preds = %7491
  %7509 = landingpad { ptr, i32 }
          cleanup
  %7510 = extractvalue { ptr, i32 } %7509, 0
  store ptr %7510, ptr %23, align 8
  %7511 = extractvalue { ptr, i32 } %7509, 1
  store i32 %7511, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %522) #9
  br label %7534

7512:                                             ; preds = %7492, %7486, %7480
  call void @llvm.lifetime.start.p0(i64 8, ptr %523) #9
  %7513 = load ptr, ptr %5, align 8, !tbaa !5
  %7514 = getelementptr inbounds i32, ptr %7513, i64 0
  %7515 = load i32, ptr %7514, align 4, !tbaa !16
  %7516 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %7515)
          to label %7517 unwind label %7525

7517:                                             ; preds = %7512
  store ptr %7516, ptr %523, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %524) #9
  %7518 = load ptr, ptr %523, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionERKNS_8SPIRTypeENS1_8BaseTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %524, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(336) %7518, i32 noundef 7, ptr noundef nonnull align 8 dereferenceable(32) %519)
          to label %7519 unwind label %7529

7519:                                             ; preds = %7517
  %7520 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %519, ptr noundef nonnull align 8 dereferenceable(32) %524) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %524) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %524) #9
  %7521 = load i32, ptr %511, align 4, !tbaa !16
  %7522 = load i32, ptr %512, align 4, !tbaa !16
  %7523 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %7521, i32 noundef %7522, ptr noundef nonnull align 8 dereferenceable(32) %519, i1 noundef zeroext true, i1 noundef zeroext false)
          to label %7524 unwind label %7525

7524:                                             ; preds = %7519
  call void @llvm.lifetime.end.p0(i64 8, ptr %523) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %519) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %519) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %516) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %516) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %515) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %514) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %513) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %512) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %511) #9
  br label %11526

7525:                                             ; preds = %7519, %7512
  %7526 = landingpad { ptr, i32 }
          cleanup
  %7527 = extractvalue { ptr, i32 } %7526, 0
  store ptr %7527, ptr %23, align 8
  %7528 = extractvalue { ptr, i32 } %7526, 1
  store i32 %7528, ptr %24, align 4
  br label %7533

7529:                                             ; preds = %7517
  %7530 = landingpad { ptr, i32 }
          cleanup
  %7531 = extractvalue { ptr, i32 } %7530, 0
  store ptr %7531, ptr %23, align 8
  %7532 = extractvalue { ptr, i32 } %7530, 1
  store i32 %7532, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %524) #9
  br label %7533

7533:                                             ; preds = %7529, %7525
  call void @llvm.lifetime.end.p0(i64 8, ptr %523) #9
  br label %7534

7534:                                             ; preds = %7533, %7508
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %519) #9
  br label %7535

7535:                                             ; preds = %7534, %7507
  call void @llvm.lifetime.end.p0(i64 32, ptr %519) #9
  br label %7536

7536:                                             ; preds = %7535, %7468, %7458, %7454
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %516) #9
  br label %7537

7537:                                             ; preds = %7536, %7450
  call void @llvm.lifetime.end.p0(i64 32, ptr %516) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %515) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %514) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %513) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %512) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %511) #9
  br label %11527

7538:                                             ; preds = %919, %919
  call void @llvm.lifetime.start.p0(i64 8, ptr %525) #9
  %7539 = load ptr, ptr %5, align 8, !tbaa !5
  %7540 = getelementptr inbounds i32, ptr %7539, i64 2
  %7541 = load i32, ptr %7540, align 4, !tbaa !16
  %7542 = call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %7541)
  store ptr %7542, ptr %525, align 8, !tbaa !5
  %7543 = load ptr, ptr %525, align 8, !tbaa !5
  %7544 = icmp ne ptr %7543, null
  br i1 %7544, label %7545, label %7559

7545:                                             ; preds = %7538
  call void @llvm.lifetime.start.p0(i64 8, ptr %526) #9
  %7546 = load ptr, ptr %525, align 8, !tbaa !5
  %7547 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %7546, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %527, ptr align 8 %7547, i64 4, i1 false), !tbaa.struct !151
  %7548 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %527, i32 0, i32 0
  %7549 = load i32, ptr %7548, align 4
  %7550 = call noundef nonnull align 8 dereferenceable(64) ptr @_ZNK11spirv_cross8Compiler21get_decoration_bitsetENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 %7549)
  store ptr %7550, ptr %526, align 8, !tbaa !5
  %7551 = load ptr, ptr %526, align 8, !tbaa !5
  %7552 = call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %7551, i32 noundef 25)
  br i1 %7552, label %7553, label %7558

7553:                                             ; preds = %7545
  %7554 = load ptr, ptr %525, align 8, !tbaa !5
  %7555 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %7554, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %528, ptr align 8 %7555, i64 4, i1 false), !tbaa.struct !151
  %7556 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %528, i32 0, i32 0
  %7557 = load i32, ptr %7556, align 4
  call void @_ZN11spirv_cross8Compiler16unset_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 %7557, i32 noundef 25)
  call void @_ZN11spirv_cross8Compiler15force_recompileEv(ptr noundef nonnull align 8 dereferenceable(3176) %885)
  br label %7558

7558:                                             ; preds = %7553, %7545
  call void @llvm.lifetime.end.p0(i64 8, ptr %526) #9
  br label %7559

7559:                                             ; preds = %7558, %7538
  call void @llvm.lifetime.start.p0(i64 4, ptr %529) #9
  %7560 = load ptr, ptr %5, align 8, !tbaa !5
  %7561 = getelementptr inbounds i32, ptr %7560, i64 0
  %7562 = load i32, ptr %7561, align 4, !tbaa !16
  store i32 %7562, ptr %529, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %530) #9
  %7563 = load ptr, ptr %5, align 8, !tbaa !5
  %7564 = getelementptr inbounds i32, ptr %7563, i64 1
  %7565 = load i32, ptr %7564, align 4, !tbaa !16
  store i32 %7565, ptr %530, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 1, ptr %531) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %532) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %532) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %533) #9
  %7566 = load ptr, ptr %5, align 8, !tbaa !5
  %7567 = getelementptr inbounds i32, ptr %7566, i64 2
  %7568 = load i32, ptr %7567, align 4, !tbaa !16
  %7569 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %7568)
          to label %7570 unwind label %7587

7570:                                             ; preds = %7559
  store ptr %7569, ptr %533, align 8, !tbaa !5
  %7571 = load ptr, ptr %525, align 8, !tbaa !5
  %7572 = icmp ne ptr %7571, null
  br i1 %7572, label %7573, label %7704

7573:                                             ; preds = %7570
  %7574 = load ptr, ptr %525, align 8, !tbaa !5
  %7575 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %7574, i32 0, i32 14
  %7576 = load i8, ptr %7575, align 1, !tbaa !174, !range !127, !noundef !128
  %7577 = trunc i8 %7576 to i1
  br i1 %7577, label %7578, label %7704

7578:                                             ; preds = %7573
  %7579 = load ptr, ptr %533, align 8, !tbaa !5
  %7580 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %7579, i32 0, i32 14
  %7581 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %7580, i32 0, i32 4
  %7582 = load i8, ptr %7581, align 2, !tbaa !216, !range !127, !noundef !128
  %7583 = trunc i8 %7582 to i1
  br i1 %7583, label %7584, label %7595

7584:                                             ; preds = %7578
  %7585 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %7585, ptr noundef @.str.1429)
          to label %7586 unwind label %7591

7586:                                             ; preds = %7584
  invoke void @__cxa_throw(ptr %7585, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
          to label %11533 unwind label %7587

7587:                                             ; preds = %8248, %8237, %8232, %7717, %7713, %7586, %7559
  %7588 = landingpad { ptr, i32 }
          cleanup
  %7589 = extractvalue { ptr, i32 } %7588, 0
  store ptr %7589, ptr %23, align 8
  %7590 = extractvalue { ptr, i32 } %7588, 1
  store i32 %7590, ptr %24, align 4
  br label %8255

7591:                                             ; preds = %7584
  %7592 = landingpad { ptr, i32 }
          cleanup
  %7593 = extractvalue { ptr, i32 } %7592, 0
  store ptr %7593, ptr %23, align 8
  %7594 = extractvalue { ptr, i32 } %7592, 1
  store i32 %7594, ptr %24, align 4
  call void @__cxa_free_exception(ptr %7585) #9
  br label %8255

7595:                                             ; preds = %7578
  call void @llvm.lifetime.start.p0(i64 8, ptr %534) #9
  %7596 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 38
  %7597 = invoke ptr @_ZSt5beginISt6vectorIN11spirv_cross8PlsRemapESaIS2_EEEDTcldtfp_5beginEERT_(ptr noundef nonnull align 8 dereferenceable(24) %7596)
          to label %7598 unwind label %7628

7598:                                             ; preds = %7595
  %7599 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %535, i32 0, i32 0
  store ptr %7597, ptr %7599, align 8
  %7600 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 38
  %7601 = invoke ptr @_ZSt3endISt6vectorIN11spirv_cross8PlsRemapESaIS2_EEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(24) %7600)
          to label %7602 unwind label %7628

7602:                                             ; preds = %7598
  %7603 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %536, i32 0, i32 0
  store ptr %7601, ptr %7603, align 8
  %7604 = getelementptr inbounds %class.anon.394, ptr %537, i32 0, i32 0
  %7605 = load ptr, ptr %525, align 8, !tbaa !5
  store ptr %7605, ptr %7604, align 8, !tbaa !217
  %7606 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %535, i32 0, i32 0
  %7607 = load ptr, ptr %7606, align 8
  %7608 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %536, i32 0, i32 0
  %7609 = load ptr, ptr %7608, align 8
  %7610 = getelementptr inbounds %class.anon.394, ptr %537, i32 0, i32 0
  %7611 = load ptr, ptr %7610, align 8
  %7612 = invoke ptr @"_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPN11spirv_cross8PlsRemapESt6vectorIS3_SaIS3_EEEEZNS2_12CompilerGLSL16emit_instructionERKNS2_11InstructionEE3$_0ET_SE_SE_T0_"(ptr %7607, ptr %7609, ptr %7611)
          to label %7613 unwind label %7628

7613:                                             ; preds = %7602
  %7614 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %534, i32 0, i32 0
  store ptr %7612, ptr %7614, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %538) #9
  %7615 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 38
  %7616 = invoke ptr @_ZSt3endISt6vectorIN11spirv_cross8PlsRemapESaIS2_EEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(24) %7615)
          to label %7617 unwind label %7632

7617:                                             ; preds = %7613
  %7618 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %538, i32 0, i32 0
  store ptr %7616, ptr %7618, align 8
  %7619 = call noundef zeroext i1 @_ZN9__gnu_cxxeqIPN11spirv_cross8PlsRemapESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %534, ptr noundef nonnull align 8 dereferenceable(8) %538) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %538) #9
  br i1 %7619, label %7620, label %7667

7620:                                             ; preds = %7617
  %7621 = load ptr, ptr %525, align 8, !tbaa !5
  %7622 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %7621, i32 0, i32 15
  %7623 = load i32, ptr %7622, align 4, !tbaa !219
  %7624 = icmp ne i32 %7623, 0
  br i1 %7624, label %7640, label %7625

7625:                                             ; preds = %7620
  %7626 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %7626, ptr noundef @.str.1430)
          to label %7627 unwind label %7636

7627:                                             ; preds = %7625
  invoke void @__cxa_throw(ptr %7626, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
          to label %11533 unwind label %7628

7628:                                             ; preds = %7627, %7602, %7598, %7595
  %7629 = landingpad { ptr, i32 }
          cleanup
  %7630 = extractvalue { ptr, i32 } %7629, 0
  store ptr %7630, ptr %23, align 8
  %7631 = extractvalue { ptr, i32 } %7629, 1
  store i32 %7631, ptr %24, align 4
  br label %7703

7632:                                             ; preds = %7613
  %7633 = landingpad { ptr, i32 }
          cleanup
  %7634 = extractvalue { ptr, i32 } %7633, 0
  store ptr %7634, ptr %23, align 8
  %7635 = extractvalue { ptr, i32 } %7633, 1
  store i32 %7635, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %538) #9
  br label %7703

7636:                                             ; preds = %7625
  %7637 = landingpad { ptr, i32 }
          cleanup
  %7638 = extractvalue { ptr, i32 } %7637, 0
  store ptr %7638, ptr %23, align 8
  %7639 = extractvalue { ptr, i32 } %7637, 1
  store i32 %7639, ptr %24, align 4
  call void @__cxa_free_exception(ptr %7626) #9
  br label %7703

7640:                                             ; preds = %7620
  call void @llvm.lifetime.start.p0(i64 32, ptr %539) #9
  %7641 = load i32, ptr %529, align 4, !tbaa !16
  %7642 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %7641)
          to label %7643 unwind label %7653

7643:                                             ; preds = %7640
  %7644 = load ptr, ptr %525, align 8, !tbaa !5
  %7645 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %7644, i32 0, i32 15
  %7646 = load i32, ptr %7645, align 4, !tbaa !219
  call void @llvm.lifetime.start.p0(i64 32, ptr %540) #9
  %7647 = load ptr, ptr %5, align 8, !tbaa !5
  %7648 = getelementptr inbounds i32, ptr %7647, i64 2
  %7649 = load i32, ptr %7648, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %540, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %7649, i1 noundef zeroext true)
          to label %7650 unwind label %7657

7650:                                             ; preds = %7643
  invoke void @_ZN11spirv_cross12CompilerGLSL13remap_swizzleERKNS_8SPIRTypeEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %539, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(336) %7642, i32 noundef %7646, ptr noundef nonnull align 8 dereferenceable(32) %540)
          to label %7651 unwind label %7661

7651:                                             ; preds = %7650
  %7652 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %532, ptr noundef nonnull align 8 dereferenceable(32) %539) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %539) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %540) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %540) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %539) #9
  br label %7702

7653:                                             ; preds = %7640
  %7654 = landingpad { ptr, i32 }
          cleanup
  %7655 = extractvalue { ptr, i32 } %7654, 0
  store ptr %7655, ptr %23, align 8
  %7656 = extractvalue { ptr, i32 } %7654, 1
  store i32 %7656, ptr %24, align 4
  br label %7666

7657:                                             ; preds = %7643
  %7658 = landingpad { ptr, i32 }
          cleanup
  %7659 = extractvalue { ptr, i32 } %7658, 0
  store ptr %7659, ptr %23, align 8
  %7660 = extractvalue { ptr, i32 } %7658, 1
  store i32 %7660, ptr %24, align 4
  br label %7665

7661:                                             ; preds = %7650
  %7662 = landingpad { ptr, i32 }
          cleanup
  %7663 = extractvalue { ptr, i32 } %7662, 0
  store ptr %7663, ptr %23, align 8
  %7664 = extractvalue { ptr, i32 } %7662, 1
  store i32 %7664, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %540) #9
  br label %7665

7665:                                             ; preds = %7661, %7657
  call void @llvm.lifetime.end.p0(i64 32, ptr %540) #9
  br label %7666

7666:                                             ; preds = %7665, %7653
  call void @llvm.lifetime.end.p0(i64 32, ptr %539) #9
  br label %7703

7667:                                             ; preds = %7617
  call void @llvm.lifetime.start.p0(i64 4, ptr %541) #9
  %7668 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN11spirv_cross8PlsRemapESt6vectorIS2_SaIS2_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %534) #9
  %7669 = getelementptr inbounds %"struct.spirv_cross::PlsRemap", ptr %7668, i32 0, i32 1
  %7670 = load i32, ptr %7669, align 4, !tbaa !220
  %7671 = invoke noundef i32 @_ZL24pls_format_to_componentsN11spirv_cross9PlsFormatE(i32 noundef %7670)
          to label %7672 unwind label %7683

7672:                                             ; preds = %7667
  store i32 %7671, ptr %541, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %542) #9
  %7673 = load i32, ptr %529, align 4, !tbaa !16
  %7674 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %7673)
          to label %7675 unwind label %7687

7675:                                             ; preds = %7672
  %7676 = load i32, ptr %541, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %543) #9
  %7677 = load ptr, ptr %5, align 8, !tbaa !5
  %7678 = getelementptr inbounds i32, ptr %7677, i64 2
  %7679 = load i32, ptr %7678, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %543, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %7679, i1 noundef zeroext true)
          to label %7680 unwind label %7691

7680:                                             ; preds = %7675
  invoke void @_ZN11spirv_cross12CompilerGLSL13remap_swizzleERKNS_8SPIRTypeEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %542, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(336) %7674, i32 noundef %7676, ptr noundef nonnull align 8 dereferenceable(32) %543)
          to label %7681 unwind label %7695

7681:                                             ; preds = %7680
  %7682 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %532, ptr noundef nonnull align 8 dereferenceable(32) %542) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %542) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %543) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %543) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %542) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %541) #9
  br label %7702

7683:                                             ; preds = %7667
  %7684 = landingpad { ptr, i32 }
          cleanup
  %7685 = extractvalue { ptr, i32 } %7684, 0
  store ptr %7685, ptr %23, align 8
  %7686 = extractvalue { ptr, i32 } %7684, 1
  store i32 %7686, ptr %24, align 4
  br label %7701

7687:                                             ; preds = %7672
  %7688 = landingpad { ptr, i32 }
          cleanup
  %7689 = extractvalue { ptr, i32 } %7688, 0
  store ptr %7689, ptr %23, align 8
  %7690 = extractvalue { ptr, i32 } %7688, 1
  store i32 %7690, ptr %24, align 4
  br label %7700

7691:                                             ; preds = %7675
  %7692 = landingpad { ptr, i32 }
          cleanup
  %7693 = extractvalue { ptr, i32 } %7692, 0
  store ptr %7693, ptr %23, align 8
  %7694 = extractvalue { ptr, i32 } %7692, 1
  store i32 %7694, ptr %24, align 4
  br label %7699

7695:                                             ; preds = %7680
  %7696 = landingpad { ptr, i32 }
          cleanup
  %7697 = extractvalue { ptr, i32 } %7696, 0
  store ptr %7697, ptr %23, align 8
  %7698 = extractvalue { ptr, i32 } %7696, 1
  store i32 %7698, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %543) #9
  br label %7699

7699:                                             ; preds = %7695, %7691
  call void @llvm.lifetime.end.p0(i64 32, ptr %543) #9
  br label %7700

7700:                                             ; preds = %7699, %7687
  call void @llvm.lifetime.end.p0(i64 32, ptr %542) #9
  br label %7701

7701:                                             ; preds = %7700, %7683
  call void @llvm.lifetime.end.p0(i64 4, ptr %541) #9
  br label %7703

7702:                                             ; preds = %7681, %7651
  store i8 1, ptr %531, align 1, !tbaa !142
  call void @llvm.lifetime.end.p0(i64 8, ptr %534) #9
  br label %8175

7703:                                             ; preds = %7701, %7666, %7636, %7632, %7628
  call void @llvm.lifetime.end.p0(i64 8, ptr %534) #9
  br label %8255

7704:                                             ; preds = %7573, %7570
  %7705 = load ptr, ptr %533, align 8, !tbaa !5
  %7706 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %7705, i32 0, i32 14
  %7707 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %7706, i32 0, i32 1
  %7708 = load i32, ptr %7707, align 4, !tbaa !215
  %7709 = icmp eq i32 %7708, 6
  br i1 %7709, label %7710, label %7887

7710:                                             ; preds = %7704
  %7711 = load ptr, ptr %525, align 8, !tbaa !5
  %7712 = icmp ne ptr %7711, null
  br i1 %7712, label %7713, label %7731

7713:                                             ; preds = %7710
  %7714 = load ptr, ptr %525, align 8, !tbaa !5
  %7715 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %7714, i32 0, i32 1
  %7716 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %7715)
          to label %7717 unwind label %7587

7717:                                             ; preds = %7713
  %7718 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL34subpass_input_is_framebuffer_fetchEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %7716)
          to label %7719 unwind label %7587

7719:                                             ; preds = %7717
  br i1 %7718, label %7720, label %7731

7720:                                             ; preds = %7719
  call void @llvm.lifetime.start.p0(i64 32, ptr %544) #9
  %7721 = load ptr, ptr %525, align 8, !tbaa !5
  %7722 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %7721, i32 0, i32 1
  %7723 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %7722)
          to label %7724 unwind label %7727

7724:                                             ; preds = %7720
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %544, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %7723, i1 noundef zeroext true)
          to label %7725 unwind label %7727

7725:                                             ; preds = %7724
  %7726 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %532, ptr noundef nonnull align 8 dereferenceable(32) %544) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %544) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %544) #9
  br label %7877

7727:                                             ; preds = %7724, %7720
  %7728 = landingpad { ptr, i32 }
          cleanup
  %7729 = extractvalue { ptr, i32 } %7728, 0
  store ptr %7729, ptr %23, align 8
  %7730 = extractvalue { ptr, i32 } %7728, 1
  store i32 %7730, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %544) #9
  br label %8255

7731:                                             ; preds = %7719, %7710
  %7732 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %7733 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %7732, i32 0, i32 4
  %7734 = load i8, ptr %7733, align 4, !tbaa !223, !range !127, !noundef !128
  %7735 = trunc i8 %7734 to i1
  br i1 %7735, label %7736, label %7806

7736:                                             ; preds = %7731
  %7737 = load ptr, ptr %533, align 8, !tbaa !5
  %7738 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %7737, i32 0, i32 14
  %7739 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %7738, i32 0, i32 4
  %7740 = load i8, ptr %7739, align 2, !tbaa !216, !range !127, !noundef !128
  %7741 = trunc i8 %7740 to i1
  br i1 %7741, label %7742, label %7789

7742:                                             ; preds = %7736
  call void @llvm.lifetime.start.p0(i64 4, ptr %545) #9
  %7743 = load ptr, ptr %5, align 8, !tbaa !5
  %7744 = getelementptr inbounds i32, ptr %7743, i64 4
  %7745 = load i32, ptr %7744, align 4, !tbaa !16
  store i32 %7745, ptr %545, align 4, !tbaa !16
  %7746 = load i32, ptr %545, align 4, !tbaa !16
  %7747 = icmp ne i32 %7746, 64
  br i1 %7747, label %7751, label %7748

7748:                                             ; preds = %7742
  %7749 = load i32, ptr %7, align 4, !tbaa !16
  %7750 = icmp ne i32 %7749, 6
  br i1 %7750, label %7751, label %7762

7751:                                             ; preds = %7748, %7742
  %7752 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %7752, ptr noundef @.str.1431)
          to label %7753 unwind label %7754

7753:                                             ; preds = %7751
  invoke void @__cxa_throw(ptr %7752, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
          to label %11533 unwind label %7758

7754:                                             ; preds = %7751
  %7755 = landingpad { ptr, i32 }
          cleanup
  %7756 = extractvalue { ptr, i32 } %7755, 0
  store ptr %7756, ptr %23, align 8
  %7757 = extractvalue { ptr, i32 } %7755, 1
  store i32 %7757, ptr %24, align 4
  call void @__cxa_free_exception(ptr %7752) #9
  br label %7788

7758:                                             ; preds = %7753
  %7759 = landingpad { ptr, i32 }
          cleanup
  %7760 = extractvalue { ptr, i32 } %7759, 0
  store ptr %7760, ptr %23, align 8
  %7761 = extractvalue { ptr, i32 } %7759, 1
  store i32 %7761, ptr %24, align 4
  br label %7788

7762:                                             ; preds = %7748
  call void @llvm.lifetime.start.p0(i64 4, ptr %546) #9
  %7763 = load ptr, ptr %5, align 8, !tbaa !5
  %7764 = getelementptr inbounds i32, ptr %7763, i64 5
  %7765 = load i32, ptr %7764, align 4, !tbaa !16
  store i32 %7765, ptr %546, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %547) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %548) #9
  %7766 = load ptr, ptr %5, align 8, !tbaa !5
  %7767 = getelementptr inbounds i32, ptr %7766, i64 2
  %7768 = load i32, ptr %7767, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %548, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %7768)
          to label %7769 unwind label %7774

7769:                                             ; preds = %7762
  call void @llvm.lifetime.start.p0(i64 32, ptr %549) #9
  %7770 = load i32, ptr %546, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %549, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %7770, i1 noundef zeroext true)
          to label %7771 unwind label %7778

7771:                                             ; preds = %7769
  invoke void @_ZN11spirv_cross4joinIJRA13_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_S9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %547, ptr noundef nonnull align 1 dereferenceable(13) @.str.1432, ptr noundef nonnull align 8 dereferenceable(32) %548, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %549, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %7772 unwind label %7782

7772:                                             ; preds = %7771
  %7773 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %532, ptr noundef nonnull align 8 dereferenceable(32) %547) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %547) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %549) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %549) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %548) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %548) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %547) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %546) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %545) #9
  br label %7805

7774:                                             ; preds = %7762
  %7775 = landingpad { ptr, i32 }
          cleanup
  %7776 = extractvalue { ptr, i32 } %7775, 0
  store ptr %7776, ptr %23, align 8
  %7777 = extractvalue { ptr, i32 } %7775, 1
  store i32 %7777, ptr %24, align 4
  br label %7787

7778:                                             ; preds = %7769
  %7779 = landingpad { ptr, i32 }
          cleanup
  %7780 = extractvalue { ptr, i32 } %7779, 0
  store ptr %7780, ptr %23, align 8
  %7781 = extractvalue { ptr, i32 } %7779, 1
  store i32 %7781, ptr %24, align 4
  br label %7786

7782:                                             ; preds = %7771
  %7783 = landingpad { ptr, i32 }
          cleanup
  %7784 = extractvalue { ptr, i32 } %7783, 0
  store ptr %7784, ptr %23, align 8
  %7785 = extractvalue { ptr, i32 } %7783, 1
  store i32 %7785, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %549) #9
  br label %7786

7786:                                             ; preds = %7782, %7778
  call void @llvm.lifetime.end.p0(i64 32, ptr %549) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %548) #9
  br label %7787

7787:                                             ; preds = %7786, %7774
  call void @llvm.lifetime.end.p0(i64 32, ptr %548) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %547) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %546) #9
  br label %7788

7788:                                             ; preds = %7787, %7758, %7754
  call void @llvm.lifetime.end.p0(i64 4, ptr %545) #9
  br label %8255

7789:                                             ; preds = %7736
  call void @llvm.lifetime.start.p0(i64 32, ptr %550) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %551) #9
  %7790 = load ptr, ptr %5, align 8, !tbaa !5
  %7791 = getelementptr inbounds i32, ptr %7790, i64 2
  %7792 = load i32, ptr %7791, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %551, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %7792)
          to label %7793 unwind label %7796

7793:                                             ; preds = %7789
  invoke void @_ZN11spirv_cross4joinIJRA13_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %550, ptr noundef nonnull align 1 dereferenceable(13) @.str.1432, ptr noundef nonnull align 8 dereferenceable(32) %551, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %7794 unwind label %7800

7794:                                             ; preds = %7793
  %7795 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %532, ptr noundef nonnull align 8 dereferenceable(32) %550) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %550) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %551) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %551) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %550) #9
  br label %7805

7796:                                             ; preds = %7789
  %7797 = landingpad { ptr, i32 }
          cleanup
  %7798 = extractvalue { ptr, i32 } %7797, 0
  store ptr %7798, ptr %23, align 8
  %7799 = extractvalue { ptr, i32 } %7797, 1
  store i32 %7799, ptr %24, align 4
  br label %7804

7800:                                             ; preds = %7793
  %7801 = landingpad { ptr, i32 }
          cleanup
  %7802 = extractvalue { ptr, i32 } %7801, 0
  store ptr %7802, ptr %23, align 8
  %7803 = extractvalue { ptr, i32 } %7801, 1
  store i32 %7803, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %551) #9
  br label %7804

7804:                                             ; preds = %7800, %7796
  call void @llvm.lifetime.end.p0(i64 32, ptr %551) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %550) #9
  br label %8255

7805:                                             ; preds = %7794, %7772
  br label %7876

7806:                                             ; preds = %7731
  %7807 = load ptr, ptr %533, align 8, !tbaa !5
  %7808 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %7807, i32 0, i32 14
  %7809 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %7808, i32 0, i32 4
  %7810 = load i8, ptr %7809, align 2, !tbaa !216, !range !127, !noundef !128
  %7811 = trunc i8 %7810 to i1
  br i1 %7811, label %7812, label %7859

7812:                                             ; preds = %7806
  call void @llvm.lifetime.start.p0(i64 4, ptr %552) #9
  %7813 = load ptr, ptr %5, align 8, !tbaa !5
  %7814 = getelementptr inbounds i32, ptr %7813, i64 4
  %7815 = load i32, ptr %7814, align 4, !tbaa !16
  store i32 %7815, ptr %552, align 4, !tbaa !16
  %7816 = load i32, ptr %552, align 4, !tbaa !16
  %7817 = icmp ne i32 %7816, 64
  br i1 %7817, label %7821, label %7818

7818:                                             ; preds = %7812
  %7819 = load i32, ptr %7, align 4, !tbaa !16
  %7820 = icmp ne i32 %7819, 6
  br i1 %7820, label %7821, label %7832

7821:                                             ; preds = %7818, %7812
  %7822 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %7822, ptr noundef @.str.1431)
          to label %7823 unwind label %7824

7823:                                             ; preds = %7821
  invoke void @__cxa_throw(ptr %7822, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
          to label %11533 unwind label %7828

7824:                                             ; preds = %7821
  %7825 = landingpad { ptr, i32 }
          cleanup
  %7826 = extractvalue { ptr, i32 } %7825, 0
  store ptr %7826, ptr %23, align 8
  %7827 = extractvalue { ptr, i32 } %7825, 1
  store i32 %7827, ptr %24, align 4
  call void @__cxa_free_exception(ptr %7822) #9
  br label %7858

7828:                                             ; preds = %7823
  %7829 = landingpad { ptr, i32 }
          cleanup
  %7830 = extractvalue { ptr, i32 } %7829, 0
  store ptr %7830, ptr %23, align 8
  %7831 = extractvalue { ptr, i32 } %7829, 1
  store i32 %7831, ptr %24, align 4
  br label %7858

7832:                                             ; preds = %7818
  call void @llvm.lifetime.start.p0(i64 4, ptr %553) #9
  %7833 = load ptr, ptr %5, align 8, !tbaa !5
  %7834 = getelementptr inbounds i32, ptr %7833, i64 5
  %7835 = load i32, ptr %7834, align 4, !tbaa !16
  store i32 %7835, ptr %553, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %554) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %555) #9
  %7836 = load ptr, ptr %5, align 8, !tbaa !5
  %7837 = getelementptr inbounds i32, ptr %7836, i64 2
  %7838 = load i32, ptr %7837, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %555, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %7838)
          to label %7839 unwind label %7844

7839:                                             ; preds = %7832
  call void @llvm.lifetime.start.p0(i64 32, ptr %556) #9
  %7840 = load i32, ptr %553, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %556, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %7840, i1 noundef zeroext true)
          to label %7841 unwind label %7848

7841:                                             ; preds = %7839
  invoke void @_ZN11spirv_cross4joinIJRA12_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA27_S1_S9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %554, ptr noundef nonnull align 1 dereferenceable(12) @.str.1433, ptr noundef nonnull align 8 dereferenceable(32) %555, ptr noundef nonnull align 1 dereferenceable(27) @.str.1434, ptr noundef nonnull align 8 dereferenceable(32) %556, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %7842 unwind label %7852

7842:                                             ; preds = %7841
  %7843 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %532, ptr noundef nonnull align 8 dereferenceable(32) %554) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %554) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %556) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %556) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %555) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %555) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %554) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %553) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %552) #9
  br label %7875

7844:                                             ; preds = %7832
  %7845 = landingpad { ptr, i32 }
          cleanup
  %7846 = extractvalue { ptr, i32 } %7845, 0
  store ptr %7846, ptr %23, align 8
  %7847 = extractvalue { ptr, i32 } %7845, 1
  store i32 %7847, ptr %24, align 4
  br label %7857

7848:                                             ; preds = %7839
  %7849 = landingpad { ptr, i32 }
          cleanup
  %7850 = extractvalue { ptr, i32 } %7849, 0
  store ptr %7850, ptr %23, align 8
  %7851 = extractvalue { ptr, i32 } %7849, 1
  store i32 %7851, ptr %24, align 4
  br label %7856

7852:                                             ; preds = %7841
  %7853 = landingpad { ptr, i32 }
          cleanup
  %7854 = extractvalue { ptr, i32 } %7853, 0
  store ptr %7854, ptr %23, align 8
  %7855 = extractvalue { ptr, i32 } %7853, 1
  store i32 %7855, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %556) #9
  br label %7856

7856:                                             ; preds = %7852, %7848
  call void @llvm.lifetime.end.p0(i64 32, ptr %556) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %555) #9
  br label %7857

7857:                                             ; preds = %7856, %7844
  call void @llvm.lifetime.end.p0(i64 32, ptr %555) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %554) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %553) #9
  br label %7858

7858:                                             ; preds = %7857, %7828, %7824
  call void @llvm.lifetime.end.p0(i64 4, ptr %552) #9
  br label %8255

7859:                                             ; preds = %7806
  call void @llvm.lifetime.start.p0(i64 32, ptr %557) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %558) #9
  %7860 = load ptr, ptr %5, align 8, !tbaa !5
  %7861 = getelementptr inbounds i32, ptr %7860, i64 2
  %7862 = load i32, ptr %7861, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %558, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %7862)
          to label %7863 unwind label %7866

7863:                                             ; preds = %7859
  invoke void @_ZN11spirv_cross4joinIJRA12_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA29_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %557, ptr noundef nonnull align 1 dereferenceable(12) @.str.1433, ptr noundef nonnull align 8 dereferenceable(32) %558, ptr noundef nonnull align 1 dereferenceable(29) @.str.1435)
          to label %7864 unwind label %7870

7864:                                             ; preds = %7863
  %7865 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %532, ptr noundef nonnull align 8 dereferenceable(32) %557) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %557) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %558) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %558) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %557) #9
  br label %7875

7866:                                             ; preds = %7859
  %7867 = landingpad { ptr, i32 }
          cleanup
  %7868 = extractvalue { ptr, i32 } %7867, 0
  store ptr %7868, ptr %23, align 8
  %7869 = extractvalue { ptr, i32 } %7867, 1
  store i32 %7869, ptr %24, align 4
  br label %7874

7870:                                             ; preds = %7863
  %7871 = landingpad { ptr, i32 }
          cleanup
  %7872 = extractvalue { ptr, i32 } %7871, 0
  store ptr %7872, ptr %23, align 8
  %7873 = extractvalue { ptr, i32 } %7871, 1
  store i32 %7873, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %558) #9
  br label %7874

7874:                                             ; preds = %7870, %7866
  call void @llvm.lifetime.end.p0(i64 32, ptr %558) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %557) #9
  br label %8255

7875:                                             ; preds = %7864, %7842
  br label %7876

7876:                                             ; preds = %7875, %7805
  br label %7877

7877:                                             ; preds = %7876, %7725
  call void @llvm.lifetime.start.p0(i64 32, ptr %559) #9
  %7878 = load i32, ptr %529, align 4, !tbaa !16
  %7879 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %7878)
          to label %7880 unwind label %7883

7880:                                             ; preds = %7877
  invoke void @_ZN11spirv_cross12CompilerGLSL13remap_swizzleERKNS_8SPIRTypeEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %559, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(336) %7879, i32 noundef 4, ptr noundef nonnull align 8 dereferenceable(32) %532)
          to label %7881 unwind label %7883

7881:                                             ; preds = %7880
  %7882 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %532, ptr noundef nonnull align 8 dereferenceable(32) %559) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %559) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %559) #9
  store i8 1, ptr %531, align 1, !tbaa !142
  br label %8174

7883:                                             ; preds = %7880, %7877
  %7884 = landingpad { ptr, i32 }
          cleanup
  %7885 = extractvalue { ptr, i32 } %7884, 0
  store ptr %7885, ptr %23, align 8
  %7886 = extractvalue { ptr, i32 } %7884, 1
  store i32 %7886, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %559) #9
  br label %8255

7887:                                             ; preds = %7704
  call void @llvm.lifetime.start.p0(i64 1, ptr %560) #9
  %7888 = load i32, ptr %6, align 4, !tbaa !13
  %7889 = icmp eq i32 %7888, 320
  %7890 = zext i1 %7889 to i8
  store i8 %7890, ptr %560, align 1, !tbaa !142
  call void @llvm.lifetime.start.p0(i64 4, ptr %561) #9
  store i32 0, ptr %561, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %562) #9
  store i32 0, ptr %562, align 4, !tbaa !16
  %7891 = load i8, ptr %560, align 1, !tbaa !142, !range !127, !noundef !128
  %7892 = trunc i8 %7891 to i1
  br i1 %7892, label %7893, label %7905

7893:                                             ; preds = %7887
  %7894 = load ptr, ptr %5, align 8, !tbaa !5
  %7895 = getelementptr inbounds i32, ptr %7894, i64 0
  %7896 = load i32, ptr %7895, align 4, !tbaa !16
  %7897 = load ptr, ptr %5, align 8, !tbaa !5
  %7898 = getelementptr inbounds i32, ptr %7897, i64 1
  %7899 = load i32, ptr %7898, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL32emit_sparse_feedback_temporariesEjjRjS1_(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %7896, i32 noundef %7899, ptr noundef nonnull align 4 dereferenceable(4) %561, ptr noundef nonnull align 4 dereferenceable(4) %562)
          to label %7900 unwind label %7901

7900:                                             ; preds = %7893
  br label %7905

7901:                                             ; preds = %7893
  %7902 = landingpad { ptr, i32 }
          cleanup
  %7903 = extractvalue { ptr, i32 } %7902, 0
  store ptr %7903, ptr %23, align 8
  %7904 = extractvalue { ptr, i32 } %7902, 1
  store i32 %7904, ptr %24, align 4
  br label %8173

7905:                                             ; preds = %7900, %7887
  call void @llvm.lifetime.start.p0(i64 32, ptr %563) #9
  %7906 = load ptr, ptr %5, align 8, !tbaa !5
  %7907 = getelementptr inbounds i32, ptr %7906, i64 3
  %7908 = load i32, ptr %7907, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %563, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %7908, i1 noundef zeroext true)
          to label %7909 unwind label %7939

7909:                                             ; preds = %7905
  call void @llvm.lifetime.start.p0(i64 336, ptr %564) #9
  %7910 = load ptr, ptr %5, align 8, !tbaa !5
  %7911 = getelementptr inbounds i32, ptr %7910, i64 3
  %7912 = load i32, ptr %7911, align 4, !tbaa !16
  %7913 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %7912)
          to label %7914 unwind label %7943

7914:                                             ; preds = %7909
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %564, ptr noundef nonnull align 8 dereferenceable(336) %7913)
          to label %7915 unwind label %7943

7915:                                             ; preds = %7914
  %7916 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %564, i32 0, i32 2
  store i32 7, ptr %7916, align 8, !tbaa !148
  call void @llvm.lifetime.start.p0(i64 32, ptr %565) #9
  %7917 = load ptr, ptr %5, align 8, !tbaa !5
  %7918 = getelementptr inbounds i32, ptr %7917, i64 3
  %7919 = load i32, ptr %7918, align 4, !tbaa !16
  %7920 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %7919)
          to label %7921 unwind label %7947

7921:                                             ; preds = %7915
  %7922 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %7920, i32 0, i32 2
  %7923 = load i32, ptr %7922, align 8, !tbaa !148
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionERKNS_8SPIRTypeENS1_8BaseTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %565, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(336) %564, i32 noundef %7923, ptr noundef nonnull align 8 dereferenceable(32) %563)
          to label %7924 unwind label %7947

7924:                                             ; preds = %7921
  %7925 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %563, ptr noundef nonnull align 8 dereferenceable(32) %565) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %565) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %565) #9
  %7926 = load ptr, ptr %533, align 8, !tbaa !5
  %7927 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %7926, i32 0, i32 14
  %7928 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %7927, i32 0, i32 1
  %7929 = load i32, ptr %7928, align 4, !tbaa !215
  %7930 = icmp eq i32 %7929, 0
  br i1 %7930, label %7931, label %7955

7931:                                             ; preds = %7924
  %7932 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %7933 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %7932, i32 0, i32 1
  %7934 = load i8, ptr %7933, align 4, !tbaa !210, !range !127, !noundef !128
  %7935 = trunc i8 %7934 to i1
  br i1 %7935, label %7936, label %7955

7936:                                             ; preds = %7931
  call void @llvm.lifetime.start.p0(i64 32, ptr %566) #9
  invoke void @_ZN11spirv_cross4joinIJRA7_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA5_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %566, ptr noundef nonnull align 1 dereferenceable(7) @.str.1095, ptr noundef nonnull align 8 dereferenceable(32) %563, ptr noundef nonnull align 1 dereferenceable(5) @.str.1096)
          to label %7937 unwind label %7951

7937:                                             ; preds = %7936
  %7938 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %563, ptr noundef nonnull align 8 dereferenceable(32) %566) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %566) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %566) #9
  br label %7955

7939:                                             ; preds = %7905
  %7940 = landingpad { ptr, i32 }
          cleanup
  %7941 = extractvalue { ptr, i32 } %7940, 0
  store ptr %7941, ptr %23, align 8
  %7942 = extractvalue { ptr, i32 } %7940, 1
  store i32 %7942, ptr %24, align 4
  br label %8172

7943:                                             ; preds = %7914, %7909
  %7944 = landingpad { ptr, i32 }
          cleanup
  %7945 = extractvalue { ptr, i32 } %7944, 0
  store ptr %7945, ptr %23, align 8
  %7946 = extractvalue { ptr, i32 } %7944, 1
  store i32 %7946, ptr %24, align 4
  br label %8171

7947:                                             ; preds = %7921, %7915
  %7948 = landingpad { ptr, i32 }
          cleanup
  %7949 = extractvalue { ptr, i32 } %7948, 0
  store ptr %7949, ptr %23, align 8
  %7950 = extractvalue { ptr, i32 } %7948, 1
  store i32 %7950, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %565) #9
  br label %8170

7951:                                             ; preds = %7936
  %7952 = landingpad { ptr, i32 }
          cleanup
  %7953 = extractvalue { ptr, i32 } %7952, 0
  store ptr %7953, ptr %23, align 8
  %7954 = extractvalue { ptr, i32 } %7952, 1
  store i32 %7954, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %566) #9
  br label %8170

7955:                                             ; preds = %7937, %7931, %7924
  %7956 = load i8, ptr %560, align 1, !tbaa !142, !range !127, !noundef !128
  %7957 = trunc i8 %7956 to i1
  br i1 %7957, label %7958, label %8086

7958:                                             ; preds = %7955
  %7959 = load ptr, ptr %533, align 8, !tbaa !5
  %7960 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %7959, i32 0, i32 14
  %7961 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %7960, i32 0, i32 4
  %7962 = load i8, ptr %7961, align 2, !tbaa !216, !range !127, !noundef !128
  %7963 = trunc i8 %7962 to i1
  br i1 %7963, label %7964, label %8024

7964:                                             ; preds = %7958
  call void @llvm.lifetime.start.p0(i64 4, ptr %567) #9
  %7965 = load ptr, ptr %5, align 8, !tbaa !5
  %7966 = getelementptr inbounds i32, ptr %7965, i64 4
  %7967 = load i32, ptr %7966, align 4, !tbaa !16
  store i32 %7967, ptr %567, align 4, !tbaa !16
  %7968 = load i32, ptr %567, align 4, !tbaa !16
  %7969 = icmp ne i32 %7968, 64
  br i1 %7969, label %7973, label %7970

7970:                                             ; preds = %7964
  %7971 = load i32, ptr %7, align 4, !tbaa !16
  %7972 = icmp ne i32 %7971, 6
  br i1 %7972, label %7973, label %7984

7973:                                             ; preds = %7970, %7964
  %7974 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %7974, ptr noundef @.str.1431)
          to label %7975 unwind label %7976

7975:                                             ; preds = %7973
  invoke void @__cxa_throw(ptr %7974, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
          to label %11533 unwind label %7980

7976:                                             ; preds = %7973
  %7977 = landingpad { ptr, i32 }
          cleanup
  %7978 = extractvalue { ptr, i32 } %7977, 0
  store ptr %7978, ptr %23, align 8
  %7979 = extractvalue { ptr, i32 } %7977, 1
  store i32 %7979, ptr %24, align 4
  call void @__cxa_free_exception(ptr %7974) #9
  br label %8023

7980:                                             ; preds = %7975
  %7981 = landingpad { ptr, i32 }
          cleanup
  %7982 = extractvalue { ptr, i32 } %7981, 0
  store ptr %7982, ptr %23, align 8
  %7983 = extractvalue { ptr, i32 } %7981, 1
  store i32 %7983, ptr %24, align 4
  br label %8023

7984:                                             ; preds = %7970
  call void @llvm.lifetime.start.p0(i64 4, ptr %568) #9
  %7985 = load ptr, ptr %5, align 8, !tbaa !5
  %7986 = getelementptr inbounds i32, ptr %7985, i64 5
  %7987 = load i32, ptr %7986, align 4, !tbaa !16
  store i32 %7987, ptr %568, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %569) #9
  %7988 = load i32, ptr %561, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %569, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %7988, i1 noundef zeroext true)
          to label %7989 unwind label %7999

7989:                                             ; preds = %7984
  call void @llvm.lifetime.start.p0(i64 32, ptr %570) #9
  %7990 = load ptr, ptr %5, align 8, !tbaa !5
  %7991 = getelementptr inbounds i32, ptr %7990, i64 2
  %7992 = load i32, ptr %7991, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %570, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %7992)
          to label %7993 unwind label %8003

7993:                                             ; preds = %7989
  call void @llvm.lifetime.start.p0(i64 32, ptr %571) #9
  %7994 = load i32, ptr %568, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %571, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %7994, i1 noundef zeroext true)
          to label %7995 unwind label %8007

7995:                                             ; preds = %7993
  call void @llvm.lifetime.start.p0(i64 32, ptr %572) #9
  %7996 = load i32, ptr %562, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %572, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %7996, i1 noundef zeroext true)
          to label %7997 unwind label %8011

7997:                                             ; preds = %7995
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA23_KcS7_RA3_S8_RS7_SC_S7_SC_S7_SC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %569, ptr noundef nonnull align 1 dereferenceable(23) @.str.1436, ptr noundef nonnull align 8 dereferenceable(32) %570, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %563, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %571, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %572, ptr noundef nonnull align 1 dereferenceable(3) @.str.751)
          to label %7998 unwind label %8015

7998:                                             ; preds = %7997
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %572) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %572) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %571) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %571) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %570) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %570) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %569) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %569) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %568) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %567) #9
  br label %8053

7999:                                             ; preds = %7984
  %8000 = landingpad { ptr, i32 }
          cleanup
  %8001 = extractvalue { ptr, i32 } %8000, 0
  store ptr %8001, ptr %23, align 8
  %8002 = extractvalue { ptr, i32 } %8000, 1
  store i32 %8002, ptr %24, align 4
  br label %8022

8003:                                             ; preds = %7989
  %8004 = landingpad { ptr, i32 }
          cleanup
  %8005 = extractvalue { ptr, i32 } %8004, 0
  store ptr %8005, ptr %23, align 8
  %8006 = extractvalue { ptr, i32 } %8004, 1
  store i32 %8006, ptr %24, align 4
  br label %8021

8007:                                             ; preds = %7993
  %8008 = landingpad { ptr, i32 }
          cleanup
  %8009 = extractvalue { ptr, i32 } %8008, 0
  store ptr %8009, ptr %23, align 8
  %8010 = extractvalue { ptr, i32 } %8008, 1
  store i32 %8010, ptr %24, align 4
  br label %8020

8011:                                             ; preds = %7995
  %8012 = landingpad { ptr, i32 }
          cleanup
  %8013 = extractvalue { ptr, i32 } %8012, 0
  store ptr %8013, ptr %23, align 8
  %8014 = extractvalue { ptr, i32 } %8012, 1
  store i32 %8014, ptr %24, align 4
  br label %8019

8015:                                             ; preds = %7997
  %8016 = landingpad { ptr, i32 }
          cleanup
  %8017 = extractvalue { ptr, i32 } %8016, 0
  store ptr %8017, ptr %23, align 8
  %8018 = extractvalue { ptr, i32 } %8016, 1
  store i32 %8018, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %572) #9
  br label %8019

8019:                                             ; preds = %8015, %8011
  call void @llvm.lifetime.end.p0(i64 32, ptr %572) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %571) #9
  br label %8020

8020:                                             ; preds = %8019, %8007
  call void @llvm.lifetime.end.p0(i64 32, ptr %571) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %570) #9
  br label %8021

8021:                                             ; preds = %8020, %8003
  call void @llvm.lifetime.end.p0(i64 32, ptr %570) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %569) #9
  br label %8022

8022:                                             ; preds = %8021, %7999
  call void @llvm.lifetime.end.p0(i64 32, ptr %569) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %568) #9
  br label %8023

8023:                                             ; preds = %8022, %7980, %7976
  call void @llvm.lifetime.end.p0(i64 4, ptr %567) #9
  br label %8170

8024:                                             ; preds = %7958
  call void @llvm.lifetime.start.p0(i64 32, ptr %573) #9
  %8025 = load i32, ptr %561, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %573, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %8025, i1 noundef zeroext true)
          to label %8026 unwind label %8034

8026:                                             ; preds = %8024
  call void @llvm.lifetime.start.p0(i64 32, ptr %574) #9
  %8027 = load ptr, ptr %5, align 8, !tbaa !5
  %8028 = getelementptr inbounds i32, ptr %8027, i64 2
  %8029 = load i32, ptr %8028, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %574, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %8029)
          to label %8030 unwind label %8038

8030:                                             ; preds = %8026
  call void @llvm.lifetime.start.p0(i64 32, ptr %575) #9
  %8031 = load i32, ptr %562, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %575, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %8031, i1 noundef zeroext true)
          to label %8032 unwind label %8042

8032:                                             ; preds = %8030
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA23_KcS7_RA3_S8_RS7_SC_S7_SC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %573, ptr noundef nonnull align 1 dereferenceable(23) @.str.1436, ptr noundef nonnull align 8 dereferenceable(32) %574, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %563, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %575, ptr noundef nonnull align 1 dereferenceable(3) @.str.751)
          to label %8033 unwind label %8046

8033:                                             ; preds = %8032
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %575) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %575) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %574) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %574) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %573) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %573) #9
  br label %8053

8034:                                             ; preds = %8024
  %8035 = landingpad { ptr, i32 }
          cleanup
  %8036 = extractvalue { ptr, i32 } %8035, 0
  store ptr %8036, ptr %23, align 8
  %8037 = extractvalue { ptr, i32 } %8035, 1
  store i32 %8037, ptr %24, align 4
  br label %8052

8038:                                             ; preds = %8026
  %8039 = landingpad { ptr, i32 }
          cleanup
  %8040 = extractvalue { ptr, i32 } %8039, 0
  store ptr %8040, ptr %23, align 8
  %8041 = extractvalue { ptr, i32 } %8039, 1
  store i32 %8041, ptr %24, align 4
  br label %8051

8042:                                             ; preds = %8030
  %8043 = landingpad { ptr, i32 }
          cleanup
  %8044 = extractvalue { ptr, i32 } %8043, 0
  store ptr %8044, ptr %23, align 8
  %8045 = extractvalue { ptr, i32 } %8043, 1
  store i32 %8045, ptr %24, align 4
  br label %8050

8046:                                             ; preds = %8032
  %8047 = landingpad { ptr, i32 }
          cleanup
  %8048 = extractvalue { ptr, i32 } %8047, 0
  store ptr %8048, ptr %23, align 8
  %8049 = extractvalue { ptr, i32 } %8047, 1
  store i32 %8049, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %575) #9
  br label %8050

8050:                                             ; preds = %8046, %8042
  call void @llvm.lifetime.end.p0(i64 32, ptr %575) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %574) #9
  br label %8051

8051:                                             ; preds = %8050, %8038
  call void @llvm.lifetime.end.p0(i64 32, ptr %574) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %573) #9
  br label %8052

8052:                                             ; preds = %8051, %8034
  call void @llvm.lifetime.end.p0(i64 32, ptr %573) #9
  br label %8170

8053:                                             ; preds = %8033, %7998
  call void @llvm.lifetime.start.p0(i64 32, ptr %576) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %577) #9
  %8054 = load i32, ptr %529, align 4, !tbaa !16
  %8055 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %8054)
          to label %8056 unwind label %8067

8056:                                             ; preds = %8053
  %8057 = load ptr, ptr %885, align 8, !tbaa !145
  %8058 = getelementptr inbounds ptr, ptr %8057, i64 19
  %8059 = load ptr, ptr %8058, align 8
  invoke void %8059(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %577, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(336) %8055, i32 noundef 0)
          to label %8060 unwind label %8067

8060:                                             ; preds = %8056
  call void @llvm.lifetime.start.p0(i64 32, ptr %578) #9
  %8061 = load i32, ptr %561, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %578, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %8061, i1 noundef zeroext true)
          to label %8062 unwind label %8071

8062:                                             ; preds = %8060
  call void @llvm.lifetime.start.p0(i64 32, ptr %579) #9
  %8063 = load i32, ptr %562, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %579, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %8063, i1 noundef zeroext true)
          to label %8064 unwind label %8075

8064:                                             ; preds = %8062
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS6_RA3_S7_S6_S9_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %576, ptr noundef nonnull align 8 dereferenceable(32) %577, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %578, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %579, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %8065 unwind label %8079

8065:                                             ; preds = %8064
  %8066 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %532, ptr noundef nonnull align 8 dereferenceable(32) %576) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %576) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %579) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %579) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %578) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %578) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %577) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %577) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %576) #9
  br label %8156

8067:                                             ; preds = %8056, %8053
  %8068 = landingpad { ptr, i32 }
          cleanup
  %8069 = extractvalue { ptr, i32 } %8068, 0
  store ptr %8069, ptr %23, align 8
  %8070 = extractvalue { ptr, i32 } %8068, 1
  store i32 %8070, ptr %24, align 4
  br label %8085

8071:                                             ; preds = %8060
  %8072 = landingpad { ptr, i32 }
          cleanup
  %8073 = extractvalue { ptr, i32 } %8072, 0
  store ptr %8073, ptr %23, align 8
  %8074 = extractvalue { ptr, i32 } %8072, 1
  store i32 %8074, ptr %24, align 4
  br label %8084

8075:                                             ; preds = %8062
  %8076 = landingpad { ptr, i32 }
          cleanup
  %8077 = extractvalue { ptr, i32 } %8076, 0
  store ptr %8077, ptr %23, align 8
  %8078 = extractvalue { ptr, i32 } %8076, 1
  store i32 %8078, ptr %24, align 4
  br label %8083

8079:                                             ; preds = %8064
  %8080 = landingpad { ptr, i32 }
          cleanup
  %8081 = extractvalue { ptr, i32 } %8080, 0
  store ptr %8081, ptr %23, align 8
  %8082 = extractvalue { ptr, i32 } %8080, 1
  store i32 %8082, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %579) #9
  br label %8083

8083:                                             ; preds = %8079, %8075
  call void @llvm.lifetime.end.p0(i64 32, ptr %579) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %578) #9
  br label %8084

8084:                                             ; preds = %8083, %8071
  call void @llvm.lifetime.end.p0(i64 32, ptr %578) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %577) #9
  br label %8085

8085:                                             ; preds = %8084, %8067
  call void @llvm.lifetime.end.p0(i64 32, ptr %577) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %576) #9
  br label %8170

8086:                                             ; preds = %7955
  %8087 = load ptr, ptr %533, align 8, !tbaa !5
  %8088 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %8087, i32 0, i32 14
  %8089 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %8088, i32 0, i32 4
  %8090 = load i8, ptr %8089, align 2, !tbaa !216, !range !127, !noundef !128
  %8091 = trunc i8 %8090 to i1
  br i1 %8091, label %8092, label %8139

8092:                                             ; preds = %8086
  call void @llvm.lifetime.start.p0(i64 4, ptr %580) #9
  %8093 = load ptr, ptr %5, align 8, !tbaa !5
  %8094 = getelementptr inbounds i32, ptr %8093, i64 4
  %8095 = load i32, ptr %8094, align 4, !tbaa !16
  store i32 %8095, ptr %580, align 4, !tbaa !16
  %8096 = load i32, ptr %580, align 4, !tbaa !16
  %8097 = icmp ne i32 %8096, 64
  br i1 %8097, label %8101, label %8098

8098:                                             ; preds = %8092
  %8099 = load i32, ptr %7, align 4, !tbaa !16
  %8100 = icmp ne i32 %8099, 6
  br i1 %8100, label %8101, label %8112

8101:                                             ; preds = %8098, %8092
  %8102 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %8102, ptr noundef @.str.1431)
          to label %8103 unwind label %8104

8103:                                             ; preds = %8101
  invoke void @__cxa_throw(ptr %8102, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
          to label %11533 unwind label %8108

8104:                                             ; preds = %8101
  %8105 = landingpad { ptr, i32 }
          cleanup
  %8106 = extractvalue { ptr, i32 } %8105, 0
  store ptr %8106, ptr %23, align 8
  %8107 = extractvalue { ptr, i32 } %8105, 1
  store i32 %8107, ptr %24, align 4
  call void @__cxa_free_exception(ptr %8102) #9
  br label %8138

8108:                                             ; preds = %8103
  %8109 = landingpad { ptr, i32 }
          cleanup
  %8110 = extractvalue { ptr, i32 } %8109, 0
  store ptr %8110, ptr %23, align 8
  %8111 = extractvalue { ptr, i32 } %8109, 1
  store i32 %8111, ptr %24, align 4
  br label %8138

8112:                                             ; preds = %8098
  call void @llvm.lifetime.start.p0(i64 4, ptr %581) #9
  %8113 = load ptr, ptr %5, align 8, !tbaa !5
  %8114 = getelementptr inbounds i32, ptr %8113, i64 5
  %8115 = load i32, ptr %8114, align 4, !tbaa !16
  store i32 %8115, ptr %581, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %582) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %583) #9
  %8116 = load ptr, ptr %5, align 8, !tbaa !5
  %8117 = getelementptr inbounds i32, ptr %8116, i64 2
  %8118 = load i32, ptr %8117, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %583, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %8118)
          to label %8119 unwind label %8124

8119:                                             ; preds = %8112
  call void @llvm.lifetime.start.p0(i64 32, ptr %584) #9
  %8120 = load i32, ptr %581, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %584, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %8120, i1 noundef zeroext true)
          to label %8121 unwind label %8128

8121:                                             ; preds = %8119
  invoke void @_ZN11spirv_cross4joinIJRA11_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_SB_S9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %582, ptr noundef nonnull align 1 dereferenceable(11) @.str.1437, ptr noundef nonnull align 8 dereferenceable(32) %583, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %563, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %584, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %8122 unwind label %8132

8122:                                             ; preds = %8121
  %8123 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %532, ptr noundef nonnull align 8 dereferenceable(32) %582) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %582) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %584) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %584) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %583) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %583) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %582) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %581) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %580) #9
  br label %8155

8124:                                             ; preds = %8112
  %8125 = landingpad { ptr, i32 }
          cleanup
  %8126 = extractvalue { ptr, i32 } %8125, 0
  store ptr %8126, ptr %23, align 8
  %8127 = extractvalue { ptr, i32 } %8125, 1
  store i32 %8127, ptr %24, align 4
  br label %8137

8128:                                             ; preds = %8119
  %8129 = landingpad { ptr, i32 }
          cleanup
  %8130 = extractvalue { ptr, i32 } %8129, 0
  store ptr %8130, ptr %23, align 8
  %8131 = extractvalue { ptr, i32 } %8129, 1
  store i32 %8131, ptr %24, align 4
  br label %8136

8132:                                             ; preds = %8121
  %8133 = landingpad { ptr, i32 }
          cleanup
  %8134 = extractvalue { ptr, i32 } %8133, 0
  store ptr %8134, ptr %23, align 8
  %8135 = extractvalue { ptr, i32 } %8133, 1
  store i32 %8135, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %584) #9
  br label %8136

8136:                                             ; preds = %8132, %8128
  call void @llvm.lifetime.end.p0(i64 32, ptr %584) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %583) #9
  br label %8137

8137:                                             ; preds = %8136, %8124
  call void @llvm.lifetime.end.p0(i64 32, ptr %583) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %582) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %581) #9
  br label %8138

8138:                                             ; preds = %8137, %8108, %8104
  call void @llvm.lifetime.end.p0(i64 4, ptr %580) #9
  br label %8170

8139:                                             ; preds = %8086
  call void @llvm.lifetime.start.p0(i64 32, ptr %585) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %586) #9
  %8140 = load ptr, ptr %5, align 8, !tbaa !5
  %8141 = getelementptr inbounds i32, ptr %8140, i64 2
  %8142 = load i32, ptr %8141, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %586, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %8142)
          to label %8143 unwind label %8146

8143:                                             ; preds = %8139
  invoke void @_ZN11spirv_cross4joinIJRA11_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %585, ptr noundef nonnull align 1 dereferenceable(11) @.str.1437, ptr noundef nonnull align 8 dereferenceable(32) %586, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %563, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %8144 unwind label %8150

8144:                                             ; preds = %8143
  %8145 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %532, ptr noundef nonnull align 8 dereferenceable(32) %585) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %585) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %586) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %586) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %585) #9
  br label %8155

8146:                                             ; preds = %8139
  %8147 = landingpad { ptr, i32 }
          cleanup
  %8148 = extractvalue { ptr, i32 } %8147, 0
  store ptr %8148, ptr %23, align 8
  %8149 = extractvalue { ptr, i32 } %8147, 1
  store i32 %8149, ptr %24, align 4
  br label %8154

8150:                                             ; preds = %8143
  %8151 = landingpad { ptr, i32 }
          cleanup
  %8152 = extractvalue { ptr, i32 } %8151, 0
  store ptr %8152, ptr %23, align 8
  %8153 = extractvalue { ptr, i32 } %8151, 1
  store i32 %8153, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %586) #9
  br label %8154

8154:                                             ; preds = %8150, %8146
  call void @llvm.lifetime.end.p0(i64 32, ptr %586) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %585) #9
  br label %8170

8155:                                             ; preds = %8144, %8122
  br label %8156

8156:                                             ; preds = %8155, %8065
  %8157 = load i8, ptr %560, align 1, !tbaa !142, !range !127, !noundef !128
  %8158 = trunc i8 %8157 to i1
  br i1 %8158, label %8169, label %8159

8159:                                             ; preds = %8156
  call void @llvm.lifetime.start.p0(i64 32, ptr %587) #9
  %8160 = load i32, ptr %529, align 4, !tbaa !16
  %8161 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %8160)
          to label %8162 unwind label %8165

8162:                                             ; preds = %8159
  invoke void @_ZN11spirv_cross12CompilerGLSL13remap_swizzleERKNS_8SPIRTypeEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %587, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(336) %8161, i32 noundef 4, ptr noundef nonnull align 8 dereferenceable(32) %532)
          to label %8163 unwind label %8165

8163:                                             ; preds = %8162
  %8164 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %532, ptr noundef nonnull align 8 dereferenceable(32) %587) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %587) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %587) #9
  br label %8169

8165:                                             ; preds = %8162, %8159
  %8166 = landingpad { ptr, i32 }
          cleanup
  %8167 = extractvalue { ptr, i32 } %8166, 0
  store ptr %8167, ptr %23, align 8
  %8168 = extractvalue { ptr, i32 } %8166, 1
  store i32 %8168, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %587) #9
  br label %8170

8169:                                             ; preds = %8163, %8156
  store i8 0, ptr %531, align 1, !tbaa !142
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %564) #9
  call void @llvm.lifetime.end.p0(i64 336, ptr %564) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %563) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %563) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %562) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %561) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %560) #9
  br label %8174

8170:                                             ; preds = %8165, %8154, %8138, %8085, %8052, %8023, %7951, %7947
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %564) #9
  br label %8171

8171:                                             ; preds = %8170, %7943
  call void @llvm.lifetime.end.p0(i64 336, ptr %564) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %563) #9
  br label %8172

8172:                                             ; preds = %8171, %7939
  call void @llvm.lifetime.end.p0(i64 32, ptr %563) #9
  br label %8173

8173:                                             ; preds = %8172, %7901
  call void @llvm.lifetime.end.p0(i64 4, ptr %562) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %561) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %560) #9
  br label %8255

8174:                                             ; preds = %8169, %7881
  br label %8175

8175:                                             ; preds = %8174, %7702
  %8176 = load ptr, ptr %525, align 8, !tbaa !5
  %8177 = icmp ne ptr %8176, null
  br i1 %8177, label %8178, label %8232

8178:                                             ; preds = %8175
  call void @llvm.lifetime.start.p0(i64 1, ptr %588) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %589) #9
  %8179 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %885, i32 0, i32 15
  %8180 = invoke ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE4findERKj(ptr noundef nonnull align 8 dereferenceable(56) %8179, ptr noundef nonnull align 4 dereferenceable(4) %530)
          to label %8181 unwind label %8211

8181:                                             ; preds = %8178
  %8182 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.364", ptr %589, i32 0, i32 0
  %8183 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.365", ptr %8182, i32 0, i32 0
  store ptr %8180, ptr %8183, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %590) #9
  %8184 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %885, i32 0, i32 15
  %8185 = invoke ptr @_ZSt3endISt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(56) %8184)
          to label %8186 unwind label %8215

8186:                                             ; preds = %8181
  %8187 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.364", ptr %590, i32 0, i32 0
  %8188 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.365", ptr %8187, i32 0, i32 0
  store ptr %8185, ptr %8188, align 8
  %8189 = call noundef zeroext i1 @_ZNSt8__detaileqERKNS_19_Node_iterator_baseIjLb0EEES3_(ptr noundef nonnull align 8 dereferenceable(8) %589, ptr noundef nonnull align 8 dereferenceable(8) %590) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %590) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %589) #9
  %8190 = zext i1 %8189 to i8
  store i8 %8190, ptr %588, align 1, !tbaa !142
  call void @llvm.lifetime.start.p0(i64 8, ptr %591) #9
  %8191 = load i32, ptr %529, align 4, !tbaa !16
  %8192 = load i32, ptr %530, align 4, !tbaa !16
  %8193 = load i8, ptr %588, align 1, !tbaa !142, !range !127, !noundef !128
  %8194 = trunc i8 %8193 to i1
  %8195 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %8191, i32 noundef %8192, ptr noundef nonnull align 8 dereferenceable(32) %532, i1 noundef zeroext %8194, i1 noundef zeroext false)
          to label %8196 unwind label %8220

8196:                                             ; preds = %8186
  store ptr %8195, ptr %591, align 8, !tbaa !5
  %8197 = load i8, ptr %531, align 1, !tbaa !142, !range !127, !noundef !128
  %8198 = trunc i8 %8197 to i1
  br i1 %8198, label %8229, label %8199

8199:                                             ; preds = %8196
  %8200 = load ptr, ptr %525, align 8, !tbaa !5
  %8201 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %8200, i32 0, i32 1
  %8202 = load ptr, ptr %591, align 8, !tbaa !5
  %8203 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %8202, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %8203, ptr align 8 %8201, i64 4, i1 false), !tbaa.struct !151
  %8204 = load i8, ptr %588, align 1, !tbaa !142, !range !127, !noundef !128
  %8205 = trunc i8 %8204 to i1
  br i1 %8205, label %8206, label %8228

8206:                                             ; preds = %8199
  %8207 = load ptr, ptr %525, align 8, !tbaa !5
  %8208 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %8207, i32 0, i32 10
  call void @llvm.lifetime.start.p0(i64 4, ptr %592) #9
  %8209 = load i32, ptr %530, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %592, i32 noundef %8209)
          to label %8210 unwind label %8224

8210:                                             ; preds = %8206
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %8208, ptr noundef nonnull align 4 dereferenceable(4) %592) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %592) #9
  br label %8228

8211:                                             ; preds = %8178
  %8212 = landingpad { ptr, i32 }
          cleanup
  %8213 = extractvalue { ptr, i32 } %8212, 0
  store ptr %8213, ptr %23, align 8
  %8214 = extractvalue { ptr, i32 } %8212, 1
  store i32 %8214, ptr %24, align 4
  br label %8219

8215:                                             ; preds = %8181
  %8216 = landingpad { ptr, i32 }
          cleanup
  %8217 = extractvalue { ptr, i32 } %8216, 0
  store ptr %8217, ptr %23, align 8
  %8218 = extractvalue { ptr, i32 } %8216, 1
  store i32 %8218, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %590) #9
  br label %8219

8219:                                             ; preds = %8215, %8211
  call void @llvm.lifetime.end.p0(i64 8, ptr %589) #9
  br label %8231

8220:                                             ; preds = %8186
  %8221 = landingpad { ptr, i32 }
          cleanup
  %8222 = extractvalue { ptr, i32 } %8221, 0
  store ptr %8222, ptr %23, align 8
  %8223 = extractvalue { ptr, i32 } %8221, 1
  store i32 %8223, ptr %24, align 4
  br label %8230

8224:                                             ; preds = %8206
  %8225 = landingpad { ptr, i32 }
          cleanup
  %8226 = extractvalue { ptr, i32 } %8225, 0
  store ptr %8226, ptr %23, align 8
  %8227 = extractvalue { ptr, i32 } %8225, 1
  store i32 %8227, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %592) #9
  br label %8230

8228:                                             ; preds = %8210, %8199
  br label %8229

8229:                                             ; preds = %8228, %8196
  call void @llvm.lifetime.end.p0(i64 8, ptr %591) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %588) #9
  br label %8237

8230:                                             ; preds = %8224, %8220
  call void @llvm.lifetime.end.p0(i64 8, ptr %591) #9
  br label %8231

8231:                                             ; preds = %8230, %8219
  call void @llvm.lifetime.end.p0(i64 1, ptr %588) #9
  br label %8255

8232:                                             ; preds = %8175
  %8233 = load i32, ptr %529, align 4, !tbaa !16
  %8234 = load i32, ptr %530, align 4, !tbaa !16
  %8235 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %8233, i32 noundef %8234, ptr noundef nonnull align 8 dereferenceable(32) %532, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %8236 unwind label %7587

8236:                                             ; preds = %8232
  br label %8237

8237:                                             ; preds = %8236, %8229
  %8238 = load i32, ptr %530, align 4, !tbaa !16
  %8239 = load ptr, ptr %5, align 8, !tbaa !5
  %8240 = getelementptr inbounds i32, ptr %8239, i64 2
  %8241 = load i32, ptr %8240, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %8238, i32 noundef %8241)
          to label %8242 unwind label %7587

8242:                                             ; preds = %8237
  %8243 = load ptr, ptr %533, align 8, !tbaa !5
  %8244 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %8243, i32 0, i32 14
  %8245 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %8244, i32 0, i32 4
  %8246 = load i8, ptr %8245, align 2, !tbaa !216, !range !127, !noundef !128
  %8247 = trunc i8 %8246 to i1
  br i1 %8247, label %8248, label %8254

8248:                                             ; preds = %8242
  %8249 = load i32, ptr %530, align 4, !tbaa !16
  %8250 = load ptr, ptr %5, align 8, !tbaa !5
  %8251 = getelementptr inbounds i32, ptr %8250, i64 5
  %8252 = load i32, ptr %8251, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %8249, i32 noundef %8252)
          to label %8253 unwind label %7587

8253:                                             ; preds = %8248
  br label %8254

8254:                                             ; preds = %8253, %8242
  call void @llvm.lifetime.end.p0(i64 8, ptr %533) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %532) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %532) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %531) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %530) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %529) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %525) #9
  br label %11526

8255:                                             ; preds = %8231, %8173, %7883, %7874, %7858, %7804, %7788, %7727, %7703, %7591, %7587
  call void @llvm.lifetime.end.p0(i64 8, ptr %533) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %532) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %532) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %531) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %530) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %529) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %525) #9
  br label %11527

8256:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %593) #9
  %8257 = load ptr, ptr %5, align 8, !tbaa !5
  %8258 = getelementptr inbounds i32, ptr %8257, i64 0
  %8259 = load i32, ptr %8258, align 4, !tbaa !16
  store i32 %8259, ptr %593, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %594) #9
  %8260 = load ptr, ptr %5, align 8, !tbaa !5
  %8261 = getelementptr inbounds i32, ptr %8260, i64 1
  %8262 = load i32, ptr %8261, align 4, !tbaa !16
  store i32 %8262, ptr %594, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %595) #9
  %8263 = load ptr, ptr %5, align 8, !tbaa !5
  %8264 = getelementptr inbounds i32, ptr %8263, i64 3
  %8265 = load i32, ptr %8264, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %595, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %8265, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 336, ptr %596) #9
  %8266 = load ptr, ptr %5, align 8, !tbaa !5
  %8267 = getelementptr inbounds i32, ptr %8266, i64 3
  %8268 = load i32, ptr %8267, align 4, !tbaa !16
  %8269 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %8268)
          to label %8270 unwind label %8310

8270:                                             ; preds = %8256
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %596, ptr noundef nonnull align 8 dereferenceable(336) %8269)
          to label %8271 unwind label %8310

8271:                                             ; preds = %8270
  %8272 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %596, i32 0, i32 2
  store i32 7, ptr %8272, align 8, !tbaa !148
  call void @llvm.lifetime.start.p0(i64 32, ptr %597) #9
  %8273 = load ptr, ptr %5, align 8, !tbaa !5
  %8274 = getelementptr inbounds i32, ptr %8273, i64 3
  %8275 = load i32, ptr %8274, align 4, !tbaa !16
  %8276 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %8275)
          to label %8277 unwind label %8314

8277:                                             ; preds = %8271
  %8278 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %8276, i32 0, i32 2
  %8279 = load i32, ptr %8278, align 8, !tbaa !148
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionERKNS_8SPIRTypeENS1_8BaseTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %597, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(336) %596, i32 noundef %8279, ptr noundef nonnull align 8 dereferenceable(32) %595)
          to label %8280 unwind label %8314

8280:                                             ; preds = %8277
  %8281 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %595, ptr noundef nonnull align 8 dereferenceable(32) %597) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %597) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %597) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %598) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %599) #9
  %8282 = load ptr, ptr %5, align 8, !tbaa !5
  %8283 = getelementptr inbounds i32, ptr %8282, i64 2
  %8284 = load i32, ptr %8283, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %599, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %8284, i1 noundef zeroext true)
          to label %8285 unwind label %8318

8285:                                             ; preds = %8280
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_KcRS6_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %598, ptr noundef nonnull align 8 dereferenceable(32) %599, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %595)
          to label %8286 unwind label %8322

8286:                                             ; preds = %8285
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %599) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %599) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %600) #9
  %8287 = load i32, ptr %594, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 1, ptr %601) #9
  store i8 1, ptr %601, align 1, !tbaa !142
  %8288 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross8Compiler3setINS_14SPIRExpressionEJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERjbEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %8287, ptr noundef nonnull align 8 dereferenceable(32) %598, ptr noundef nonnull align 4 dereferenceable(4) %593, ptr noundef nonnull align 1 dereferenceable(1) %601)
          to label %8289 unwind label %8327

8289:                                             ; preds = %8286
  call void @llvm.lifetime.end.p0(i64 1, ptr %601) #9
  store ptr %8288, ptr %600, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %602) #9
  %8290 = load ptr, ptr %5, align 8, !tbaa !5
  %8291 = getelementptr inbounds i32, ptr %8290, i64 2
  %8292 = load i32, ptr %8291, align 4, !tbaa !16
  %8293 = invoke noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %8292)
          to label %8294 unwind label %8331

8294:                                             ; preds = %8289
  store ptr %8293, ptr %602, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %603) #9
  %8295 = load ptr, ptr %602, align 8, !tbaa !5
  %8296 = icmp ne ptr %8295, null
  br i1 %8296, label %8297, label %8300

8297:                                             ; preds = %8294
  %8298 = load ptr, ptr %602, align 8, !tbaa !5
  %8299 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %8298, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %603, ptr align 8 %8299, i64 4, i1 false), !tbaa.struct !151
  br label %8302

8300:                                             ; preds = %8294
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %603, i32 noundef 0)
          to label %8301 unwind label %8335

8301:                                             ; preds = %8300
  br label %8302

8302:                                             ; preds = %8301, %8297
  %8303 = load ptr, ptr %600, align 8, !tbaa !5
  %8304 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %8303, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %8304, ptr align 4 %603, i64 4, i1 false), !tbaa.struct !151
  call void @llvm.lifetime.end.p0(i64 4, ptr %603) #9
  %8305 = load i32, ptr %594, align 4, !tbaa !16
  %8306 = load ptr, ptr %5, align 8, !tbaa !5
  %8307 = getelementptr inbounds i32, ptr %8306, i64 3
  %8308 = load i32, ptr %8307, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %8305, i32 noundef %8308)
          to label %8309 unwind label %8331

8309:                                             ; preds = %8302
  call void @llvm.lifetime.end.p0(i64 8, ptr %602) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %600) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %598) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %598) #9
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %596) #9
  call void @llvm.lifetime.end.p0(i64 336, ptr %596) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %595) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %595) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %594) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %593) #9
  br label %11526

8310:                                             ; preds = %8270, %8256
  %8311 = landingpad { ptr, i32 }
          cleanup
  %8312 = extractvalue { ptr, i32 } %8311, 0
  store ptr %8312, ptr %23, align 8
  %8313 = extractvalue { ptr, i32 } %8311, 1
  store i32 %8313, ptr %24, align 4
  br label %8343

8314:                                             ; preds = %8277, %8271
  %8315 = landingpad { ptr, i32 }
          cleanup
  %8316 = extractvalue { ptr, i32 } %8315, 0
  store ptr %8316, ptr %23, align 8
  %8317 = extractvalue { ptr, i32 } %8315, 1
  store i32 %8317, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %597) #9
  br label %8342

8318:                                             ; preds = %8280
  %8319 = landingpad { ptr, i32 }
          cleanup
  %8320 = extractvalue { ptr, i32 } %8319, 0
  store ptr %8320, ptr %23, align 8
  %8321 = extractvalue { ptr, i32 } %8319, 1
  store i32 %8321, ptr %24, align 4
  br label %8326

8322:                                             ; preds = %8285
  %8323 = landingpad { ptr, i32 }
          cleanup
  %8324 = extractvalue { ptr, i32 } %8323, 0
  store ptr %8324, ptr %23, align 8
  %8325 = extractvalue { ptr, i32 } %8323, 1
  store i32 %8325, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %599) #9
  br label %8326

8326:                                             ; preds = %8322, %8318
  call void @llvm.lifetime.end.p0(i64 32, ptr %599) #9
  br label %8341

8327:                                             ; preds = %8286
  %8328 = landingpad { ptr, i32 }
          cleanup
  %8329 = extractvalue { ptr, i32 } %8328, 0
  store ptr %8329, ptr %23, align 8
  %8330 = extractvalue { ptr, i32 } %8328, 1
  store i32 %8330, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %601) #9
  br label %8340

8331:                                             ; preds = %8302, %8289
  %8332 = landingpad { ptr, i32 }
          cleanup
  %8333 = extractvalue { ptr, i32 } %8332, 0
  store ptr %8333, ptr %23, align 8
  %8334 = extractvalue { ptr, i32 } %8332, 1
  store i32 %8334, ptr %24, align 4
  br label %8339

8335:                                             ; preds = %8300
  %8336 = landingpad { ptr, i32 }
          cleanup
  %8337 = extractvalue { ptr, i32 } %8336, 0
  store ptr %8337, ptr %23, align 8
  %8338 = extractvalue { ptr, i32 } %8336, 1
  store i32 %8338, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %603) #9
  br label %8339

8339:                                             ; preds = %8335, %8331
  call void @llvm.lifetime.end.p0(i64 8, ptr %602) #9
  br label %8340

8340:                                             ; preds = %8339, %8327
  call void @llvm.lifetime.end.p0(i64 8, ptr %600) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %598) #9
  br label %8341

8341:                                             ; preds = %8340, %8326
  call void @llvm.lifetime.end.p0(i64 32, ptr %598) #9
  br label %8342

8342:                                             ; preds = %8341, %8314
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %596) #9
  br label %8343

8343:                                             ; preds = %8342, %8310
  call void @llvm.lifetime.end.p0(i64 336, ptr %596) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %595) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %595) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %594) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %593) #9
  br label %11527

8344:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 8, ptr %604) #9
  %8345 = load ptr, ptr %5, align 8, !tbaa !5
  %8346 = getelementptr inbounds i32, ptr %8345, i64 0
  %8347 = load i32, ptr %8346, align 4, !tbaa !16
  %8348 = call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %8347)
  store ptr %8348, ptr %604, align 8, !tbaa !5
  %8349 = load ptr, ptr %604, align 8, !tbaa !5
  %8350 = icmp ne ptr %8349, null
  br i1 %8350, label %8351, label %8363

8351:                                             ; preds = %8344
  %8352 = load ptr, ptr %604, align 8, !tbaa !5
  %8353 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %8352, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %605, ptr align 8 %8353, i64 4, i1 false), !tbaa.struct !151
  %8354 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %605, i32 0, i32 0
  %8355 = load i32, ptr %8354, align 4
  %8356 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 %8355, i32 noundef 24)
  br i1 %8356, label %8357, label %8362

8357:                                             ; preds = %8351
  %8358 = load ptr, ptr %604, align 8, !tbaa !5
  %8359 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %8358, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %606, ptr align 8 %8359, i64 4, i1 false), !tbaa.struct !151
  %8360 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %606, i32 0, i32 0
  %8361 = load i32, ptr %8360, align 4
  call void @_ZN11spirv_cross8Compiler16unset_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 %8361, i32 noundef 24)
  call void @_ZN11spirv_cross8Compiler15force_recompileEv(ptr noundef nonnull align 8 dereferenceable(3176) %885)
  br label %8362

8362:                                             ; preds = %8357, %8351
  br label %8363

8363:                                             ; preds = %8362, %8344
  call void @llvm.lifetime.start.p0(i64 8, ptr %607) #9
  %8364 = load ptr, ptr %5, align 8, !tbaa !5
  %8365 = getelementptr inbounds i32, ptr %8364, i64 0
  %8366 = load i32, ptr %8365, align 4, !tbaa !16
  %8367 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %8366)
  store ptr %8367, ptr %607, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %608) #9
  %8368 = load ptr, ptr %5, align 8, !tbaa !5
  %8369 = getelementptr inbounds i32, ptr %8368, i64 2
  %8370 = load i32, ptr %8369, align 4, !tbaa !16
  %8371 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %8370)
  store ptr %8371, ptr %608, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 336, ptr %609) #9
  %8372 = load ptr, ptr %608, align 8, !tbaa !5
  call void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %609, ptr noundef nonnull align 8 dereferenceable(336) %8372)
  %8373 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %609, i32 0, i32 4
  store i32 4, ptr %8373, align 8, !tbaa !129
  call void @llvm.lifetime.start.p0(i64 32, ptr %610) #9
  %8374 = load ptr, ptr %5, align 8, !tbaa !5
  %8375 = getelementptr inbounds i32, ptr %8374, i64 1
  %8376 = load i32, ptr %8375, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %610, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %8376, i1 noundef zeroext true)
          to label %8377 unwind label %8407

8377:                                             ; preds = %8363
  call void @llvm.lifetime.start.p0(i64 336, ptr %611) #9
  %8378 = load ptr, ptr %5, align 8, !tbaa !5
  %8379 = getelementptr inbounds i32, ptr %8378, i64 1
  %8380 = load i32, ptr %8379, align 4, !tbaa !16
  %8381 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %8380)
          to label %8382 unwind label %8411

8382:                                             ; preds = %8377
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %611, ptr noundef nonnull align 8 dereferenceable(336) %8381)
          to label %8383 unwind label %8411

8383:                                             ; preds = %8382
  %8384 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %611, i32 0, i32 2
  store i32 7, ptr %8384, align 8, !tbaa !148
  call void @llvm.lifetime.start.p0(i64 32, ptr %612) #9
  %8385 = load ptr, ptr %5, align 8, !tbaa !5
  %8386 = getelementptr inbounds i32, ptr %8385, i64 1
  %8387 = load i32, ptr %8386, align 4, !tbaa !16
  %8388 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %8387)
          to label %8389 unwind label %8415

8389:                                             ; preds = %8383
  %8390 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %8388, i32 0, i32 2
  %8391 = load i32, ptr %8390, align 8, !tbaa !148
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionERKNS_8SPIRTypeENS1_8BaseTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %612, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(336) %611, i32 noundef %8391, ptr noundef nonnull align 8 dereferenceable(32) %610)
          to label %8392 unwind label %8415

8392:                                             ; preds = %8389
  %8393 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %610, ptr noundef nonnull align 8 dereferenceable(32) %612) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %612) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %612) #9
  %8394 = load ptr, ptr %607, align 8, !tbaa !5
  %8395 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %8394, i32 0, i32 14
  %8396 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %8395, i32 0, i32 1
  %8397 = load i32, ptr %8396, align 4, !tbaa !215
  %8398 = icmp eq i32 %8397, 0
  br i1 %8398, label %8399, label %8423

8399:                                             ; preds = %8392
  %8400 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %8401 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %8400, i32 0, i32 1
  %8402 = load i8, ptr %8401, align 4, !tbaa !210, !range !127, !noundef !128
  %8403 = trunc i8 %8402 to i1
  br i1 %8403, label %8404, label %8423

8404:                                             ; preds = %8399
  call void @llvm.lifetime.start.p0(i64 32, ptr %613) #9
  invoke void @_ZN11spirv_cross4joinIJRA7_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA5_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %613, ptr noundef nonnull align 1 dereferenceable(7) @.str.1095, ptr noundef nonnull align 8 dereferenceable(32) %610, ptr noundef nonnull align 1 dereferenceable(5) @.str.1096)
          to label %8405 unwind label %8419

8405:                                             ; preds = %8404
  %8406 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %610, ptr noundef nonnull align 8 dereferenceable(32) %613) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %613) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %613) #9
  br label %8423

8407:                                             ; preds = %8363
  %8408 = landingpad { ptr, i32 }
          cleanup
  %8409 = extractvalue { ptr, i32 } %8408, 0
  store ptr %8409, ptr %23, align 8
  %8410 = extractvalue { ptr, i32 } %8408, 1
  store i32 %8410, ptr %24, align 4
  br label %8542

8411:                                             ; preds = %8382, %8377
  %8412 = landingpad { ptr, i32 }
          cleanup
  %8413 = extractvalue { ptr, i32 } %8412, 0
  store ptr %8413, ptr %23, align 8
  %8414 = extractvalue { ptr, i32 } %8412, 1
  store i32 %8414, ptr %24, align 4
  br label %8541

8415:                                             ; preds = %8389, %8383
  %8416 = landingpad { ptr, i32 }
          cleanup
  %8417 = extractvalue { ptr, i32 } %8416, 0
  store ptr %8417, ptr %23, align 8
  %8418 = extractvalue { ptr, i32 } %8416, 1
  store i32 %8418, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %612) #9
  br label %8540

8419:                                             ; preds = %8404
  %8420 = landingpad { ptr, i32 }
          cleanup
  %8421 = extractvalue { ptr, i32 } %8420, 0
  store ptr %8421, ptr %23, align 8
  %8422 = extractvalue { ptr, i32 } %8420, 1
  store i32 %8422, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %613) #9
  br label %8540

8423:                                             ; preds = %8405, %8399, %8392
  %8424 = load ptr, ptr %607, align 8, !tbaa !5
  %8425 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %8424, i32 0, i32 14
  %8426 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %8425, i32 0, i32 4
  %8427 = load i8, ptr %8426, align 2, !tbaa !216, !range !127, !noundef !128
  %8428 = trunc i8 %8427 to i1
  br i1 %8428, label %8429, label %8493

8429:                                             ; preds = %8423
  call void @llvm.lifetime.start.p0(i64 4, ptr %614) #9
  %8430 = load ptr, ptr %5, align 8, !tbaa !5
  %8431 = getelementptr inbounds i32, ptr %8430, i64 3
  %8432 = load i32, ptr %8431, align 4, !tbaa !16
  store i32 %8432, ptr %614, align 4, !tbaa !16
  %8433 = load i32, ptr %614, align 4, !tbaa !16
  %8434 = icmp ne i32 %8433, 64
  br i1 %8434, label %8438, label %8435

8435:                                             ; preds = %8429
  %8436 = load i32, ptr %7, align 4, !tbaa !16
  %8437 = icmp ne i32 %8436, 5
  br i1 %8437, label %8438, label %8449

8438:                                             ; preds = %8435, %8429
  %8439 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %8439, ptr noundef @.str.1438)
          to label %8440 unwind label %8441

8440:                                             ; preds = %8438
  invoke void @__cxa_throw(ptr %8439, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
          to label %11533 unwind label %8445

8441:                                             ; preds = %8438
  %8442 = landingpad { ptr, i32 }
          cleanup
  %8443 = extractvalue { ptr, i32 } %8442, 0
  store ptr %8443, ptr %23, align 8
  %8444 = extractvalue { ptr, i32 } %8442, 1
  store i32 %8444, ptr %24, align 4
  call void @__cxa_free_exception(ptr %8439) #9
  br label %8492

8445:                                             ; preds = %8440
  %8446 = landingpad { ptr, i32 }
          cleanup
  %8447 = extractvalue { ptr, i32 } %8446, 0
  store ptr %8447, ptr %23, align 8
  %8448 = extractvalue { ptr, i32 } %8446, 1
  store i32 %8448, ptr %24, align 4
  br label %8492

8449:                                             ; preds = %8435
  call void @llvm.lifetime.start.p0(i64 4, ptr %615) #9
  %8450 = load ptr, ptr %5, align 8, !tbaa !5
  %8451 = getelementptr inbounds i32, ptr %8450, i64 4
  %8452 = load i32, ptr %8451, align 4, !tbaa !16
  store i32 %8452, ptr %615, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %616) #9
  %8453 = load ptr, ptr %5, align 8, !tbaa !5
  %8454 = getelementptr inbounds i32, ptr %8453, i64 0
  %8455 = load i32, ptr %8454, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %616, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %8455)
          to label %8456 unwind label %8468

8456:                                             ; preds = %8449
  call void @llvm.lifetime.start.p0(i64 32, ptr %617) #9
  %8457 = load i32, ptr %615, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %617, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %8457, i1 noundef zeroext true)
          to label %8458 unwind label %8472

8458:                                             ; preds = %8456
  call void @llvm.lifetime.start.p0(i64 32, ptr %618) #9
  %8459 = load ptr, ptr %608, align 8, !tbaa !5
  %8460 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %8459, i32 0, i32 4
  %8461 = load i32, ptr %8460, align 8, !tbaa !129
  call void @llvm.lifetime.start.p0(i64 32, ptr %619) #9
  %8462 = load ptr, ptr %5, align 8, !tbaa !5
  %8463 = getelementptr inbounds i32, ptr %8462, i64 2
  %8464 = load i32, ptr %8463, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %619, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %8464, i1 noundef zeroext true)
          to label %8465 unwind label %8476

8465:                                             ; preds = %8458
  invoke void @_ZN11spirv_cross12CompilerGLSL13remap_swizzleERKNS_8SPIRTypeEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %618, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(336) %609, i32 noundef %8461, ptr noundef nonnull align 8 dereferenceable(32) %619)
          to label %8466 unwind label %8480

8466:                                             ; preds = %8465
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA12_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_RSA_SC_SA_SC_SA_SC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 1 dereferenceable(12) @.str.1439, ptr noundef nonnull align 8 dereferenceable(32) %616, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %610, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %617, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %618, ptr noundef nonnull align 1 dereferenceable(3) @.str.751)
          to label %8467 unwind label %8484

8467:                                             ; preds = %8466
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %618) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %619) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %619) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %618) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %617) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %617) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %616) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %616) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %615) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %614) #9
  br label %8526

8468:                                             ; preds = %8449
  %8469 = landingpad { ptr, i32 }
          cleanup
  %8470 = extractvalue { ptr, i32 } %8469, 0
  store ptr %8470, ptr %23, align 8
  %8471 = extractvalue { ptr, i32 } %8469, 1
  store i32 %8471, ptr %24, align 4
  br label %8491

8472:                                             ; preds = %8456
  %8473 = landingpad { ptr, i32 }
          cleanup
  %8474 = extractvalue { ptr, i32 } %8473, 0
  store ptr %8474, ptr %23, align 8
  %8475 = extractvalue { ptr, i32 } %8473, 1
  store i32 %8475, ptr %24, align 4
  br label %8490

8476:                                             ; preds = %8458
  %8477 = landingpad { ptr, i32 }
          cleanup
  %8478 = extractvalue { ptr, i32 } %8477, 0
  store ptr %8478, ptr %23, align 8
  %8479 = extractvalue { ptr, i32 } %8477, 1
  store i32 %8479, ptr %24, align 4
  br label %8489

8480:                                             ; preds = %8465
  %8481 = landingpad { ptr, i32 }
          cleanup
  %8482 = extractvalue { ptr, i32 } %8481, 0
  store ptr %8482, ptr %23, align 8
  %8483 = extractvalue { ptr, i32 } %8481, 1
  store i32 %8483, ptr %24, align 4
  br label %8488

8484:                                             ; preds = %8466
  %8485 = landingpad { ptr, i32 }
          cleanup
  %8486 = extractvalue { ptr, i32 } %8485, 0
  store ptr %8486, ptr %23, align 8
  %8487 = extractvalue { ptr, i32 } %8485, 1
  store i32 %8487, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %618) #9
  br label %8488

8488:                                             ; preds = %8484, %8480
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %619) #9
  br label %8489

8489:                                             ; preds = %8488, %8476
  call void @llvm.lifetime.end.p0(i64 32, ptr %619) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %618) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %617) #9
  br label %8490

8490:                                             ; preds = %8489, %8472
  call void @llvm.lifetime.end.p0(i64 32, ptr %617) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %616) #9
  br label %8491

8491:                                             ; preds = %8490, %8468
  call void @llvm.lifetime.end.p0(i64 32, ptr %616) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %615) #9
  br label %8492

8492:                                             ; preds = %8491, %8445, %8441
  call void @llvm.lifetime.end.p0(i64 4, ptr %614) #9
  br label %8540

8493:                                             ; preds = %8423
  call void @llvm.lifetime.start.p0(i64 32, ptr %620) #9
  %8494 = load ptr, ptr %5, align 8, !tbaa !5
  %8495 = getelementptr inbounds i32, ptr %8494, i64 0
  %8496 = load i32, ptr %8495, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %620, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %8496)
          to label %8497 unwind label %8507

8497:                                             ; preds = %8493
  call void @llvm.lifetime.start.p0(i64 32, ptr %621) #9
  %8498 = load ptr, ptr %608, align 8, !tbaa !5
  %8499 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %8498, i32 0, i32 4
  %8500 = load i32, ptr %8499, align 8, !tbaa !129
  call void @llvm.lifetime.start.p0(i64 32, ptr %622) #9
  %8501 = load ptr, ptr %5, align 8, !tbaa !5
  %8502 = getelementptr inbounds i32, ptr %8501, i64 2
  %8503 = load i32, ptr %8502, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %622, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %8503, i1 noundef zeroext true)
          to label %8504 unwind label %8511

8504:                                             ; preds = %8497
  invoke void @_ZN11spirv_cross12CompilerGLSL13remap_swizzleERKNS_8SPIRTypeEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %621, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(336) %609, i32 noundef %8500, ptr noundef nonnull align 8 dereferenceable(32) %622)
          to label %8505 unwind label %8515

8505:                                             ; preds = %8504
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA12_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_RSA_SC_SA_SC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 1 dereferenceable(12) @.str.1439, ptr noundef nonnull align 8 dereferenceable(32) %620, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %610, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %621, ptr noundef nonnull align 1 dereferenceable(3) @.str.751)
          to label %8506 unwind label %8519

8506:                                             ; preds = %8505
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %621) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %622) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %622) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %621) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %620) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %620) #9
  br label %8526

8507:                                             ; preds = %8493
  %8508 = landingpad { ptr, i32 }
          cleanup
  %8509 = extractvalue { ptr, i32 } %8508, 0
  store ptr %8509, ptr %23, align 8
  %8510 = extractvalue { ptr, i32 } %8508, 1
  store i32 %8510, ptr %24, align 4
  br label %8525

8511:                                             ; preds = %8497
  %8512 = landingpad { ptr, i32 }
          cleanup
  %8513 = extractvalue { ptr, i32 } %8512, 0
  store ptr %8513, ptr %23, align 8
  %8514 = extractvalue { ptr, i32 } %8512, 1
  store i32 %8514, ptr %24, align 4
  br label %8524

8515:                                             ; preds = %8504
  %8516 = landingpad { ptr, i32 }
          cleanup
  %8517 = extractvalue { ptr, i32 } %8516, 0
  store ptr %8517, ptr %23, align 8
  %8518 = extractvalue { ptr, i32 } %8516, 1
  store i32 %8518, ptr %24, align 4
  br label %8523

8519:                                             ; preds = %8505
  %8520 = landingpad { ptr, i32 }
          cleanup
  %8521 = extractvalue { ptr, i32 } %8520, 0
  store ptr %8521, ptr %23, align 8
  %8522 = extractvalue { ptr, i32 } %8520, 1
  store i32 %8522, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %621) #9
  br label %8523

8523:                                             ; preds = %8519, %8515
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %622) #9
  br label %8524

8524:                                             ; preds = %8523, %8511
  call void @llvm.lifetime.end.p0(i64 32, ptr %622) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %621) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %620) #9
  br label %8525

8525:                                             ; preds = %8524, %8507
  call void @llvm.lifetime.end.p0(i64 32, ptr %620) #9
  br label %8540

8526:                                             ; preds = %8506, %8467
  %8527 = load ptr, ptr %604, align 8, !tbaa !5
  %8528 = icmp ne ptr %8527, null
  br i1 %8528, label %8529, label %8539

8529:                                             ; preds = %8526
  %8530 = load ptr, ptr %604, align 8, !tbaa !5
  %8531 = invoke noundef zeroext i1 @_ZN11spirv_cross8Compiler27variable_storage_is_aliasedERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %885, ptr noundef nonnull align 8 dereferenceable(176) %8530)
          to label %8532 unwind label %8535

8532:                                             ; preds = %8529
  br i1 %8531, label %8533, label %8539

8533:                                             ; preds = %8532
  invoke void @_ZN11spirv_cross8Compiler27flush_all_aliased_variablesEv(ptr noundef nonnull align 8 dereferenceable(3176) %885)
          to label %8534 unwind label %8535

8534:                                             ; preds = %8533
  br label %8539

8535:                                             ; preds = %8533, %8529
  %8536 = landingpad { ptr, i32 }
          cleanup
  %8537 = extractvalue { ptr, i32 } %8536, 0
  store ptr %8537, ptr %23, align 8
  %8538 = extractvalue { ptr, i32 } %8536, 1
  store i32 %8538, ptr %24, align 4
  br label %8540

8539:                                             ; preds = %8534, %8532, %8526
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %611) #9
  call void @llvm.lifetime.end.p0(i64 336, ptr %611) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %610) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %610) #9
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %609) #9
  call void @llvm.lifetime.end.p0(i64 336, ptr %609) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %608) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %607) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %604) #9
  br label %11526

8540:                                             ; preds = %8535, %8525, %8492, %8419, %8415
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %611) #9
  br label %8541

8541:                                             ; preds = %8540, %8411
  call void @llvm.lifetime.end.p0(i64 336, ptr %611) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %610) #9
  br label %8542

8542:                                             ; preds = %8541, %8407
  call void @llvm.lifetime.end.p0(i64 32, ptr %610) #9
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %609) #9
  call void @llvm.lifetime.end.p0(i64 336, ptr %609) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %608) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %607) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %604) #9
  br label %11527

8543:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 8, ptr %623) #9
  %8544 = load ptr, ptr %5, align 8, !tbaa !5
  %8545 = getelementptr inbounds i32, ptr %8544, i64 2
  %8546 = load i32, ptr %8545, align 4, !tbaa !16
  %8547 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %8546)
  store ptr %8547, ptr %623, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %624) #9
  %8548 = load ptr, ptr %5, align 8, !tbaa !5
  %8549 = getelementptr inbounds i32, ptr %8548, i64 0
  %8550 = load i32, ptr %8549, align 4, !tbaa !16
  store i32 %8550, ptr %624, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %625) #9
  %8551 = load ptr, ptr %5, align 8, !tbaa !5
  %8552 = getelementptr inbounds i32, ptr %8551, i64 1
  %8553 = load i32, ptr %8552, align 4, !tbaa !16
  store i32 %8553, ptr %625, align 4, !tbaa !16
  %8554 = load ptr, ptr %623, align 8, !tbaa !5
  %8555 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %8554, i32 0, i32 2
  %8556 = load i32, ptr %8555, align 8, !tbaa !148
  %8557 = icmp eq i32 %8556, 16
  br i1 %8557, label %8558, label %8699

8558:                                             ; preds = %8543
  call void @llvm.lifetime.start.p0(i64 32, ptr %626) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %626) #9
  %8559 = load ptr, ptr %623, align 8, !tbaa !5
  %8560 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %8559, i32 0, i32 14
  %8561 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %8560, i32 0, i32 5
  %8562 = load i32, ptr %8561, align 4, !tbaa !214
  %8563 = icmp eq i32 %8562, 2
  br i1 %8563, label %8564, label %8624

8564:                                             ; preds = %8558
  %8565 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %8566 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %8565, i32 0, i32 1
  %8567 = load i8, ptr %8566, align 4, !tbaa !210, !range !127, !noundef !128
  %8568 = trunc i8 %8567 to i1
  br i1 %8568, label %8586, label %8569

8569:                                             ; preds = %8564
  %8570 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %8571 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %8570, i32 0, i32 0
  %8572 = load i32, ptr %8571, align 4, !tbaa !207
  %8573 = icmp ult i32 %8572, 430
  br i1 %8573, label %8574, label %8586

8574:                                             ; preds = %8569
  call void @llvm.lifetime.start.p0(i64 32, ptr %627) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %628) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %628) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %627, ptr noundef @.str.1440, ptr noundef nonnull align 1 dereferenceable(1) %628)
          to label %8575 unwind label %8577

8575:                                             ; preds = %8574
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %627)
          to label %8576 unwind label %8581

8576:                                             ; preds = %8575
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %627) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %628) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %628) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %627) #9
  br label %8608

8577:                                             ; preds = %8574
  %8578 = landingpad { ptr, i32 }
          cleanup
  %8579 = extractvalue { ptr, i32 } %8578, 0
  store ptr %8579, ptr %23, align 8
  %8580 = extractvalue { ptr, i32 } %8578, 1
  store i32 %8580, ptr %24, align 4
  br label %8585

8581:                                             ; preds = %8575
  %8582 = landingpad { ptr, i32 }
          cleanup
  %8583 = extractvalue { ptr, i32 } %8582, 0
  store ptr %8583, ptr %23, align 8
  %8584 = extractvalue { ptr, i32 } %8582, 1
  store i32 %8584, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %627) #9
  br label %8585

8585:                                             ; preds = %8581, %8577
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %628) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %628) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %627) #9
  br label %8698

8586:                                             ; preds = %8569, %8564
  %8587 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %8588 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %8587, i32 0, i32 1
  %8589 = load i8, ptr %8588, align 4, !tbaa !210, !range !127, !noundef !128
  %8590 = trunc i8 %8589 to i1
  br i1 %8590, label %8591, label %8607

8591:                                             ; preds = %8586
  %8592 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %8593 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %8592, i32 0, i32 0
  %8594 = load i32, ptr %8593, align 4, !tbaa !207
  %8595 = icmp ult i32 %8594, 310
  br i1 %8595, label %8596, label %8607

8596:                                             ; preds = %8591
  %8597 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %8597, ptr noundef @.str.1441)
          to label %8598 unwind label %8599

8598:                                             ; preds = %8596
  invoke void @__cxa_throw(ptr %8597, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
          to label %11533 unwind label %8603

8599:                                             ; preds = %8596
  %8600 = landingpad { ptr, i32 }
          cleanup
  %8601 = extractvalue { ptr, i32 } %8600, 0
  store ptr %8601, ptr %23, align 8
  %8602 = extractvalue { ptr, i32 } %8600, 1
  store i32 %8602, ptr %24, align 4
  call void @__cxa_free_exception(ptr %8597) #9
  br label %8698

8603:                                             ; preds = %8598
  %8604 = landingpad { ptr, i32 }
          cleanup
  %8605 = extractvalue { ptr, i32 } %8604, 0
  store ptr %8605, ptr %23, align 8
  %8606 = extractvalue { ptr, i32 } %8604, 1
  store i32 %8606, ptr %24, align 4
  br label %8698

8607:                                             ; preds = %8591, %8586
  br label %8608

8608:                                             ; preds = %8607, %8576
  call void @llvm.lifetime.start.p0(i64 32, ptr %629) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %630) #9
  %8609 = load ptr, ptr %5, align 8, !tbaa !5
  %8610 = getelementptr inbounds i32, ptr %8609, i64 2
  %8611 = load i32, ptr %8610, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %630, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %8611)
          to label %8612 unwind label %8615

8612:                                             ; preds = %8608
  invoke void @_ZN11spirv_cross4joinIJRA11_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %629, ptr noundef nonnull align 1 dereferenceable(11) @.str.1442, ptr noundef nonnull align 8 dereferenceable(32) %630, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %8613 unwind label %8619

8613:                                             ; preds = %8612
  %8614 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %626, ptr noundef nonnull align 8 dereferenceable(32) %629) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %629) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %630) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %630) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %629) #9
  br label %8676

8615:                                             ; preds = %8608
  %8616 = landingpad { ptr, i32 }
          cleanup
  %8617 = extractvalue { ptr, i32 } %8616, 0
  store ptr %8617, ptr %23, align 8
  %8618 = extractvalue { ptr, i32 } %8616, 1
  store i32 %8618, ptr %24, align 4
  br label %8623

8619:                                             ; preds = %8612
  %8620 = landingpad { ptr, i32 }
          cleanup
  %8621 = extractvalue { ptr, i32 } %8620, 0
  store ptr %8621, ptr %23, align 8
  %8622 = extractvalue { ptr, i32 } %8620, 1
  store i32 %8622, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %630) #9
  br label %8623

8623:                                             ; preds = %8619, %8615
  call void @llvm.lifetime.end.p0(i64 32, ptr %630) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %629) #9
  br label %8698

8624:                                             ; preds = %8558
  call void @llvm.lifetime.start.p0(i64 32, ptr %631) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %632) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %632) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %631, ptr noundef @.str.492, ptr noundef nonnull align 1 dereferenceable(1) %632)
          to label %8625 unwind label %8641

8625:                                             ; preds = %8624
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %632) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %632) #9
  %8626 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %885)
          to label %8627 unwind label %8645

8627:                                             ; preds = %8625
  br i1 %8626, label %8628, label %8658

8628:                                             ; preds = %8627
  call void @llvm.lifetime.start.p0(i64 8, ptr %633) #9
  %8629 = load ptr, ptr %623, align 8, !tbaa !5
  %8630 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %8629, i32 0, i32 1
  %8631 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %8630)
          to label %8632 unwind label %8649

8632:                                             ; preds = %8628
  %8633 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %8631)
          to label %8634 unwind label %8649

8634:                                             ; preds = %8632
  store ptr %8633, ptr %633, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %634) #9
  %8635 = load ptr, ptr %633, align 8, !tbaa !5
  %8636 = load ptr, ptr %5, align 8, !tbaa !5
  %8637 = getelementptr inbounds i32, ptr %8636, i64 2
  %8638 = load i32, ptr %8637, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13legacy_tex_opERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %634, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %631, ptr noundef nonnull align 8 dereferenceable(336) %8635, i32 noundef %8638)
          to label %8639 unwind label %8653

8639:                                             ; preds = %8634
  %8640 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %631, ptr noundef nonnull align 8 dereferenceable(32) %634) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %634) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %634) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %633) #9
  br label %8658

8641:                                             ; preds = %8624
  %8642 = landingpad { ptr, i32 }
          cleanup
  %8643 = extractvalue { ptr, i32 } %8642, 0
  store ptr %8643, ptr %23, align 8
  %8644 = extractvalue { ptr, i32 } %8642, 1
  store i32 %8644, ptr %24, align 4
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %632) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %632) #9
  br label %8675

8645:                                             ; preds = %8625
  %8646 = landingpad { ptr, i32 }
          cleanup
  %8647 = extractvalue { ptr, i32 } %8646, 0
  store ptr %8647, ptr %23, align 8
  %8648 = extractvalue { ptr, i32 } %8646, 1
  store i32 %8648, ptr %24, align 4
  br label %8674

8649:                                             ; preds = %8632, %8628
  %8650 = landingpad { ptr, i32 }
          cleanup
  %8651 = extractvalue { ptr, i32 } %8650, 0
  store ptr %8651, ptr %23, align 8
  %8652 = extractvalue { ptr, i32 } %8650, 1
  store i32 %8652, ptr %24, align 4
  br label %8657

8653:                                             ; preds = %8634
  %8654 = landingpad { ptr, i32 }
          cleanup
  %8655 = extractvalue { ptr, i32 } %8654, 0
  store ptr %8655, ptr %23, align 8
  %8656 = extractvalue { ptr, i32 } %8654, 1
  store i32 %8656, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %634) #9
  br label %8657

8657:                                             ; preds = %8653, %8649
  call void @llvm.lifetime.end.p0(i64 8, ptr %633) #9
  br label %8674

8658:                                             ; preds = %8639, %8627
  call void @llvm.lifetime.start.p0(i64 32, ptr %635) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %636) #9
  %8659 = load ptr, ptr %5, align 8, !tbaa !5
  %8660 = getelementptr inbounds i32, ptr %8659, i64 2
  %8661 = load i32, ptr %8660, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL36convert_separate_image_to_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %636, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %8661)
          to label %8662 unwind label %8665

8662:                                             ; preds = %8658
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS6_SA_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %635, ptr noundef nonnull align 8 dereferenceable(32) %631, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %636, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %8663 unwind label %8669

8663:                                             ; preds = %8662
  %8664 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %626, ptr noundef nonnull align 8 dereferenceable(32) %635) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %635) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %636) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %636) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %635) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %631) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %631) #9
  br label %8676

8665:                                             ; preds = %8658
  %8666 = landingpad { ptr, i32 }
          cleanup
  %8667 = extractvalue { ptr, i32 } %8666, 0
  store ptr %8667, ptr %23, align 8
  %8668 = extractvalue { ptr, i32 } %8666, 1
  store i32 %8668, ptr %24, align 4
  br label %8673

8669:                                             ; preds = %8662
  %8670 = landingpad { ptr, i32 }
          cleanup
  %8671 = extractvalue { ptr, i32 } %8670, 0
  store ptr %8671, ptr %23, align 8
  %8672 = extractvalue { ptr, i32 } %8670, 1
  store i32 %8672, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %636) #9
  br label %8673

8673:                                             ; preds = %8669, %8665
  call void @llvm.lifetime.end.p0(i64 32, ptr %636) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %635) #9
  br label %8674

8674:                                             ; preds = %8673, %8657, %8645
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %631) #9
  br label %8675

8675:                                             ; preds = %8674, %8641
  call void @llvm.lifetime.end.p0(i64 32, ptr %631) #9
  br label %8698

8676:                                             ; preds = %8663, %8613
  call void @llvm.lifetime.start.p0(i64 8, ptr %637) #9
  %8677 = load ptr, ptr %5, align 8, !tbaa !5
  %8678 = getelementptr inbounds i32, ptr %8677, i64 0
  %8679 = load i32, ptr %8678, align 4, !tbaa !16
  %8680 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %8679)
          to label %8681 unwind label %8689

8681:                                             ; preds = %8676
  store ptr %8680, ptr %637, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %638) #9
  %8682 = load ptr, ptr %637, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionERKNS_8SPIRTypeENS1_8BaseTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %638, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(336) %8682, i32 noundef 7, ptr noundef nonnull align 8 dereferenceable(32) %626)
          to label %8683 unwind label %8693

8683:                                             ; preds = %8681
  %8684 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %626, ptr noundef nonnull align 8 dereferenceable(32) %638) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %638) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %638) #9
  %8685 = load i32, ptr %624, align 4, !tbaa !16
  %8686 = load i32, ptr %625, align 4, !tbaa !16
  %8687 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %8685, i32 noundef %8686, ptr noundef nonnull align 8 dereferenceable(32) %626, i1 noundef zeroext true, i1 noundef zeroext false)
          to label %8688 unwind label %8689

8688:                                             ; preds = %8683
  call void @llvm.lifetime.end.p0(i64 8, ptr %637) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %626) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %626) #9
  br label %8706

8689:                                             ; preds = %8683, %8676
  %8690 = landingpad { ptr, i32 }
          cleanup
  %8691 = extractvalue { ptr, i32 } %8690, 0
  store ptr %8691, ptr %23, align 8
  %8692 = extractvalue { ptr, i32 } %8690, 1
  store i32 %8692, ptr %24, align 4
  br label %8697

8693:                                             ; preds = %8681
  %8694 = landingpad { ptr, i32 }
          cleanup
  %8695 = extractvalue { ptr, i32 } %8694, 0
  store ptr %8695, ptr %23, align 8
  %8696 = extractvalue { ptr, i32 } %8694, 1
  store i32 %8696, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %638) #9
  br label %8697

8697:                                             ; preds = %8693, %8689
  call void @llvm.lifetime.end.p0(i64 8, ptr %637) #9
  br label %8698

8698:                                             ; preds = %8697, %8675, %8623, %8603, %8599, %8585
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %626) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %626) #9
  br label %8707

8699:                                             ; preds = %8543
  %8700 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %8700, ptr noundef @.str.1443)
          to label %8701 unwind label %8702

8701:                                             ; preds = %8699
  call void @__cxa_throw(ptr %8700, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
  unreachable

8702:                                             ; preds = %8699
  %8703 = landingpad { ptr, i32 }
          cleanup
  %8704 = extractvalue { ptr, i32 } %8703, 0
  store ptr %8704, ptr %23, align 8
  %8705 = extractvalue { ptr, i32 } %8703, 1
  store i32 %8705, ptr %24, align 4
  call void @__cxa_free_exception(ptr %8700) #9
  br label %8707

8706:                                             ; preds = %8688
  call void @llvm.lifetime.end.p0(i64 4, ptr %625) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %624) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %623) #9
  br label %11526

8707:                                             ; preds = %8702, %8698
  call void @llvm.lifetime.end.p0(i64 4, ptr %625) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %624) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %623) #9
  br label %11527

8708:                                             ; preds = %919, %919, %919, %919
  call void @llvm.lifetime.start.p0(i64 32, ptr %639) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %640) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %640) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %639, ptr noundef @.str.1444, ptr noundef nonnull align 1 dereferenceable(1) %640)
          to label %8709 unwind label %8718

8709:                                             ; preds = %8708
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %639)
          to label %8710 unwind label %8722

8710:                                             ; preds = %8709
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %639) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %640) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %640) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %639) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %641) #9
  %8711 = load ptr, ptr %5, align 8, !tbaa !5
  %8712 = getelementptr inbounds i32, ptr %8711, i64 0
  %8713 = load i32, ptr %8712, align 4, !tbaa !16
  store i32 %8713, ptr %641, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %642) #9
  %8714 = load ptr, ptr %5, align 8, !tbaa !5
  %8715 = getelementptr inbounds i32, ptr %8714, i64 1
  %8716 = load i32, ptr %8715, align 4, !tbaa !16
  store i32 %8716, ptr %642, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %643) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %643) #9
  %8717 = load i32, ptr %6, align 4, !tbaa !13
  switch i32 %8717, label %8743 [
    i32 4480, label %8727
    i32 4481, label %8734
    i32 4482, label %8737
    i32 4483, label %8740
  ]

8718:                                             ; preds = %8708
  %8719 = landingpad { ptr, i32 }
          cleanup
  %8720 = extractvalue { ptr, i32 } %8719, 0
  store ptr %8720, ptr %23, align 8
  %8721 = extractvalue { ptr, i32 } %8719, 1
  store i32 %8721, ptr %24, align 4
  br label %8726

8722:                                             ; preds = %8709
  %8723 = landingpad { ptr, i32 }
          cleanup
  %8724 = extractvalue { ptr, i32 } %8723, 0
  store ptr %8724, ptr %23, align 8
  %8725 = extractvalue { ptr, i32 } %8723, 1
  store i32 %8725, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %639) #9
  br label %8726

8726:                                             ; preds = %8722, %8718
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %640) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %640) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %639) #9
  br label %11527

8727:                                             ; preds = %8710
  %8728 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %643, ptr noundef @.str.1445)
          to label %8729 unwind label %8730

8729:                                             ; preds = %8727
  br label %8750

8730:                                             ; preds = %8750, %8745, %8740, %8737, %8734, %8727
  %8731 = landingpad { ptr, i32 }
          cleanup
  %8732 = extractvalue { ptr, i32 } %8731, 0
  store ptr %8732, ptr %23, align 8
  %8733 = extractvalue { ptr, i32 } %8731, 1
  store i32 %8733, ptr %24, align 4
  br label %8936

8734:                                             ; preds = %8710
  %8735 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %643, ptr noundef @.str.1446)
          to label %8736 unwind label %8730

8736:                                             ; preds = %8734
  br label %8750

8737:                                             ; preds = %8710
  %8738 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %643, ptr noundef @.str.1447)
          to label %8739 unwind label %8730

8739:                                             ; preds = %8737
  br label %8750

8740:                                             ; preds = %8710
  %8741 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %643, ptr noundef @.str.1448)
          to label %8742 unwind label %8730

8742:                                             ; preds = %8740
  br label %8750

8743:                                             ; preds = %8710
  %8744 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %8744, ptr noundef @.str.1449)
          to label %8745 unwind label %8746

8745:                                             ; preds = %8743
  invoke void @__cxa_throw(ptr %8744, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
          to label %11533 unwind label %8730

8746:                                             ; preds = %8743
  %8747 = landingpad { ptr, i32 }
          cleanup
  %8748 = extractvalue { ptr, i32 } %8747, 0
  store ptr %8748, ptr %23, align 8
  %8749 = extractvalue { ptr, i32 } %8747, 1
  store i32 %8749, ptr %24, align 4
  call void @__cxa_free_exception(ptr %8744) #9
  br label %8936

8750:                                             ; preds = %8742, %8739, %8736, %8729
  %8751 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %643, ptr noundef @.str.718)
          to label %8752 unwind label %8730

8752:                                             ; preds = %8750
  call void @llvm.lifetime.start.p0(i64 1, ptr %644) #9
  store i8 0, ptr %644, align 1, !tbaa !142
  call void @llvm.lifetime.start.p0(i64 32, ptr %645) #9
  %8753 = load ptr, ptr %5, align 8, !tbaa !5
  %8754 = getelementptr inbounds i32, ptr %8753, i64 2
  %8755 = load i32, ptr %8754, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %645, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %8755, i1 noundef zeroext true)
          to label %8756 unwind label %8767

8756:                                             ; preds = %8752
  %8757 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %643, ptr noundef nonnull align 8 dereferenceable(32) %645)
          to label %8758 unwind label %8771

8758:                                             ; preds = %8756
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %645) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %645) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %646) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %647) #9
  %8759 = load ptr, ptr %5, align 8, !tbaa !5
  %8760 = getelementptr inbounds i32, ptr %8759, i64 3
  %8761 = load i32, ptr %8760, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %647, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %8761, i1 noundef zeroext true)
          to label %8762 unwind label %8776

8762:                                             ; preds = %8758
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %646, ptr noundef @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %647)
          to label %8763 unwind label %8780

8763:                                             ; preds = %8762
  %8764 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %643, ptr noundef nonnull align 8 dereferenceable(32) %646)
          to label %8765 unwind label %8784

8765:                                             ; preds = %8763
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %646) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %647) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %647) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %646) #9
  %8766 = load i32, ptr %6, align 4, !tbaa !13
  switch i32 %8766, label %8898 [
    i32 4480, label %8790
    i32 4481, label %8812
    i32 4482, label %8834
    i32 4483, label %8834
  ]

8767:                                             ; preds = %8752
  %8768 = landingpad { ptr, i32 }
          cleanup
  %8769 = extractvalue { ptr, i32 } %8768, 0
  store ptr %8769, ptr %23, align 8
  %8770 = extractvalue { ptr, i32 } %8768, 1
  store i32 %8770, ptr %24, align 4
  br label %8775

8771:                                             ; preds = %8756
  %8772 = landingpad { ptr, i32 }
          cleanup
  %8773 = extractvalue { ptr, i32 } %8772, 0
  store ptr %8773, ptr %23, align 8
  %8774 = extractvalue { ptr, i32 } %8772, 1
  store i32 %8774, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %645) #9
  br label %8775

8775:                                             ; preds = %8771, %8767
  call void @llvm.lifetime.end.p0(i64 32, ptr %645) #9
  br label %8935

8776:                                             ; preds = %8758
  %8777 = landingpad { ptr, i32 }
          cleanup
  %8778 = extractvalue { ptr, i32 } %8777, 0
  store ptr %8778, ptr %23, align 8
  %8779 = extractvalue { ptr, i32 } %8777, 1
  store i32 %8779, ptr %24, align 4
  br label %8789

8780:                                             ; preds = %8762
  %8781 = landingpad { ptr, i32 }
          cleanup
  %8782 = extractvalue { ptr, i32 } %8781, 0
  store ptr %8782, ptr %23, align 8
  %8783 = extractvalue { ptr, i32 } %8781, 1
  store i32 %8783, ptr %24, align 4
  br label %8788

8784:                                             ; preds = %8763
  %8785 = landingpad { ptr, i32 }
          cleanup
  %8786 = extractvalue { ptr, i32 } %8785, 0
  store ptr %8786, ptr %23, align 8
  %8787 = extractvalue { ptr, i32 } %8785, 1
  store i32 %8787, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %646) #9
  br label %8788

8788:                                             ; preds = %8784, %8780
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %647) #9
  br label %8789

8789:                                             ; preds = %8788, %8776
  call void @llvm.lifetime.end.p0(i64 32, ptr %647) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %646) #9
  br label %8935

8790:                                             ; preds = %8765
  call void @llvm.lifetime.start.p0(i64 32, ptr %648) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %649) #9
  %8791 = load ptr, ptr %5, align 8, !tbaa !5
  %8792 = getelementptr inbounds i32, ptr %8791, i64 4
  %8793 = load i32, ptr %8792, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %649, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %8793)
          to label %8794 unwind label %8798

8794:                                             ; preds = %8790
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %648, ptr noundef @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %649)
          to label %8795 unwind label %8802

8795:                                             ; preds = %8794
  %8796 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %643, ptr noundef nonnull align 8 dereferenceable(32) %648)
          to label %8797 unwind label %8806

8797:                                             ; preds = %8795
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %648) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %649) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %649) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %648) #9
  br label %8909

8798:                                             ; preds = %8790
  %8799 = landingpad { ptr, i32 }
          cleanup
  %8800 = extractvalue { ptr, i32 } %8799, 0
  store ptr %8800, ptr %23, align 8
  %8801 = extractvalue { ptr, i32 } %8799, 1
  store i32 %8801, ptr %24, align 4
  br label %8811

8802:                                             ; preds = %8794
  %8803 = landingpad { ptr, i32 }
          cleanup
  %8804 = extractvalue { ptr, i32 } %8803, 0
  store ptr %8804, ptr %23, align 8
  %8805 = extractvalue { ptr, i32 } %8803, 1
  store i32 %8805, ptr %24, align 4
  br label %8810

8806:                                             ; preds = %8795
  %8807 = landingpad { ptr, i32 }
          cleanup
  %8808 = extractvalue { ptr, i32 } %8807, 0
  store ptr %8808, ptr %23, align 8
  %8809 = extractvalue { ptr, i32 } %8807, 1
  store i32 %8809, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %648) #9
  br label %8810

8810:                                             ; preds = %8806, %8802
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %649) #9
  br label %8811

8811:                                             ; preds = %8810, %8798
  call void @llvm.lifetime.end.p0(i64 32, ptr %649) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %648) #9
  br label %8935

8812:                                             ; preds = %8765
  call void @llvm.lifetime.start.p0(i64 32, ptr %650) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %651) #9
  %8813 = load ptr, ptr %5, align 8, !tbaa !5
  %8814 = getelementptr inbounds i32, ptr %8813, i64 4
  %8815 = load i32, ptr %8814, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %651, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %8815, i1 noundef zeroext true)
          to label %8816 unwind label %8820

8816:                                             ; preds = %8812
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %650, ptr noundef @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %651)
          to label %8817 unwind label %8824

8817:                                             ; preds = %8816
  %8818 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %643, ptr noundef nonnull align 8 dereferenceable(32) %650)
          to label %8819 unwind label %8828

8819:                                             ; preds = %8817
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %650) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %651) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %651) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %650) #9
  br label %8909

8820:                                             ; preds = %8812
  %8821 = landingpad { ptr, i32 }
          cleanup
  %8822 = extractvalue { ptr, i32 } %8821, 0
  store ptr %8822, ptr %23, align 8
  %8823 = extractvalue { ptr, i32 } %8821, 1
  store i32 %8823, ptr %24, align 4
  br label %8833

8824:                                             ; preds = %8816
  %8825 = landingpad { ptr, i32 }
          cleanup
  %8826 = extractvalue { ptr, i32 } %8825, 0
  store ptr %8826, ptr %23, align 8
  %8827 = extractvalue { ptr, i32 } %8825, 1
  store i32 %8827, ptr %24, align 4
  br label %8832

8828:                                             ; preds = %8817
  %8829 = landingpad { ptr, i32 }
          cleanup
  %8830 = extractvalue { ptr, i32 } %8829, 0
  store ptr %8830, ptr %23, align 8
  %8831 = extractvalue { ptr, i32 } %8829, 1
  store i32 %8831, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %650) #9
  br label %8832

8832:                                             ; preds = %8828, %8824
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %651) #9
  br label %8833

8833:                                             ; preds = %8832, %8820
  call void @llvm.lifetime.end.p0(i64 32, ptr %651) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %650) #9
  br label %8935

8834:                                             ; preds = %8765, %8765
  call void @llvm.lifetime.start.p0(i64 32, ptr %652) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %653) #9
  %8835 = load ptr, ptr %5, align 8, !tbaa !5
  %8836 = getelementptr inbounds i32, ptr %8835, i64 4
  %8837 = load i32, ptr %8836, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %653, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %8837)
          to label %8838 unwind label %8856

8838:                                             ; preds = %8834
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %652, ptr noundef @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %653)
          to label %8839 unwind label %8860

8839:                                             ; preds = %8838
  %8840 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %643, ptr noundef nonnull align 8 dereferenceable(32) %652)
          to label %8841 unwind label %8864

8841:                                             ; preds = %8839
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %652) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %653) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %653) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %652) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %654) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %655) #9
  %8842 = load ptr, ptr %5, align 8, !tbaa !5
  %8843 = getelementptr inbounds i32, ptr %8842, i64 5
  %8844 = load i32, ptr %8843, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %655, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %8844, i1 noundef zeroext true)
          to label %8845 unwind label %8870

8845:                                             ; preds = %8841
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %654, ptr noundef @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %655)
          to label %8846 unwind label %8874

8846:                                             ; preds = %8845
  %8847 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %643, ptr noundef nonnull align 8 dereferenceable(32) %654)
          to label %8848 unwind label %8878

8848:                                             ; preds = %8846
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %654) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %655) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %655) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %654) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %656) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %657) #9
  %8849 = load ptr, ptr %5, align 8, !tbaa !5
  %8850 = getelementptr inbounds i32, ptr %8849, i64 6
  %8851 = load i32, ptr %8850, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %657, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %8851, i1 noundef zeroext true)
          to label %8852 unwind label %8884

8852:                                             ; preds = %8848
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %656, ptr noundef @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %657)
          to label %8853 unwind label %8888

8853:                                             ; preds = %8852
  %8854 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %643, ptr noundef nonnull align 8 dereferenceable(32) %656)
          to label %8855 unwind label %8892

8855:                                             ; preds = %8853
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %656) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %657) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %657) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %656) #9
  br label %8909

8856:                                             ; preds = %8834
  %8857 = landingpad { ptr, i32 }
          cleanup
  %8858 = extractvalue { ptr, i32 } %8857, 0
  store ptr %8858, ptr %23, align 8
  %8859 = extractvalue { ptr, i32 } %8857, 1
  store i32 %8859, ptr %24, align 4
  br label %8869

8860:                                             ; preds = %8838
  %8861 = landingpad { ptr, i32 }
          cleanup
  %8862 = extractvalue { ptr, i32 } %8861, 0
  store ptr %8862, ptr %23, align 8
  %8863 = extractvalue { ptr, i32 } %8861, 1
  store i32 %8863, ptr %24, align 4
  br label %8868

8864:                                             ; preds = %8839
  %8865 = landingpad { ptr, i32 }
          cleanup
  %8866 = extractvalue { ptr, i32 } %8865, 0
  store ptr %8866, ptr %23, align 8
  %8867 = extractvalue { ptr, i32 } %8865, 1
  store i32 %8867, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %652) #9
  br label %8868

8868:                                             ; preds = %8864, %8860
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %653) #9
  br label %8869

8869:                                             ; preds = %8868, %8856
  call void @llvm.lifetime.end.p0(i64 32, ptr %653) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %652) #9
  br label %8935

8870:                                             ; preds = %8841
  %8871 = landingpad { ptr, i32 }
          cleanup
  %8872 = extractvalue { ptr, i32 } %8871, 0
  store ptr %8872, ptr %23, align 8
  %8873 = extractvalue { ptr, i32 } %8871, 1
  store i32 %8873, ptr %24, align 4
  br label %8883

8874:                                             ; preds = %8845
  %8875 = landingpad { ptr, i32 }
          cleanup
  %8876 = extractvalue { ptr, i32 } %8875, 0
  store ptr %8876, ptr %23, align 8
  %8877 = extractvalue { ptr, i32 } %8875, 1
  store i32 %8877, ptr %24, align 4
  br label %8882

8878:                                             ; preds = %8846
  %8879 = landingpad { ptr, i32 }
          cleanup
  %8880 = extractvalue { ptr, i32 } %8879, 0
  store ptr %8880, ptr %23, align 8
  %8881 = extractvalue { ptr, i32 } %8879, 1
  store i32 %8881, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %654) #9
  br label %8882

8882:                                             ; preds = %8878, %8874
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %655) #9
  br label %8883

8883:                                             ; preds = %8882, %8870
  call void @llvm.lifetime.end.p0(i64 32, ptr %655) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %654) #9
  br label %8935

8884:                                             ; preds = %8848
  %8885 = landingpad { ptr, i32 }
          cleanup
  %8886 = extractvalue { ptr, i32 } %8885, 0
  store ptr %8886, ptr %23, align 8
  %8887 = extractvalue { ptr, i32 } %8885, 1
  store i32 %8887, ptr %24, align 4
  br label %8897

8888:                                             ; preds = %8852
  %8889 = landingpad { ptr, i32 }
          cleanup
  %8890 = extractvalue { ptr, i32 } %8889, 0
  store ptr %8890, ptr %23, align 8
  %8891 = extractvalue { ptr, i32 } %8889, 1
  store i32 %8891, ptr %24, align 4
  br label %8896

8892:                                             ; preds = %8853
  %8893 = landingpad { ptr, i32 }
          cleanup
  %8894 = extractvalue { ptr, i32 } %8893, 0
  store ptr %8894, ptr %23, align 8
  %8895 = extractvalue { ptr, i32 } %8893, 1
  store i32 %8895, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %656) #9
  br label %8896

8896:                                             ; preds = %8892, %8888
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %657) #9
  br label %8897

8897:                                             ; preds = %8896, %8884
  call void @llvm.lifetime.end.p0(i64 32, ptr %657) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %656) #9
  br label %8935

8898:                                             ; preds = %8765
  %8899 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %8899, ptr noundef @.str.1449)
          to label %8900 unwind label %8901

8900:                                             ; preds = %8898
  invoke void @__cxa_throw(ptr %8899, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
          to label %11533 unwind label %8905

8901:                                             ; preds = %8898
  %8902 = landingpad { ptr, i32 }
          cleanup
  %8903 = extractvalue { ptr, i32 } %8902, 0
  store ptr %8903, ptr %23, align 8
  %8904 = extractvalue { ptr, i32 } %8902, 1
  store i32 %8904, ptr %24, align 4
  call void @__cxa_free_exception(ptr %8899) #9
  br label %8935

8905:                                             ; preds = %8928, %8917, %8911, %8909, %8900
  %8906 = landingpad { ptr, i32 }
          cleanup
  %8907 = extractvalue { ptr, i32 } %8906, 0
  store ptr %8907, ptr %23, align 8
  %8908 = extractvalue { ptr, i32 } %8906, 1
  store i32 %8908, ptr %24, align 4
  br label %8935

8909:                                             ; preds = %8855, %8819, %8797
  %8910 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %643, ptr noundef @.str.135)
          to label %8911 unwind label %8905

8911:                                             ; preds = %8909
  %8912 = load i32, ptr %641, align 4, !tbaa !16
  %8913 = load i32, ptr %642, align 4, !tbaa !16
  %8914 = load i8, ptr %644, align 1, !tbaa !142, !range !127, !noundef !128
  %8915 = trunc i8 %8914 to i1
  %8916 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %8912, i32 noundef %8913, ptr noundef nonnull align 8 dereferenceable(32) %643, i1 noundef zeroext %8915, i1 noundef zeroext false)
          to label %8917 unwind label %8905

8917:                                             ; preds = %8911
  %8918 = load i32, ptr %642, align 4, !tbaa !16
  %8919 = load ptr, ptr %5, align 8, !tbaa !5
  %8920 = getelementptr inbounds i32, ptr %8919, i64 3
  %8921 = load i32, ptr %8920, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %8918, i32 noundef %8921)
          to label %8922 unwind label %8905

8922:                                             ; preds = %8917
  %8923 = load i32, ptr %6, align 4, !tbaa !13
  %8924 = icmp eq i32 %8923, 4482
  br i1 %8924, label %8928, label %8925

8925:                                             ; preds = %8922
  %8926 = load i32, ptr %6, align 4, !tbaa !13
  %8927 = icmp eq i32 %8926, 4483
  br i1 %8927, label %8928, label %8934

8928:                                             ; preds = %8925, %8922
  %8929 = load i32, ptr %642, align 4, !tbaa !16
  %8930 = load ptr, ptr %5, align 8, !tbaa !5
  %8931 = getelementptr inbounds i32, ptr %8930, i64 5
  %8932 = load i32, ptr %8931, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %8929, i32 noundef %8932)
          to label %8933 unwind label %8905

8933:                                             ; preds = %8928
  br label %8934

8934:                                             ; preds = %8933, %8925
  call void @llvm.lifetime.end.p0(i64 1, ptr %644) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %643) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %643) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %642) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %641) #9
  br label %11526

8935:                                             ; preds = %8905, %8901, %8897, %8883, %8869, %8833, %8811, %8789, %8775
  call void @llvm.lifetime.end.p0(i64 1, ptr %644) #9
  br label %8936

8936:                                             ; preds = %8935, %8746, %8730
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %643) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %643) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %642) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %641) #9
  br label %11527

8937:                                             ; preds = %919, %919, %919, %919
  call void @llvm.lifetime.start.p0(i64 32, ptr %658) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %659) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %659) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %658, ptr noundef @.str.1450, ptr noundef nonnull align 1 dereferenceable(1) %659)
          to label %8938 unwind label %8947

8938:                                             ; preds = %8937
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %658)
          to label %8939 unwind label %8951

8939:                                             ; preds = %8938
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %658) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %659) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %659) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %658) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %660) #9
  %8940 = load ptr, ptr %5, align 8, !tbaa !5
  %8941 = getelementptr inbounds i32, ptr %8940, i64 0
  %8942 = load i32, ptr %8941, align 4, !tbaa !16
  store i32 %8942, ptr %660, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %661) #9
  %8943 = load ptr, ptr %5, align 8, !tbaa !5
  %8944 = getelementptr inbounds i32, ptr %8943, i64 1
  %8945 = load i32, ptr %8944, align 4, !tbaa !16
  store i32 %8945, ptr %661, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %662) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %662) #9
  %8946 = load i32, ptr %6, align 4, !tbaa !13
  switch i32 %8946, label %8972 [
    i32 4500, label %8956
    i32 4501, label %8963
    i32 4502, label %8966
    i32 4503, label %8969
  ]

8947:                                             ; preds = %8937
  %8948 = landingpad { ptr, i32 }
          cleanup
  %8949 = extractvalue { ptr, i32 } %8948, 0
  store ptr %8949, ptr %23, align 8
  %8950 = extractvalue { ptr, i32 } %8948, 1
  store i32 %8950, ptr %24, align 4
  br label %8955

8951:                                             ; preds = %8938
  %8952 = landingpad { ptr, i32 }
          cleanup
  %8953 = extractvalue { ptr, i32 } %8952, 0
  store ptr %8953, ptr %23, align 8
  %8954 = extractvalue { ptr, i32 } %8952, 1
  store i32 %8954, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %658) #9
  br label %8955

8955:                                             ; preds = %8951, %8947
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %659) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %659) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %658) #9
  br label %11527

8956:                                             ; preds = %8939
  %8957 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %662, ptr noundef @.str.1451)
          to label %8958 unwind label %8959

8958:                                             ; preds = %8956
  br label %8979

8959:                                             ; preds = %8979, %8974, %8969, %8966, %8963, %8956
  %8960 = landingpad { ptr, i32 }
          cleanup
  %8961 = extractvalue { ptr, i32 } %8960, 0
  store ptr %8961, ptr %23, align 8
  %8962 = extractvalue { ptr, i32 } %8960, 1
  store i32 %8962, ptr %24, align 4
  br label %9104

8963:                                             ; preds = %8939
  %8964 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %662, ptr noundef @.str.1452)
          to label %8965 unwind label %8959

8965:                                             ; preds = %8963
  br label %8979

8966:                                             ; preds = %8939
  %8967 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %662, ptr noundef @.str.1453)
          to label %8968 unwind label %8959

8968:                                             ; preds = %8966
  br label %8979

8969:                                             ; preds = %8939
  %8970 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %662, ptr noundef @.str.1454)
          to label %8971 unwind label %8959

8971:                                             ; preds = %8969
  br label %8979

8972:                                             ; preds = %8939
  %8973 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %8973, ptr noundef @.str.1455)
          to label %8974 unwind label %8975

8974:                                             ; preds = %8972
  invoke void @__cxa_throw(ptr %8973, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
          to label %11533 unwind label %8959

8975:                                             ; preds = %8972
  %8976 = landingpad { ptr, i32 }
          cleanup
  %8977 = extractvalue { ptr, i32 } %8976, 0
  store ptr %8977, ptr %23, align 8
  %8978 = extractvalue { ptr, i32 } %8976, 1
  store i32 %8978, ptr %24, align 4
  call void @__cxa_free_exception(ptr %8973) #9
  br label %9104

8979:                                             ; preds = %8971, %8968, %8965, %8958
  %8980 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %662, ptr noundef @.str.718)
          to label %8981 unwind label %8959

8981:                                             ; preds = %8979
  call void @llvm.lifetime.start.p0(i64 1, ptr %663) #9
  store i8 0, ptr %663, align 1, !tbaa !142
  call void @llvm.lifetime.start.p0(i64 32, ptr %664) #9
  %8982 = load ptr, ptr %5, align 8, !tbaa !5
  %8983 = getelementptr inbounds i32, ptr %8982, i64 2
  %8984 = load i32, ptr %8983, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %664, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %8984, i1 noundef zeroext true)
          to label %8985 unwind label %9034

8985:                                             ; preds = %8981
  %8986 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %662, ptr noundef nonnull align 8 dereferenceable(32) %664)
          to label %8987 unwind label %9038

8987:                                             ; preds = %8985
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %664) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %664) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %665) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %666) #9
  %8988 = load ptr, ptr %5, align 8, !tbaa !5
  %8989 = getelementptr inbounds i32, ptr %8988, i64 3
  %8990 = load i32, ptr %8989, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %666, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %8990, i1 noundef zeroext true)
          to label %8991 unwind label %9043

8991:                                             ; preds = %8987
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %665, ptr noundef @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %666)
          to label %8992 unwind label %9047

8992:                                             ; preds = %8991
  %8993 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %662, ptr noundef nonnull align 8 dereferenceable(32) %665)
          to label %8994 unwind label %9051

8994:                                             ; preds = %8992
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %665) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %666) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %666) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %665) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %667) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %668) #9
  %8995 = load ptr, ptr %5, align 8, !tbaa !5
  %8996 = getelementptr inbounds i32, ptr %8995, i64 4
  %8997 = load i32, ptr %8996, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %668, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %8997)
          to label %8998 unwind label %9057

8998:                                             ; preds = %8994
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %667, ptr noundef @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %668)
          to label %8999 unwind label %9061

8999:                                             ; preds = %8998
  %9000 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %662, ptr noundef nonnull align 8 dereferenceable(32) %667)
          to label %9001 unwind label %9065

9001:                                             ; preds = %8999
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %667) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %668) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %668) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %667) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %669) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %670) #9
  %9002 = load ptr, ptr %5, align 8, !tbaa !5
  %9003 = getelementptr inbounds i32, ptr %9002, i64 5
  %9004 = load i32, ptr %9003, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %670, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %9004, i1 noundef zeroext true)
          to label %9005 unwind label %9071

9005:                                             ; preds = %9001
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %669, ptr noundef @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %670)
          to label %9006 unwind label %9075

9006:                                             ; preds = %9005
  %9007 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %662, ptr noundef nonnull align 8 dereferenceable(32) %669)
          to label %9008 unwind label %9079

9008:                                             ; preds = %9006
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %669) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %670) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %670) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %669) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %671) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %672) #9
  %9009 = load ptr, ptr %5, align 8, !tbaa !5
  %9010 = getelementptr inbounds i32, ptr %9009, i64 6
  %9011 = load i32, ptr %9010, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %672, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %9011, i1 noundef zeroext true)
          to label %9012 unwind label %9085

9012:                                             ; preds = %9008
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %671, ptr noundef @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %672)
          to label %9013 unwind label %9089

9013:                                             ; preds = %9012
  %9014 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %662, ptr noundef nonnull align 8 dereferenceable(32) %671)
          to label %9015 unwind label %9093

9015:                                             ; preds = %9013
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %671) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %672) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %672) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %671) #9
  %9016 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %662, ptr noundef @.str.135)
          to label %9017 unwind label %9099

9017:                                             ; preds = %9015
  %9018 = load i32, ptr %660, align 4, !tbaa !16
  %9019 = load i32, ptr %661, align 4, !tbaa !16
  %9020 = load i8, ptr %663, align 1, !tbaa !142, !range !127, !noundef !128
  %9021 = trunc i8 %9020 to i1
  %9022 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %9018, i32 noundef %9019, ptr noundef nonnull align 8 dereferenceable(32) %662, i1 noundef zeroext %9021, i1 noundef zeroext false)
          to label %9023 unwind label %9099

9023:                                             ; preds = %9017
  %9024 = load i32, ptr %661, align 4, !tbaa !16
  %9025 = load ptr, ptr %5, align 8, !tbaa !5
  %9026 = getelementptr inbounds i32, ptr %9025, i64 3
  %9027 = load i32, ptr %9026, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %9024, i32 noundef %9027)
          to label %9028 unwind label %9099

9028:                                             ; preds = %9023
  %9029 = load i32, ptr %661, align 4, !tbaa !16
  %9030 = load ptr, ptr %5, align 8, !tbaa !5
  %9031 = getelementptr inbounds i32, ptr %9030, i64 5
  %9032 = load i32, ptr %9031, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %9029, i32 noundef %9032)
          to label %9033 unwind label %9099

9033:                                             ; preds = %9028
  call void @llvm.lifetime.end.p0(i64 1, ptr %663) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %662) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %662) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %661) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %660) #9
  br label %11526

9034:                                             ; preds = %8981
  %9035 = landingpad { ptr, i32 }
          cleanup
  %9036 = extractvalue { ptr, i32 } %9035, 0
  store ptr %9036, ptr %23, align 8
  %9037 = extractvalue { ptr, i32 } %9035, 1
  store i32 %9037, ptr %24, align 4
  br label %9042

9038:                                             ; preds = %8985
  %9039 = landingpad { ptr, i32 }
          cleanup
  %9040 = extractvalue { ptr, i32 } %9039, 0
  store ptr %9040, ptr %23, align 8
  %9041 = extractvalue { ptr, i32 } %9039, 1
  store i32 %9041, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %664) #9
  br label %9042

9042:                                             ; preds = %9038, %9034
  call void @llvm.lifetime.end.p0(i64 32, ptr %664) #9
  br label %9103

9043:                                             ; preds = %8987
  %9044 = landingpad { ptr, i32 }
          cleanup
  %9045 = extractvalue { ptr, i32 } %9044, 0
  store ptr %9045, ptr %23, align 8
  %9046 = extractvalue { ptr, i32 } %9044, 1
  store i32 %9046, ptr %24, align 4
  br label %9056

9047:                                             ; preds = %8991
  %9048 = landingpad { ptr, i32 }
          cleanup
  %9049 = extractvalue { ptr, i32 } %9048, 0
  store ptr %9049, ptr %23, align 8
  %9050 = extractvalue { ptr, i32 } %9048, 1
  store i32 %9050, ptr %24, align 4
  br label %9055

9051:                                             ; preds = %8992
  %9052 = landingpad { ptr, i32 }
          cleanup
  %9053 = extractvalue { ptr, i32 } %9052, 0
  store ptr %9053, ptr %23, align 8
  %9054 = extractvalue { ptr, i32 } %9052, 1
  store i32 %9054, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %665) #9
  br label %9055

9055:                                             ; preds = %9051, %9047
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %666) #9
  br label %9056

9056:                                             ; preds = %9055, %9043
  call void @llvm.lifetime.end.p0(i64 32, ptr %666) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %665) #9
  br label %9103

9057:                                             ; preds = %8994
  %9058 = landingpad { ptr, i32 }
          cleanup
  %9059 = extractvalue { ptr, i32 } %9058, 0
  store ptr %9059, ptr %23, align 8
  %9060 = extractvalue { ptr, i32 } %9058, 1
  store i32 %9060, ptr %24, align 4
  br label %9070

9061:                                             ; preds = %8998
  %9062 = landingpad { ptr, i32 }
          cleanup
  %9063 = extractvalue { ptr, i32 } %9062, 0
  store ptr %9063, ptr %23, align 8
  %9064 = extractvalue { ptr, i32 } %9062, 1
  store i32 %9064, ptr %24, align 4
  br label %9069

9065:                                             ; preds = %8999
  %9066 = landingpad { ptr, i32 }
          cleanup
  %9067 = extractvalue { ptr, i32 } %9066, 0
  store ptr %9067, ptr %23, align 8
  %9068 = extractvalue { ptr, i32 } %9066, 1
  store i32 %9068, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %667) #9
  br label %9069

9069:                                             ; preds = %9065, %9061
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %668) #9
  br label %9070

9070:                                             ; preds = %9069, %9057
  call void @llvm.lifetime.end.p0(i64 32, ptr %668) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %667) #9
  br label %9103

9071:                                             ; preds = %9001
  %9072 = landingpad { ptr, i32 }
          cleanup
  %9073 = extractvalue { ptr, i32 } %9072, 0
  store ptr %9073, ptr %23, align 8
  %9074 = extractvalue { ptr, i32 } %9072, 1
  store i32 %9074, ptr %24, align 4
  br label %9084

9075:                                             ; preds = %9005
  %9076 = landingpad { ptr, i32 }
          cleanup
  %9077 = extractvalue { ptr, i32 } %9076, 0
  store ptr %9077, ptr %23, align 8
  %9078 = extractvalue { ptr, i32 } %9076, 1
  store i32 %9078, ptr %24, align 4
  br label %9083

9079:                                             ; preds = %9006
  %9080 = landingpad { ptr, i32 }
          cleanup
  %9081 = extractvalue { ptr, i32 } %9080, 0
  store ptr %9081, ptr %23, align 8
  %9082 = extractvalue { ptr, i32 } %9080, 1
  store i32 %9082, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %669) #9
  br label %9083

9083:                                             ; preds = %9079, %9075
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %670) #9
  br label %9084

9084:                                             ; preds = %9083, %9071
  call void @llvm.lifetime.end.p0(i64 32, ptr %670) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %669) #9
  br label %9103

9085:                                             ; preds = %9008
  %9086 = landingpad { ptr, i32 }
          cleanup
  %9087 = extractvalue { ptr, i32 } %9086, 0
  store ptr %9087, ptr %23, align 8
  %9088 = extractvalue { ptr, i32 } %9086, 1
  store i32 %9088, ptr %24, align 4
  br label %9098

9089:                                             ; preds = %9012
  %9090 = landingpad { ptr, i32 }
          cleanup
  %9091 = extractvalue { ptr, i32 } %9090, 0
  store ptr %9091, ptr %23, align 8
  %9092 = extractvalue { ptr, i32 } %9090, 1
  store i32 %9092, ptr %24, align 4
  br label %9097

9093:                                             ; preds = %9013
  %9094 = landingpad { ptr, i32 }
          cleanup
  %9095 = extractvalue { ptr, i32 } %9094, 0
  store ptr %9095, ptr %23, align 8
  %9096 = extractvalue { ptr, i32 } %9094, 1
  store i32 %9096, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %671) #9
  br label %9097

9097:                                             ; preds = %9093, %9089
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %672) #9
  br label %9098

9098:                                             ; preds = %9097, %9085
  call void @llvm.lifetime.end.p0(i64 32, ptr %672) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %671) #9
  br label %9103

9099:                                             ; preds = %9028, %9023, %9017, %9015
  %9100 = landingpad { ptr, i32 }
          cleanup
  %9101 = extractvalue { ptr, i32 } %9100, 0
  store ptr %9101, ptr %23, align 8
  %9102 = extractvalue { ptr, i32 } %9100, 1
  store i32 %9102, ptr %24, align 4
  br label %9103

9103:                                             ; preds = %9099, %9098, %9084, %9070, %9056, %9042
  call void @llvm.lifetime.end.p0(i64 1, ptr %663) #9
  br label %9104

9104:                                             ; preds = %9103, %8975, %8959
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %662) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %662) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %661) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %660) #9
  br label %11527

9105:                                             ; preds = %919, %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %673) #9
  store i32 0, ptr %673, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %674) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %675) #9
  %9106 = load i32, ptr %6, align 4, !tbaa !13
  %9107 = icmp eq i32 %9106, 225
  br i1 %9107, label %9108, label %9117

9108:                                             ; preds = %9105
  %9109 = load ptr, ptr %5, align 8, !tbaa !5
  %9110 = getelementptr inbounds i32, ptr %9109, i64 0
  %9111 = load i32, ptr %9110, align 4, !tbaa !16
  %9112 = call noundef i32 @_ZNK11spirv_cross8Compiler21evaluate_constant_u32Ej(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %9111)
  store i32 %9112, ptr %674, align 4, !tbaa !16
  %9113 = load ptr, ptr %5, align 8, !tbaa !5
  %9114 = getelementptr inbounds i32, ptr %9113, i64 1
  %9115 = load i32, ptr %9114, align 4, !tbaa !16
  %9116 = call noundef i32 @_ZNK11spirv_cross8Compiler21evaluate_constant_u32Ej(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %9115)
  store i32 %9116, ptr %675, align 4, !tbaa !16
  br label %9130

9117:                                             ; preds = %9105
  %9118 = load ptr, ptr %5, align 8, !tbaa !5
  %9119 = getelementptr inbounds i32, ptr %9118, i64 0
  %9120 = load i32, ptr %9119, align 4, !tbaa !16
  %9121 = call noundef i32 @_ZNK11spirv_cross8Compiler21evaluate_constant_u32Ej(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %9120)
  store i32 %9121, ptr %673, align 4, !tbaa !16
  %9122 = load ptr, ptr %5, align 8, !tbaa !5
  %9123 = getelementptr inbounds i32, ptr %9122, i64 1
  %9124 = load i32, ptr %9123, align 4, !tbaa !16
  %9125 = call noundef i32 @_ZNK11spirv_cross8Compiler21evaluate_constant_u32Ej(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %9124)
  store i32 %9125, ptr %674, align 4, !tbaa !16
  %9126 = load ptr, ptr %5, align 8, !tbaa !5
  %9127 = getelementptr inbounds i32, ptr %9126, i64 2
  %9128 = load i32, ptr %9127, align 4, !tbaa !16
  %9129 = call noundef i32 @_ZNK11spirv_cross8Compiler21evaluate_constant_u32Ej(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %9128)
  store i32 %9129, ptr %675, align 4, !tbaa !16
  br label %9130

9130:                                             ; preds = %9117, %9108
  %9131 = load i32, ptr %673, align 4, !tbaa !16
  %9132 = icmp eq i32 %9131, 3
  br i1 %9132, label %9136, label %9133

9133:                                             ; preds = %9130
  %9134 = load i32, ptr %674, align 4, !tbaa !16
  %9135 = icmp eq i32 %9134, 3
  br i1 %9135, label %9136, label %9142

9136:                                             ; preds = %9133, %9130
  %9137 = load i32, ptr %6, align 4, !tbaa !13
  %9138 = icmp ne i32 %9137, 224
  br i1 %9138, label %9139, label %9140

9139:                                             ; preds = %9136
  call void @_ZN11spirv_cross12CompilerGLSL24request_subgroup_featureENS0_27ShaderSubgroupSupportHelper7FeatureE(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef 11)
  br label %9141

9140:                                             ; preds = %9136
  call void @_ZN11spirv_cross12CompilerGLSL24request_subgroup_featureENS0_27ShaderSubgroupSupportHelper7FeatureE(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef 10)
  br label %9141

9141:                                             ; preds = %9140, %9139
  br label %9142

9142:                                             ; preds = %9141, %9133
  %9143 = load i32, ptr %673, align 4, !tbaa !16
  %9144 = icmp ne i32 %9143, 3
  br i1 %9144, label %9145, label %9155

9145:                                             ; preds = %9142
  %9146 = call noundef nonnull align 8 dereferenceable(237) ptr @_ZN11spirv_cross8Compiler15get_entry_pointEv(ptr noundef nonnull align 8 dereferenceable(3176) %885)
  %9147 = getelementptr inbounds %"struct.spirv_cross::SPIREntryPoint", ptr %9146, i32 0, i32 10
  %9148 = load i32, ptr %9147, align 8, !tbaa !224
  %9149 = icmp eq i32 %9148, 1
  br i1 %9149, label %9150, label %9155

9150:                                             ; preds = %9145
  %9151 = load i32, ptr %6, align 4, !tbaa !13
  %9152 = icmp eq i32 %9151, 224
  br i1 %9152, label %9153, label %9154

9153:                                             ; preds = %9150
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA11_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 1 dereferenceable(11) @.str.1456)
  br label %9154

9154:                                             ; preds = %9153, %9150
  store i32 2, ptr %676, align 4
  br label %9355

9155:                                             ; preds = %9145, %9142
  %9156 = load i32, ptr %675, align 4, !tbaa !16
  %9157 = call noundef i32 @_ZN11spirv_cross12CompilerGLSL30mask_relevant_memory_semanticsEj(i32 noundef %9156)
  store i32 %9157, ptr %675, align 4, !tbaa !16
  %9158 = load i32, ptr %6, align 4, !tbaa !13
  %9159 = icmp eq i32 %9158, 225
  br i1 %9159, label %9160, label %9232

9160:                                             ; preds = %9155
  call void @llvm.lifetime.start.p0(i64 8, ptr %677) #9
  %9161 = load ptr, ptr %4, align 8, !tbaa !5
  %9162 = call noundef ptr @_ZN11spirv_cross12CompilerGLSL29get_next_instruction_in_blockERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 4 dereferenceable(12) %9161)
  store ptr %9162, ptr %677, align 8, !tbaa !5
  %9163 = load ptr, ptr %677, align 8, !tbaa !5
  %9164 = icmp ne ptr %9163, null
  br i1 %9164, label %9165, label %9228

9165:                                             ; preds = %9160
  %9166 = load ptr, ptr %677, align 8, !tbaa !5
  %9167 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %9166, i32 0, i32 0
  %9168 = load i16, ptr %9167, align 4, !tbaa !9
  %9169 = zext i16 %9168 to i32
  %9170 = icmp eq i32 %9169, 224
  br i1 %9170, label %9171, label %9228

9171:                                             ; preds = %9165
  call void @llvm.lifetime.start.p0(i64 8, ptr %678) #9
  %9172 = load ptr, ptr %677, align 8, !tbaa !5
  %9173 = call noundef ptr @_ZNK11spirv_cross8Compiler6streamERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(3176) %885, ptr noundef nonnull align 4 dereferenceable(12) %9172)
  store ptr %9173, ptr %678, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %679) #9
  %9174 = load ptr, ptr %678, align 8, !tbaa !5
  %9175 = getelementptr inbounds i32, ptr %9174, i64 1
  %9176 = load i32, ptr %9175, align 4, !tbaa !16
  %9177 = call noundef i32 @_ZNK11spirv_cross8Compiler21evaluate_constant_u32Ej(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %9176)
  store i32 %9177, ptr %679, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %680) #9
  %9178 = load ptr, ptr %678, align 8, !tbaa !5
  %9179 = getelementptr inbounds i32, ptr %9178, i64 2
  %9180 = load i32, ptr %9179, align 4, !tbaa !16
  %9181 = call noundef i32 @_ZNK11spirv_cross8Compiler21evaluate_constant_u32Ej(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %9180)
  store i32 %9181, ptr %680, align 4, !tbaa !16
  %9182 = load i32, ptr %680, align 4, !tbaa !16
  %9183 = call noundef i32 @_ZN11spirv_cross12CompilerGLSL30mask_relevant_memory_semanticsEj(i32 noundef %9182)
  store i32 %9183, ptr %680, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 1, ptr %681) #9
  store i8 0, ptr %681, align 1, !tbaa !142
  %9184 = load i32, ptr %679, align 4, !tbaa !16
  %9185 = load i32, ptr %674, align 4, !tbaa !16
  %9186 = icmp eq i32 %9184, %9185
  br i1 %9186, label %9187, label %9188

9187:                                             ; preds = %9171
  store i8 1, ptr %681, align 1, !tbaa !142
  br label %9214

9188:                                             ; preds = %9171
  %9189 = load i32, ptr %680, align 4, !tbaa !16
  %9190 = icmp eq i32 %9189, 256
  br i1 %9190, label %9191, label %9205

9191:                                             ; preds = %9188
  %9192 = load i32, ptr %679, align 4, !tbaa !16
  %9193 = icmp eq i32 %9192, 1
  br i1 %9193, label %9197, label %9194

9194:                                             ; preds = %9191
  %9195 = load i32, ptr %679, align 4, !tbaa !16
  %9196 = icmp eq i32 %9195, 2
  br i1 %9196, label %9197, label %9204

9197:                                             ; preds = %9194, %9191
  %9198 = load i32, ptr %674, align 4, !tbaa !16
  %9199 = icmp eq i32 %9198, 1
  br i1 %9199, label %9203, label %9200

9200:                                             ; preds = %9197
  %9201 = load i32, ptr %674, align 4, !tbaa !16
  %9202 = icmp eq i32 %9201, 2
  br i1 %9202, label %9203, label %9204

9203:                                             ; preds = %9200, %9197
  store i8 1, ptr %681, align 1, !tbaa !142
  br label %9204

9204:                                             ; preds = %9203, %9200, %9194
  br label %9213

9205:                                             ; preds = %9188
  %9206 = load i32, ptr %674, align 4, !tbaa !16
  %9207 = icmp eq i32 %9206, 2
  br i1 %9207, label %9208, label %9212

9208:                                             ; preds = %9205
  %9209 = load i32, ptr %679, align 4, !tbaa !16
  %9210 = icmp eq i32 %9209, 1
  br i1 %9210, label %9211, label %9212

9211:                                             ; preds = %9208
  store i8 1, ptr %681, align 1, !tbaa !142
  br label %9212

9212:                                             ; preds = %9211, %9208, %9205
  br label %9213

9213:                                             ; preds = %9212, %9204
  br label %9214

9214:                                             ; preds = %9213, %9187
  %9215 = load i8, ptr %681, align 1, !tbaa !142, !range !127, !noundef !128
  %9216 = trunc i8 %9215 to i1
  br i1 %9216, label %9217, label %9224

9217:                                             ; preds = %9214
  %9218 = load i32, ptr %675, align 4, !tbaa !16
  %9219 = load i32, ptr %680, align 4, !tbaa !16
  %9220 = and i32 %9218, %9219
  %9221 = load i32, ptr %675, align 4, !tbaa !16
  %9222 = icmp eq i32 %9220, %9221
  br i1 %9222, label %9223, label %9224

9223:                                             ; preds = %9217
  store i32 2, ptr %676, align 4
  br label %9225

9224:                                             ; preds = %9217, %9214
  store i32 0, ptr %676, align 4
  br label %9225

9225:                                             ; preds = %9224, %9223
  call void @llvm.lifetime.end.p0(i64 1, ptr %681) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %680) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %679) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %678) #9
  %9226 = load i32, ptr %676, align 4
  switch i32 %9226, label %9229 [
    i32 0, label %9227
  ]

9227:                                             ; preds = %9225
  br label %9228

9228:                                             ; preds = %9227, %9165, %9160
  store i32 0, ptr %676, align 4
  br label %9229

9229:                                             ; preds = %9228, %9225
  call void @llvm.lifetime.end.p0(i64 8, ptr %677) #9
  %9230 = load i32, ptr %676, align 4
  switch i32 %9230, label %9355 [
    i32 0, label %9231
  ]

9231:                                             ; preds = %9229
  br label %9232

9232:                                             ; preds = %9231, %9155
  %9233 = load i32, ptr %675, align 4, !tbaa !16
  %9234 = icmp ne i32 %9233, 0
  br i1 %9234, label %9238, label %9235

9235:                                             ; preds = %9232
  %9236 = load i32, ptr %6, align 4, !tbaa !13
  %9237 = icmp eq i32 %9236, 224
  br i1 %9237, label %9238, label %9250

9238:                                             ; preds = %9235, %9232
  %9239 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 1
  %9240 = load ptr, ptr %9239, align 8, !tbaa !231
  %9241 = icmp ne ptr %9240, null
  br i1 %9241, label %9242, label %9243

9242:                                             ; preds = %9238
  br label %9245

9243:                                             ; preds = %9238
  call void @__assert_fail(ptr noundef @.str.1383, ptr noundef @.str.11, i32 noundef 14638, ptr noundef @__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE) #10
  unreachable

9244:                                             ; No predecessors!
  br label %9245

9245:                                             ; preds = %9244, %9242
  %9246 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 1
  %9247 = load ptr, ptr %9246, align 8, !tbaa !231
  %9248 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %9247, i32 0, i32 1
  %9249 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %9248)
  call void @_ZN11spirv_cross8Compiler35flush_control_dependent_expressionsEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %9249)
  call void @_ZN11spirv_cross8Compiler26flush_all_active_variablesEv(ptr noundef nonnull align 8 dereferenceable(3176) %885)
  br label %9250

9250:                                             ; preds = %9245, %9235
  %9251 = load i32, ptr %674, align 4, !tbaa !16
  %9252 = icmp eq i32 %9251, 2
  br i1 %9252, label %9253, label %9275

9253:                                             ; preds = %9250
  %9254 = load i32, ptr %675, align 4, !tbaa !16
  %9255 = icmp eq i32 %9254, 256
  br i1 %9255, label %9256, label %9269

9256:                                             ; preds = %9253
  call void @llvm.lifetime.start.p0(i64 1, ptr %682) #9
  %9257 = load i32, ptr %6, align 4, !tbaa !13
  %9258 = icmp eq i32 %9257, 224
  br i1 %9258, label %9259, label %9262

9259:                                             ; preds = %9256
  %9260 = load i32, ptr %673, align 4, !tbaa !16
  %9261 = icmp eq i32 %9260, 2
  br label %9262

9262:                                             ; preds = %9259, %9256
  %9263 = phi i1 [ false, %9256 ], [ %9261, %9259 ]
  %9264 = zext i1 %9263 to i8
  store i8 %9264, ptr %682, align 1, !tbaa !142
  %9265 = load i8, ptr %682, align 1, !tbaa !142, !range !127, !noundef !128
  %9266 = trunc i8 %9265 to i1
  br i1 %9266, label %9268, label %9267

9267:                                             ; preds = %9262
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA23_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 1 dereferenceable(23) @.str.1457)
  br label %9268

9268:                                             ; preds = %9267, %9262
  call void @llvm.lifetime.end.p0(i64 1, ptr %682) #9
  br label %9274

9269:                                             ; preds = %9253
  %9270 = load i32, ptr %675, align 4, !tbaa !16
  %9271 = icmp ne i32 %9270, 0
  br i1 %9271, label %9272, label %9273

9272:                                             ; preds = %9269
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA22_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 1 dereferenceable(22) @.str.1458)
  br label %9273

9273:                                             ; preds = %9272, %9269
  br label %9274

9274:                                             ; preds = %9273, %9268
  br label %9345

9275:                                             ; preds = %9250
  %9276 = load i32, ptr %674, align 4, !tbaa !16
  %9277 = icmp eq i32 %9276, 3
  br i1 %9277, label %9278, label %9311

9278:                                             ; preds = %9275
  call void @llvm.lifetime.start.p0(i64 4, ptr %683) #9
  %9279 = call noundef i32 @_ZN3spvorENS_19MemorySemanticsMaskES0_(i32 noundef 256, i32 noundef 64)
  %9280 = call noundef i32 @_ZN3spvorENS_19MemorySemanticsMaskES0_(i32 noundef %9279, i32 noundef 2048)
  store i32 %9280, ptr %683, align 4, !tbaa !16
  %9281 = load i32, ptr %675, align 4, !tbaa !16
  %9282 = call noundef i32 @_ZN3spvorENS_19MemorySemanticsMaskES0_(i32 noundef 512, i32 noundef 128)
  %9283 = and i32 %9281, %9282
  %9284 = icmp ne i32 %9283, 0
  br i1 %9284, label %9285, label %9286

9285:                                             ; preds = %9278
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA25_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 1 dereferenceable(25) @.str.1459)
  br label %9310

9286:                                             ; preds = %9278
  %9287 = load i32, ptr %675, align 4, !tbaa !16
  %9288 = load i32, ptr %683, align 4, !tbaa !16
  %9289 = and i32 %9287, %9288
  %9290 = load i32, ptr %683, align 4, !tbaa !16
  %9291 = icmp eq i32 %9289, %9290
  br i1 %9291, label %9292, label %9293

9292:                                             ; preds = %9286
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA25_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 1 dereferenceable(25) @.str.1459)
  br label %9309

9293:                                             ; preds = %9286
  %9294 = load i32, ptr %675, align 4, !tbaa !16
  %9295 = and i32 %9294, 256
  %9296 = icmp ne i32 %9295, 0
  br i1 %9296, label %9297, label %9298

9297:                                             ; preds = %9293
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA31_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 1 dereferenceable(31) @.str.1460)
  br label %9298

9298:                                             ; preds = %9297, %9293
  %9299 = load i32, ptr %675, align 4, !tbaa !16
  %9300 = and i32 %9299, 64
  %9301 = icmp ne i32 %9300, 0
  br i1 %9301, label %9302, label %9303

9302:                                             ; preds = %9298
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA31_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 1 dereferenceable(31) @.str.1461)
  br label %9303

9303:                                             ; preds = %9302, %9298
  %9304 = load i32, ptr %675, align 4, !tbaa !16
  %9305 = and i32 %9304, 2048
  %9306 = icmp ne i32 %9305, 0
  br i1 %9306, label %9307, label %9308

9307:                                             ; preds = %9303
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA30_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 1 dereferenceable(30) @.str.1462)
  br label %9308

9308:                                             ; preds = %9307, %9303
  br label %9309

9309:                                             ; preds = %9308, %9292
  br label %9310

9310:                                             ; preds = %9309, %9285
  call void @llvm.lifetime.end.p0(i64 4, ptr %683) #9
  br label %9344

9311:                                             ; preds = %9275
  call void @llvm.lifetime.start.p0(i64 4, ptr %684) #9
  %9312 = call noundef i32 @_ZN3spvorENS_19MemorySemanticsMaskES0_(i32 noundef 256, i32 noundef 64)
  %9313 = call noundef i32 @_ZN3spvorENS_19MemorySemanticsMaskES0_(i32 noundef %9312, i32 noundef 2048)
  store i32 %9313, ptr %684, align 4, !tbaa !16
  %9314 = load i32, ptr %675, align 4, !tbaa !16
  %9315 = call noundef i32 @_ZN3spvorENS_19MemorySemanticsMaskES0_(i32 noundef 512, i32 noundef 128)
  %9316 = and i32 %9314, %9315
  %9317 = icmp ne i32 %9316, 0
  br i1 %9317, label %9318, label %9319

9318:                                             ; preds = %9311
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA17_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 1 dereferenceable(17) @.str.1463)
  br label %9343

9319:                                             ; preds = %9311
  %9320 = load i32, ptr %675, align 4, !tbaa !16
  %9321 = load i32, ptr %684, align 4, !tbaa !16
  %9322 = and i32 %9320, %9321
  %9323 = load i32, ptr %684, align 4, !tbaa !16
  %9324 = icmp eq i32 %9322, %9323
  br i1 %9324, label %9325, label %9326

9325:                                             ; preds = %9319
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA17_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 1 dereferenceable(17) @.str.1463)
  br label %9342

9326:                                             ; preds = %9319
  %9327 = load i32, ptr %675, align 4, !tbaa !16
  %9328 = and i32 %9327, 256
  %9329 = icmp ne i32 %9328, 0
  br i1 %9329, label %9330, label %9331

9330:                                             ; preds = %9326
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA23_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 1 dereferenceable(23) @.str.1457)
  br label %9331

9331:                                             ; preds = %9330, %9326
  %9332 = load i32, ptr %675, align 4, !tbaa !16
  %9333 = and i32 %9332, 64
  %9334 = icmp ne i32 %9333, 0
  br i1 %9334, label %9335, label %9336

9335:                                             ; preds = %9331
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA23_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 1 dereferenceable(23) @.str.1464)
  br label %9336

9336:                                             ; preds = %9335, %9331
  %9337 = load i32, ptr %675, align 4, !tbaa !16
  %9338 = and i32 %9337, 2048
  %9339 = icmp ne i32 %9338, 0
  br i1 %9339, label %9340, label %9341

9340:                                             ; preds = %9336
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA22_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 1 dereferenceable(22) @.str.1465)
  br label %9341

9341:                                             ; preds = %9340, %9336
  br label %9342

9342:                                             ; preds = %9341, %9325
  br label %9343

9343:                                             ; preds = %9342, %9318
  call void @llvm.lifetime.end.p0(i64 4, ptr %684) #9
  br label %9344

9344:                                             ; preds = %9343, %9310
  br label %9345

9345:                                             ; preds = %9344, %9274
  %9346 = load i32, ptr %6, align 4, !tbaa !13
  %9347 = icmp eq i32 %9346, 224
  br i1 %9347, label %9348, label %9354

9348:                                             ; preds = %9345
  %9349 = load i32, ptr %673, align 4, !tbaa !16
  %9350 = icmp eq i32 %9349, 3
  br i1 %9350, label %9351, label %9352

9351:                                             ; preds = %9348
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA19_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 1 dereferenceable(19) @.str.1466)
  br label %9353

9352:                                             ; preds = %9348
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA11_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 1 dereferenceable(11) @.str.1456)
  br label %9353

9353:                                             ; preds = %9352, %9351
  br label %9354

9354:                                             ; preds = %9353, %9345
  store i32 2, ptr %676, align 4
  br label %9355

9355:                                             ; preds = %9354, %9229, %9154
  call void @llvm.lifetime.end.p0(i64 4, ptr %675) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %674) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %673) #9
  br label %11526

9356:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %685) #9
  %9357 = load ptr, ptr %5, align 8, !tbaa !5
  %9358 = getelementptr inbounds i32, ptr %9357, i64 2
  %9359 = load i32, ptr %9358, align 4, !tbaa !16
  store i32 %9359, ptr %685, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %686) #9
  %9360 = load i32, ptr %685, align 4, !tbaa !16
  %9361 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN11spirv_cross8Compiler3getINS_13SPIRExtensionEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %9360)
  %9362 = getelementptr inbounds %"struct.spirv_cross::SPIRExtension", ptr %9361, i32 0, i32 1
  %9363 = load i32, ptr %9362, align 4, !tbaa !232
  store i32 %9363, ptr %686, align 4, !tbaa !235
  %9364 = load i32, ptr %686, align 4, !tbaa !235
  %9365 = icmp eq i32 %9364, 1
  br i1 %9365, label %9366, label %9383

9366:                                             ; preds = %9356
  %9367 = load ptr, ptr %5, align 8, !tbaa !5
  %9368 = getelementptr inbounds i32, ptr %9367, i64 0
  %9369 = load i32, ptr %9368, align 4, !tbaa !16
  %9370 = load ptr, ptr %5, align 8, !tbaa !5
  %9371 = getelementptr inbounds i32, ptr %9370, i64 1
  %9372 = load i32, ptr %9371, align 4, !tbaa !16
  %9373 = load ptr, ptr %5, align 8, !tbaa !5
  %9374 = getelementptr inbounds i32, ptr %9373, i64 3
  %9375 = load i32, ptr %9374, align 4, !tbaa !16
  %9376 = load ptr, ptr %5, align 8, !tbaa !5
  %9377 = getelementptr inbounds i32, ptr %9376, i64 4
  %9378 = load i32, ptr %7, align 4, !tbaa !16
  %9379 = sub i32 %9378, 4
  %9380 = load ptr, ptr %885, align 8, !tbaa !145
  %9381 = getelementptr inbounds ptr, ptr %9380, i64 9
  %9382 = load ptr, ptr %9381, align 8
  call void %9382(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %9369, i32 noundef %9372, i32 noundef %9375, ptr noundef %9377, i32 noundef %9379)
  br label %9561

9383:                                             ; preds = %9356
  %9384 = load i32, ptr %686, align 4, !tbaa !235
  %9385 = icmp eq i32 %9384, 3
  br i1 %9385, label %9386, label %9403

9386:                                             ; preds = %9383
  %9387 = load ptr, ptr %5, align 8, !tbaa !5
  %9388 = getelementptr inbounds i32, ptr %9387, i64 0
  %9389 = load i32, ptr %9388, align 4, !tbaa !16
  %9390 = load ptr, ptr %5, align 8, !tbaa !5
  %9391 = getelementptr inbounds i32, ptr %9390, i64 1
  %9392 = load i32, ptr %9391, align 4, !tbaa !16
  %9393 = load ptr, ptr %5, align 8, !tbaa !5
  %9394 = getelementptr inbounds i32, ptr %9393, i64 3
  %9395 = load i32, ptr %9394, align 4, !tbaa !16
  %9396 = load ptr, ptr %5, align 8, !tbaa !5
  %9397 = getelementptr inbounds i32, ptr %9396, i64 4
  %9398 = load i32, ptr %7, align 4, !tbaa !16
  %9399 = sub i32 %9398, 4
  %9400 = load ptr, ptr %885, align 8, !tbaa !145
  %9401 = getelementptr inbounds ptr, ptr %9400, i64 10
  %9402 = load ptr, ptr %9401, align 8
  call void %9402(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %9389, i32 noundef %9392, i32 noundef %9395, ptr noundef %9397, i32 noundef %9399)
  br label %9560

9403:                                             ; preds = %9383
  %9404 = load i32, ptr %686, align 4, !tbaa !235
  %9405 = icmp eq i32 %9404, 4
  br i1 %9405, label %9406, label %9423

9406:                                             ; preds = %9403
  %9407 = load ptr, ptr %5, align 8, !tbaa !5
  %9408 = getelementptr inbounds i32, ptr %9407, i64 0
  %9409 = load i32, ptr %9408, align 4, !tbaa !16
  %9410 = load ptr, ptr %5, align 8, !tbaa !5
  %9411 = getelementptr inbounds i32, ptr %9410, i64 1
  %9412 = load i32, ptr %9411, align 4, !tbaa !16
  %9413 = load ptr, ptr %5, align 8, !tbaa !5
  %9414 = getelementptr inbounds i32, ptr %9413, i64 3
  %9415 = load i32, ptr %9414, align 4, !tbaa !16
  %9416 = load ptr, ptr %5, align 8, !tbaa !5
  %9417 = getelementptr inbounds i32, ptr %9416, i64 4
  %9418 = load i32, ptr %7, align 4, !tbaa !16
  %9419 = sub i32 %9418, 4
  %9420 = load ptr, ptr %885, align 8, !tbaa !145
  %9421 = getelementptr inbounds ptr, ptr %9420, i64 11
  %9422 = load ptr, ptr %9421, align 8
  call void %9422(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %9409, i32 noundef %9412, i32 noundef %9415, ptr noundef %9417, i32 noundef %9419)
  br label %9559

9423:                                             ; preds = %9403
  %9424 = load i32, ptr %686, align 4, !tbaa !235
  %9425 = icmp eq i32 %9424, 5
  br i1 %9425, label %9426, label %9443

9426:                                             ; preds = %9423
  %9427 = load ptr, ptr %5, align 8, !tbaa !5
  %9428 = getelementptr inbounds i32, ptr %9427, i64 0
  %9429 = load i32, ptr %9428, align 4, !tbaa !16
  %9430 = load ptr, ptr %5, align 8, !tbaa !5
  %9431 = getelementptr inbounds i32, ptr %9430, i64 1
  %9432 = load i32, ptr %9431, align 4, !tbaa !16
  %9433 = load ptr, ptr %5, align 8, !tbaa !5
  %9434 = getelementptr inbounds i32, ptr %9433, i64 3
  %9435 = load i32, ptr %9434, align 4, !tbaa !16
  %9436 = load ptr, ptr %5, align 8, !tbaa !5
  %9437 = getelementptr inbounds i32, ptr %9436, i64 4
  %9438 = load i32, ptr %7, align 4, !tbaa !16
  %9439 = sub i32 %9438, 4
  %9440 = load ptr, ptr %885, align 8, !tbaa !145
  %9441 = getelementptr inbounds ptr, ptr %9440, i64 12
  %9442 = load ptr, ptr %9441, align 8
  call void %9442(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %9429, i32 noundef %9432, i32 noundef %9435, ptr noundef %9437, i32 noundef %9439)
  br label %9558

9443:                                             ; preds = %9423
  %9444 = load i32, ptr %686, align 4, !tbaa !235
  %9445 = icmp eq i32 %9444, 6
  br i1 %9445, label %9446, label %9463

9446:                                             ; preds = %9443
  %9447 = load ptr, ptr %5, align 8, !tbaa !5
  %9448 = getelementptr inbounds i32, ptr %9447, i64 0
  %9449 = load i32, ptr %9448, align 4, !tbaa !16
  %9450 = load ptr, ptr %5, align 8, !tbaa !5
  %9451 = getelementptr inbounds i32, ptr %9450, i64 1
  %9452 = load i32, ptr %9451, align 4, !tbaa !16
  %9453 = load ptr, ptr %5, align 8, !tbaa !5
  %9454 = getelementptr inbounds i32, ptr %9453, i64 3
  %9455 = load i32, ptr %9454, align 4, !tbaa !16
  %9456 = load ptr, ptr %5, align 8, !tbaa !5
  %9457 = getelementptr inbounds i32, ptr %9456, i64 4
  %9458 = load i32, ptr %7, align 4, !tbaa !16
  %9459 = sub i32 %9458, 4
  %9460 = load ptr, ptr %885, align 8, !tbaa !145
  %9461 = getelementptr inbounds ptr, ptr %9460, i64 13
  %9462 = load ptr, ptr %9461, align 8
  call void %9462(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %9449, i32 noundef %9452, i32 noundef %9455, ptr noundef %9457, i32 noundef %9459)
  br label %9557

9463:                                             ; preds = %9443
  %9464 = load i32, ptr %686, align 4, !tbaa !235
  %9465 = icmp eq i32 %9464, 2
  br i1 %9465, label %9472, label %9466

9466:                                             ; preds = %9463
  %9467 = load i32, ptr %686, align 4, !tbaa !235
  %9468 = icmp eq i32 %9467, 8
  br i1 %9468, label %9472, label %9469

9469:                                             ; preds = %9466
  %9470 = load i32, ptr %686, align 4, !tbaa !235
  %9471 = icmp eq i32 %9470, 9
  br i1 %9471, label %9472, label %9473

9472:                                             ; preds = %9469, %9466, %9463
  store i32 2, ptr %676, align 4
  br label %9562

9473:                                             ; preds = %9469
  %9474 = load i32, ptr %686, align 4, !tbaa !235
  %9475 = icmp eq i32 %9474, 7
  br i1 %9475, label %9476, label %9552

9476:                                             ; preds = %9473
  %9477 = load ptr, ptr %5, align 8, !tbaa !5
  %9478 = getelementptr inbounds i32, ptr %9477, i64 3
  %9479 = load i32, ptr %9478, align 4, !tbaa !16
  %9480 = icmp eq i32 %9479, 1
  br i1 %9480, label %9481, label %9551

9481:                                             ; preds = %9476
  %9482 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %9483 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %9482, i32 0, i32 4
  %9484 = load i8, ptr %9483, align 4, !tbaa !223, !range !127, !noundef !128
  %9485 = trunc i8 %9484 to i1
  br i1 %9485, label %9493, label %9486

9486:                                             ; preds = %9481
  %9487 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %9487, ptr noundef @.str.1467)
          to label %9488 unwind label %9489

9488:                                             ; preds = %9486
  call void @__cxa_throw(ptr %9487, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
  unreachable

9489:                                             ; preds = %9486
  %9490 = landingpad { ptr, i32 }
          cleanup
  %9491 = extractvalue { ptr, i32 } %9490, 0
  store ptr %9491, ptr %23, align 8
  %9492 = extractvalue { ptr, i32 } %9490, 1
  store i32 %9492, ptr %24, align 4
  call void @__cxa_free_exception(ptr %9487) #9
  br label %9563

9493:                                             ; preds = %9481
  call void @llvm.lifetime.start.p0(i64 32, ptr %687) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %688) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %688) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %687, ptr noundef @.str.1468, ptr noundef nonnull align 1 dereferenceable(1) %688)
          to label %9494 unwind label %9507

9494:                                             ; preds = %9493
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %687)
          to label %9495 unwind label %9511

9495:                                             ; preds = %9494
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %687) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %688) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %688) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %687) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %689) #9
  %9496 = load ptr, ptr %5, align 8, !tbaa !5
  %9497 = getelementptr inbounds i32, ptr %9496, i64 4
  %9498 = load i32, ptr %9497, align 4, !tbaa !16
  %9499 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZN11spirv_cross8Compiler3getINS_10SPIRStringEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %9498)
  %9500 = getelementptr inbounds %"struct.spirv_cross::SPIRString", ptr %9499, i32 0, i32 1
  store ptr %9500, ptr %689, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %690) #9
  %9501 = load ptr, ptr %689, align 8, !tbaa !5
  call void @_ZN11spirv_cross4joinIJRA17_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %690, ptr noundef nonnull align 1 dereferenceable(17) @.str.1469, ptr noundef nonnull align 8 dereferenceable(32) %9501, ptr noundef nonnull align 1 dereferenceable(2) @.str.1470)
  call void @llvm.lifetime.start.p0(i64 4, ptr %691) #9
  store i32 5, ptr %691, align 4, !tbaa !16
  br label %9502

9502:                                             ; preds = %9527, %9495
  %9503 = load i32, ptr %691, align 4, !tbaa !16
  %9504 = load i32, ptr %7, align 4, !tbaa !16
  %9505 = icmp ult i32 %9503, %9504
  br i1 %9505, label %9516, label %9506

9506:                                             ; preds = %9502
  store i32 45, ptr %676, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %691) #9
  br label %9544

9507:                                             ; preds = %9493
  %9508 = landingpad { ptr, i32 }
          cleanup
  %9509 = extractvalue { ptr, i32 } %9508, 0
  store ptr %9509, ptr %23, align 8
  %9510 = extractvalue { ptr, i32 } %9508, 1
  store i32 %9510, ptr %24, align 4
  br label %9515

9511:                                             ; preds = %9494
  %9512 = landingpad { ptr, i32 }
          cleanup
  %9513 = extractvalue { ptr, i32 } %9512, 0
  store ptr %9513, ptr %23, align 8
  %9514 = extractvalue { ptr, i32 } %9512, 1
  store i32 %9514, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %687) #9
  br label %9515

9515:                                             ; preds = %9511, %9507
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %688) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %688) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %687) #9
  br label %9563

9516:                                             ; preds = %9502
  %9517 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %690, ptr noundef @.str.177)
          to label %9518 unwind label %9530

9518:                                             ; preds = %9516
  call void @llvm.lifetime.start.p0(i64 32, ptr %692) #9
  %9519 = load ptr, ptr %5, align 8, !tbaa !5
  %9520 = load i32, ptr %691, align 4, !tbaa !16
  %9521 = zext i32 %9520 to i64
  %9522 = getelementptr inbounds i32, ptr %9519, i64 %9521
  %9523 = load i32, ptr %9522, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %692, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %9523, i1 noundef zeroext true)
          to label %9524 unwind label %9534

9524:                                             ; preds = %9518
  %9525 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %690, ptr noundef nonnull align 8 dereferenceable(32) %692)
          to label %9526 unwind label %9538

9526:                                             ; preds = %9524
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %692) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %692) #9
  br label %9527

9527:                                             ; preds = %9526
  %9528 = load i32, ptr %691, align 4, !tbaa !16
  %9529 = add i32 %9528, 1
  store i32 %9529, ptr %691, align 4, !tbaa !16
  br label %9502, !llvm.loop !236

9530:                                             ; preds = %9516
  %9531 = landingpad { ptr, i32 }
          cleanup
  %9532 = extractvalue { ptr, i32 } %9531, 0
  store ptr %9532, ptr %23, align 8
  %9533 = extractvalue { ptr, i32 } %9531, 1
  store i32 %9533, ptr %24, align 4
  br label %9543

9534:                                             ; preds = %9518
  %9535 = landingpad { ptr, i32 }
          cleanup
  %9536 = extractvalue { ptr, i32 } %9535, 0
  store ptr %9536, ptr %23, align 8
  %9537 = extractvalue { ptr, i32 } %9535, 1
  store i32 %9537, ptr %24, align 4
  br label %9542

9538:                                             ; preds = %9524
  %9539 = landingpad { ptr, i32 }
          cleanup
  %9540 = extractvalue { ptr, i32 } %9539, 0
  store ptr %9540, ptr %23, align 8
  %9541 = extractvalue { ptr, i32 } %9539, 1
  store i32 %9541, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %692) #9
  br label %9542

9542:                                             ; preds = %9538, %9534
  call void @llvm.lifetime.end.p0(i64 32, ptr %692) #9
  br label %9543

9543:                                             ; preds = %9542, %9530
  call void @llvm.lifetime.end.p0(i64 4, ptr %691) #9
  br label %9550

9544:                                             ; preds = %9506
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %690, ptr noundef nonnull align 1 dereferenceable(3) @.str.751)
          to label %9545 unwind label %9546

9545:                                             ; preds = %9544
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %690) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %690) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %689) #9
  br label %9551

9546:                                             ; preds = %9544
  %9547 = landingpad { ptr, i32 }
          cleanup
  %9548 = extractvalue { ptr, i32 } %9547, 0
  store ptr %9548, ptr %23, align 8
  %9549 = extractvalue { ptr, i32 } %9547, 1
  store i32 %9549, ptr %24, align 4
  br label %9550

9550:                                             ; preds = %9546, %9543
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %690) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %690) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %689) #9
  br label %9563

9551:                                             ; preds = %9545, %9476
  br label %9555

9552:                                             ; preds = %9473
  %9553 = load ptr, ptr %4, align 8, !tbaa !5
  %9554 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %9553, i32 0, i32 0
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA25_KcRKtEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 1 dereferenceable(25) @.str.1471, ptr noundef nonnull align 2 dereferenceable(2) %9554)
  store i32 2, ptr %676, align 4
  br label %9562

9555:                                             ; preds = %9551
  br label %9556

9556:                                             ; preds = %9555
  br label %9557

9557:                                             ; preds = %9556, %9446
  br label %9558

9558:                                             ; preds = %9557, %9426
  br label %9559

9559:                                             ; preds = %9558, %9406
  br label %9560

9560:                                             ; preds = %9559, %9386
  br label %9561

9561:                                             ; preds = %9560, %9366
  store i32 2, ptr %676, align 4
  br label %9562

9562:                                             ; preds = %9561, %9552, %9472
  call void @llvm.lifetime.end.p0(i64 4, ptr %686) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %685) #9
  br label %11526

9563:                                             ; preds = %9550, %9515, %9489
  call void @llvm.lifetime.end.p0(i64 4, ptr %686) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %685) #9
  br label %11527

9564:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %693) #9
  %9565 = load ptr, ptr %5, align 8, !tbaa !5
  %9566 = getelementptr inbounds i32, ptr %9565, i64 0
  %9567 = load i32, ptr %9566, align 4, !tbaa !16
  store i32 %9567, ptr %693, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %694) #9
  %9568 = load ptr, ptr %5, align 8, !tbaa !5
  %9569 = getelementptr inbounds i32, ptr %9568, i64 1
  %9570 = load i32, ptr %9569, align 4, !tbaa !16
  store i32 %9570, ptr %694, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %695) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %695) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %696) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %697) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %698) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %699) #9
  %9571 = load ptr, ptr %5, align 8, !tbaa !5
  %9572 = getelementptr inbounds i32, ptr %9571, i64 2
  %9573 = load i32, ptr %9572, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %699, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %9573, i1 noundef zeroext true)
          to label %9574 unwind label %9599

9574:                                             ; preds = %9564
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %698, ptr noundef @.str.1472, ptr noundef nonnull align 8 dereferenceable(32) %699)
          to label %9575 unwind label %9603

9575:                                             ; preds = %9574
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %697, ptr noundef nonnull align 8 dereferenceable(32) %698, ptr noundef @.str.1473)
          to label %9576 unwind label %9607

9576:                                             ; preds = %9575
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %696, ptr noundef nonnull align 8 dereferenceable(32) %697)
          to label %9577 unwind label %9611

9577:                                             ; preds = %9576
  %9578 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %695, ptr noundef nonnull align 8 dereferenceable(32) %696) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %696) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %697) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %698) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %699) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %699) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %698) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %697) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %696) #9
  %9579 = load i32, ptr %693, align 4, !tbaa !16
  %9580 = load i32, ptr %694, align 4, !tbaa !16
  %9581 = load ptr, ptr %5, align 8, !tbaa !5
  %9582 = getelementptr inbounds i32, ptr %9581, i64 2
  %9583 = load i32, ptr %9582, align 4, !tbaa !16
  %9584 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %9583)
          to label %9585 unwind label %9618

9585:                                             ; preds = %9577
  %9586 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %9579, i32 noundef %9580, ptr noundef nonnull align 8 dereferenceable(32) %695, i1 noundef zeroext %9584, i1 noundef zeroext false)
          to label %9587 unwind label %9618

9587:                                             ; preds = %9585
  call void @llvm.lifetime.start.p0(i64 32, ptr %700) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %701) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %701) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %700, ptr noundef @.str.1474, ptr noundef nonnull align 1 dereferenceable(1) %701)
          to label %9588 unwind label %9622

9588:                                             ; preds = %9587
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %700)
          to label %9589 unwind label %9626

9589:                                             ; preds = %9588
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %700) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %701) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %701) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %700) #9
  %9590 = load i32, ptr %694, align 4, !tbaa !16
  %9591 = load ptr, ptr %5, align 8, !tbaa !5
  %9592 = getelementptr inbounds i32, ptr %9591, i64 2
  %9593 = load i32, ptr %9592, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %9590, i32 noundef %9593)
          to label %9594 unwind label %9618

9594:                                             ; preds = %9589
  %9595 = load ptr, ptr %5, align 8, !tbaa !5
  %9596 = getelementptr inbounds i32, ptr %9595, i64 1
  %9597 = load i32, ptr %9596, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %9597)
          to label %9598 unwind label %9618

9598:                                             ; preds = %9594
  store i32 2, ptr %676, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %695) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %695) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %694) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %693) #9
  br label %11526

9599:                                             ; preds = %9564
  %9600 = landingpad { ptr, i32 }
          cleanup
  %9601 = extractvalue { ptr, i32 } %9600, 0
  store ptr %9601, ptr %23, align 8
  %9602 = extractvalue { ptr, i32 } %9600, 1
  store i32 %9602, ptr %24, align 4
  br label %9617

9603:                                             ; preds = %9574
  %9604 = landingpad { ptr, i32 }
          cleanup
  %9605 = extractvalue { ptr, i32 } %9604, 0
  store ptr %9605, ptr %23, align 8
  %9606 = extractvalue { ptr, i32 } %9604, 1
  store i32 %9606, ptr %24, align 4
  br label %9616

9607:                                             ; preds = %9575
  %9608 = landingpad { ptr, i32 }
          cleanup
  %9609 = extractvalue { ptr, i32 } %9608, 0
  store ptr %9609, ptr %23, align 8
  %9610 = extractvalue { ptr, i32 } %9608, 1
  store i32 %9610, ptr %24, align 4
  br label %9615

9611:                                             ; preds = %9576
  %9612 = landingpad { ptr, i32 }
          cleanup
  %9613 = extractvalue { ptr, i32 } %9612, 0
  store ptr %9613, ptr %23, align 8
  %9614 = extractvalue { ptr, i32 } %9612, 1
  store i32 %9614, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %697) #9
  br label %9615

9615:                                             ; preds = %9611, %9607
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %698) #9
  br label %9616

9616:                                             ; preds = %9615, %9603
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %699) #9
  br label %9617

9617:                                             ; preds = %9616, %9599
  call void @llvm.lifetime.end.p0(i64 32, ptr %699) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %698) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %697) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %696) #9
  br label %9631

9618:                                             ; preds = %9594, %9589, %9585, %9577
  %9619 = landingpad { ptr, i32 }
          cleanup
  %9620 = extractvalue { ptr, i32 } %9619, 0
  store ptr %9620, ptr %23, align 8
  %9621 = extractvalue { ptr, i32 } %9619, 1
  store i32 %9621, ptr %24, align 4
  br label %9631

9622:                                             ; preds = %9587
  %9623 = landingpad { ptr, i32 }
          cleanup
  %9624 = extractvalue { ptr, i32 } %9623, 0
  store ptr %9624, ptr %23, align 8
  %9625 = extractvalue { ptr, i32 } %9623, 1
  store i32 %9625, ptr %24, align 4
  br label %9630

9626:                                             ; preds = %9588
  %9627 = landingpad { ptr, i32 }
          cleanup
  %9628 = extractvalue { ptr, i32 } %9627, 0
  store ptr %9628, ptr %23, align 8
  %9629 = extractvalue { ptr, i32 } %9627, 1
  store i32 %9629, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %700) #9
  br label %9630

9630:                                             ; preds = %9626, %9622
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %701) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %701) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %700) #9
  br label %9631

9631:                                             ; preds = %9630, %9618, %9617
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %695) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %695) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %694) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %693) #9
  br label %11527

9632:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %702) #9
  %9633 = load ptr, ptr %5, align 8, !tbaa !5
  %9634 = getelementptr inbounds i32, ptr %9633, i64 0
  %9635 = load i32, ptr %9634, align 4, !tbaa !16
  store i32 %9635, ptr %702, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %703) #9
  %9636 = load ptr, ptr %5, align 8, !tbaa !5
  %9637 = getelementptr inbounds i32, ptr %9636, i64 1
  %9638 = load i32, ptr %9637, align 4, !tbaa !16
  store i32 %9638, ptr %703, align 4, !tbaa !16
  %9639 = load i32, ptr %702, align 4, !tbaa !16
  %9640 = load i32, ptr %703, align 4, !tbaa !16
  %9641 = load ptr, ptr %5, align 8, !tbaa !5
  %9642 = getelementptr inbounds i32, ptr %9641, i64 2
  %9643 = load i32, ptr %9642, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %9639, i32 noundef %9640, i32 noundef %9643, ptr noundef @.str.1475)
  call void @llvm.lifetime.start.p0(i64 32, ptr %704) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %705) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %705) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %704, ptr noundef @.str.1474, ptr noundef nonnull align 1 dereferenceable(1) %705)
          to label %9644 unwind label %9649

9644:                                             ; preds = %9632
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %704)
          to label %9645 unwind label %9653

9645:                                             ; preds = %9644
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %704) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %705) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %705) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %704) #9
  %9646 = load ptr, ptr %5, align 8, !tbaa !5
  %9647 = getelementptr inbounds i32, ptr %9646, i64 1
  %9648 = load i32, ptr %9647, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %9648)
  store i32 2, ptr %676, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %703) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %702) #9
  br label %11526

9649:                                             ; preds = %9632
  %9650 = landingpad { ptr, i32 }
          cleanup
  %9651 = extractvalue { ptr, i32 } %9650, 0
  store ptr %9651, ptr %23, align 8
  %9652 = extractvalue { ptr, i32 } %9650, 1
  store i32 %9652, ptr %24, align 4
  br label %9657

9653:                                             ; preds = %9644
  %9654 = landingpad { ptr, i32 }
          cleanup
  %9655 = extractvalue { ptr, i32 } %9654, 0
  store ptr %9655, ptr %23, align 8
  %9656 = extractvalue { ptr, i32 } %9654, 1
  store i32 %9656, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %704) #9
  br label %9657

9657:                                             ; preds = %9653, %9649
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %705) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %705) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %704) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %703) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %702) #9
  br label %11527

9658:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %706) #9
  %9659 = load ptr, ptr %5, align 8, !tbaa !5
  %9660 = getelementptr inbounds i32, ptr %9659, i64 0
  %9661 = load i32, ptr %9660, align 4, !tbaa !16
  store i32 %9661, ptr %706, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %707) #9
  %9662 = load ptr, ptr %5, align 8, !tbaa !5
  %9663 = getelementptr inbounds i32, ptr %9662, i64 1
  %9664 = load i32, ptr %9663, align 4, !tbaa !16
  store i32 %9664, ptr %707, align 4, !tbaa !16
  %9665 = load i32, ptr %706, align 4, !tbaa !16
  %9666 = load i32, ptr %707, align 4, !tbaa !16
  %9667 = load ptr, ptr %5, align 8, !tbaa !5
  %9668 = getelementptr inbounds i32, ptr %9667, i64 2
  %9669 = load i32, ptr %9668, align 4, !tbaa !16
  %9670 = load ptr, ptr %5, align 8, !tbaa !5
  %9671 = getelementptr inbounds i32, ptr %9670, i64 3
  %9672 = load i32, ptr %9671, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %9665, i32 noundef %9666, i32 noundef %9669, i32 noundef %9672, ptr noundef @.str.1476)
  call void @llvm.lifetime.start.p0(i64 32, ptr %708) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %709) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %709) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %708, ptr noundef @.str.1474, ptr noundef nonnull align 1 dereferenceable(1) %709)
          to label %9673 unwind label %9678

9673:                                             ; preds = %9658
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %708)
          to label %9674 unwind label %9682

9674:                                             ; preds = %9673
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %708) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %709) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %709) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %708) #9
  %9675 = load ptr, ptr %5, align 8, !tbaa !5
  %9676 = getelementptr inbounds i32, ptr %9675, i64 1
  %9677 = load i32, ptr %9676, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %9677)
  store i32 2, ptr %676, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %707) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %706) #9
  br label %11526

9678:                                             ; preds = %9658
  %9679 = landingpad { ptr, i32 }
          cleanup
  %9680 = extractvalue { ptr, i32 } %9679, 0
  store ptr %9680, ptr %23, align 8
  %9681 = extractvalue { ptr, i32 } %9679, 1
  store i32 %9681, ptr %24, align 4
  br label %9686

9682:                                             ; preds = %9673
  %9683 = landingpad { ptr, i32 }
          cleanup
  %9684 = extractvalue { ptr, i32 } %9683, 0
  store ptr %9684, ptr %23, align 8
  %9685 = extractvalue { ptr, i32 } %9683, 1
  store i32 %9685, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %708) #9
  br label %9686

9686:                                             ; preds = %9682, %9678
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %709) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %709) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %708) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %707) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %706) #9
  br label %11527

9687:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %710) #9
  %9688 = load ptr, ptr %5, align 8, !tbaa !5
  %9689 = getelementptr inbounds i32, ptr %9688, i64 0
  %9690 = load i32, ptr %9689, align 4, !tbaa !16
  store i32 %9690, ptr %710, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %711) #9
  %9691 = load ptr, ptr %5, align 8, !tbaa !5
  %9692 = getelementptr inbounds i32, ptr %9691, i64 1
  %9693 = load i32, ptr %9692, align 4, !tbaa !16
  store i32 %9693, ptr %711, align 4, !tbaa !16
  %9694 = load i32, ptr %710, align 4, !tbaa !16
  %9695 = load i32, ptr %711, align 4, !tbaa !16
  %9696 = load ptr, ptr %5, align 8, !tbaa !5
  %9697 = getelementptr inbounds i32, ptr %9696, i64 2
  %9698 = load i32, ptr %9697, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %9694, i32 noundef %9695, i32 noundef %9698, ptr noundef @.str.1477)
  call void @llvm.lifetime.start.p0(i64 32, ptr %712) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %713) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %713) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %712, ptr noundef @.str.1478, ptr noundef nonnull align 1 dereferenceable(1) %713)
          to label %9699 unwind label %9704

9699:                                             ; preds = %9687
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %712)
          to label %9700 unwind label %9708

9700:                                             ; preds = %9699
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %712) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %713) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %713) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %712) #9
  %9701 = load ptr, ptr %5, align 8, !tbaa !5
  %9702 = getelementptr inbounds i32, ptr %9701, i64 1
  %9703 = load i32, ptr %9702, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %9703)
  store i32 2, ptr %676, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %711) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %710) #9
  br label %11526

9704:                                             ; preds = %9687
  %9705 = landingpad { ptr, i32 }
          cleanup
  %9706 = extractvalue { ptr, i32 } %9705, 0
  store ptr %9706, ptr %23, align 8
  %9707 = extractvalue { ptr, i32 } %9705, 1
  store i32 %9707, ptr %24, align 4
  br label %9712

9708:                                             ; preds = %9699
  %9709 = landingpad { ptr, i32 }
          cleanup
  %9710 = extractvalue { ptr, i32 } %9709, 0
  store ptr %9710, ptr %23, align 8
  %9711 = extractvalue { ptr, i32 } %9709, 1
  store i32 %9711, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %712) #9
  br label %9712

9712:                                             ; preds = %9708, %9704
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %713) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %713) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %712) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %711) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %710) #9
  br label %11527

9713:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %714) #9
  %9714 = load ptr, ptr %5, align 8, !tbaa !5
  %9715 = getelementptr inbounds i32, ptr %9714, i64 0
  %9716 = load i32, ptr %9715, align 4, !tbaa !16
  store i32 %9716, ptr %714, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %715) #9
  %9717 = load ptr, ptr %5, align 8, !tbaa !5
  %9718 = getelementptr inbounds i32, ptr %9717, i64 1
  %9719 = load i32, ptr %9718, align 4, !tbaa !16
  store i32 %9719, ptr %715, align 4, !tbaa !16
  %9720 = load i32, ptr %714, align 4, !tbaa !16
  %9721 = load i32, ptr %715, align 4, !tbaa !16
  %9722 = load ptr, ptr %5, align 8, !tbaa !5
  %9723 = getelementptr inbounds i32, ptr %9722, i64 2
  %9724 = load i32, ptr %9723, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %9720, i32 noundef %9721, i32 noundef %9724, ptr noundef @.str.1479)
  call void @llvm.lifetime.start.p0(i64 32, ptr %716) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %717) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %717) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %716, ptr noundef @.str.1478, ptr noundef nonnull align 1 dereferenceable(1) %717)
          to label %9725 unwind label %9730

9725:                                             ; preds = %9713
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %716)
          to label %9726 unwind label %9734

9726:                                             ; preds = %9725
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %716) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %717) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %717) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %716) #9
  %9727 = load ptr, ptr %5, align 8, !tbaa !5
  %9728 = getelementptr inbounds i32, ptr %9727, i64 1
  %9729 = load i32, ptr %9728, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %9729)
  store i32 2, ptr %676, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %715) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %714) #9
  br label %11526

9730:                                             ; preds = %9713
  %9731 = landingpad { ptr, i32 }
          cleanup
  %9732 = extractvalue { ptr, i32 } %9731, 0
  store ptr %9732, ptr %23, align 8
  %9733 = extractvalue { ptr, i32 } %9731, 1
  store i32 %9733, ptr %24, align 4
  br label %9738

9734:                                             ; preds = %9725
  %9735 = landingpad { ptr, i32 }
          cleanup
  %9736 = extractvalue { ptr, i32 } %9735, 0
  store ptr %9736, ptr %23, align 8
  %9737 = extractvalue { ptr, i32 } %9735, 1
  store i32 %9737, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %716) #9
  br label %9738

9738:                                             ; preds = %9734, %9730
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %717) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %717) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %716) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %715) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %714) #9
  br label %11527

9739:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %718) #9
  %9740 = load ptr, ptr %5, align 8, !tbaa !5
  %9741 = getelementptr inbounds i32, ptr %9740, i64 0
  %9742 = load i32, ptr %9741, align 4, !tbaa !16
  store i32 %9742, ptr %718, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %719) #9
  %9743 = load ptr, ptr %5, align 8, !tbaa !5
  %9744 = getelementptr inbounds i32, ptr %9743, i64 1
  %9745 = load i32, ptr %9744, align 4, !tbaa !16
  store i32 %9745, ptr %719, align 4, !tbaa !16
  %9746 = load i32, ptr %718, align 4, !tbaa !16
  %9747 = load i32, ptr %719, align 4, !tbaa !16
  %9748 = load ptr, ptr %5, align 8, !tbaa !5
  %9749 = getelementptr inbounds i32, ptr %9748, i64 2
  %9750 = load i32, ptr %9749, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %9746, i32 noundef %9747, i32 noundef %9750, ptr noundef @.str.1480)
  call void @llvm.lifetime.start.p0(i64 32, ptr %720) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %721) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %721) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %720, ptr noundef @.str.1478, ptr noundef nonnull align 1 dereferenceable(1) %721)
          to label %9751 unwind label %9756

9751:                                             ; preds = %9739
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %720)
          to label %9752 unwind label %9760

9752:                                             ; preds = %9751
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %720) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %721) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %721) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %720) #9
  %9753 = load ptr, ptr %5, align 8, !tbaa !5
  %9754 = getelementptr inbounds i32, ptr %9753, i64 1
  %9755 = load i32, ptr %9754, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %9755)
  store i32 2, ptr %676, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %719) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %718) #9
  br label %11526

9756:                                             ; preds = %9739
  %9757 = landingpad { ptr, i32 }
          cleanup
  %9758 = extractvalue { ptr, i32 } %9757, 0
  store ptr %9758, ptr %23, align 8
  %9759 = extractvalue { ptr, i32 } %9757, 1
  store i32 %9759, ptr %24, align 4
  br label %9764

9760:                                             ; preds = %9751
  %9761 = landingpad { ptr, i32 }
          cleanup
  %9762 = extractvalue { ptr, i32 } %9761, 0
  store ptr %9762, ptr %23, align 8
  %9763 = extractvalue { ptr, i32 } %9761, 1
  store i32 %9763, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %720) #9
  br label %9764

9764:                                             ; preds = %9760, %9756
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %721) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %721) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %720) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %719) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %718) #9
  br label %11527

9765:                                             ; preds = %919, %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %722) #9
  %9766 = load ptr, ptr %5, align 8, !tbaa !5
  %9767 = getelementptr inbounds i32, ptr %9766, i64 0
  %9768 = load i32, ptr %9767, align 4, !tbaa !16
  store i32 %9768, ptr %722, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %723) #9
  %9769 = load ptr, ptr %5, align 8, !tbaa !5
  %9770 = getelementptr inbounds i32, ptr %9769, i64 1
  %9771 = load i32, ptr %9770, align 4, !tbaa !16
  store i32 %9771, ptr %723, align 4, !tbaa !16
  %9772 = load i32, ptr %722, align 4, !tbaa !16
  %9773 = load i32, ptr %723, align 4, !tbaa !16
  %9774 = load ptr, ptr %5, align 8, !tbaa !5
  %9775 = getelementptr inbounds i32, ptr %9774, i64 4
  %9776 = load i32, ptr %9775, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %9772, i32 noundef %9773, i32 noundef %9776, ptr noundef @.str.1481)
  call void @llvm.lifetime.start.p0(i64 32, ptr %724) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %725) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %725) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %724, ptr noundef @.str.1137, ptr noundef nonnull align 1 dereferenceable(1) %725)
          to label %9777 unwind label %9782

9777:                                             ; preds = %9765
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %724)
          to label %9778 unwind label %9786

9778:                                             ; preds = %9777
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %724) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %725) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %725) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %724) #9
  %9779 = load ptr, ptr %5, align 8, !tbaa !5
  %9780 = getelementptr inbounds i32, ptr %9779, i64 1
  %9781 = load i32, ptr %9780, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %9781)
  store i32 2, ptr %676, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %723) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %722) #9
  br label %11526

9782:                                             ; preds = %9765
  %9783 = landingpad { ptr, i32 }
          cleanup
  %9784 = extractvalue { ptr, i32 } %9783, 0
  store ptr %9784, ptr %23, align 8
  %9785 = extractvalue { ptr, i32 } %9783, 1
  store i32 %9785, ptr %24, align 4
  br label %9790

9786:                                             ; preds = %9777
  %9787 = landingpad { ptr, i32 }
          cleanup
  %9788 = extractvalue { ptr, i32 } %9787, 0
  store ptr %9788, ptr %23, align 8
  %9789 = extractvalue { ptr, i32 } %9787, 1
  store i32 %9789, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %724) #9
  br label %9790

9790:                                             ; preds = %9786, %9782
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %725) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %725) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %724) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %723) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %722) #9
  br label %11527

9791:                                             ; preds = %919, %919, %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %726) #9
  %9792 = load ptr, ptr %5, align 8, !tbaa !5
  %9793 = getelementptr inbounds i32, ptr %9792, i64 0
  %9794 = load i32, ptr %9793, align 4, !tbaa !16
  store i32 %9794, ptr %726, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %727) #9
  %9795 = load ptr, ptr %5, align 8, !tbaa !5
  %9796 = getelementptr inbounds i32, ptr %9795, i64 1
  %9797 = load i32, ptr %9796, align 4, !tbaa !16
  store i32 %9797, ptr %727, align 4, !tbaa !16
  %9798 = load i32, ptr %726, align 4, !tbaa !16
  %9799 = load i32, ptr %727, align 4, !tbaa !16
  %9800 = load ptr, ptr %5, align 8, !tbaa !5
  %9801 = getelementptr inbounds i32, ptr %9800, i64 4
  %9802 = load i32, ptr %9801, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %9798, i32 noundef %9799, i32 noundef %9802, ptr noundef @.str.1482)
  call void @llvm.lifetime.start.p0(i64 32, ptr %728) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %729) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %729) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %728, ptr noundef @.str.1137, ptr noundef nonnull align 1 dereferenceable(1) %729)
          to label %9803 unwind label %9808

9803:                                             ; preds = %9791
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %728)
          to label %9804 unwind label %9812

9804:                                             ; preds = %9803
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %728) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %729) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %729) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %728) #9
  %9805 = load ptr, ptr %5, align 8, !tbaa !5
  %9806 = getelementptr inbounds i32, ptr %9805, i64 1
  %9807 = load i32, ptr %9806, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %9807)
  store i32 2, ptr %676, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %727) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %726) #9
  br label %11526

9808:                                             ; preds = %9791
  %9809 = landingpad { ptr, i32 }
          cleanup
  %9810 = extractvalue { ptr, i32 } %9809, 0
  store ptr %9810, ptr %23, align 8
  %9811 = extractvalue { ptr, i32 } %9809, 1
  store i32 %9811, ptr %24, align 4
  br label %9816

9812:                                             ; preds = %9803
  %9813 = landingpad { ptr, i32 }
          cleanup
  %9814 = extractvalue { ptr, i32 } %9813, 0
  store ptr %9814, ptr %23, align 8
  %9815 = extractvalue { ptr, i32 } %9813, 1
  store i32 %9815, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %728) #9
  br label %9816

9816:                                             ; preds = %9812, %9808
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %729) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %729) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %728) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %727) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %726) #9
  br label %11527

9817:                                             ; preds = %919, %919, %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %730) #9
  %9818 = load ptr, ptr %5, align 8, !tbaa !5
  %9819 = getelementptr inbounds i32, ptr %9818, i64 0
  %9820 = load i32, ptr %9819, align 4, !tbaa !16
  store i32 %9820, ptr %730, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %731) #9
  %9821 = load ptr, ptr %5, align 8, !tbaa !5
  %9822 = getelementptr inbounds i32, ptr %9821, i64 1
  %9823 = load i32, ptr %9822, align 4, !tbaa !16
  store i32 %9823, ptr %731, align 4, !tbaa !16
  %9824 = load i32, ptr %730, align 4, !tbaa !16
  %9825 = load i32, ptr %731, align 4, !tbaa !16
  %9826 = load ptr, ptr %5, align 8, !tbaa !5
  %9827 = getelementptr inbounds i32, ptr %9826, i64 4
  %9828 = load i32, ptr %9827, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %9824, i32 noundef %9825, i32 noundef %9828, ptr noundef @.str.1483)
  call void @llvm.lifetime.start.p0(i64 32, ptr %732) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %733) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %733) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %732, ptr noundef @.str.1137, ptr noundef nonnull align 1 dereferenceable(1) %733)
          to label %9829 unwind label %9834

9829:                                             ; preds = %9817
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %732)
          to label %9830 unwind label %9838

9830:                                             ; preds = %9829
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %732) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %733) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %733) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %732) #9
  %9831 = load ptr, ptr %5, align 8, !tbaa !5
  %9832 = getelementptr inbounds i32, ptr %9831, i64 1
  %9833 = load i32, ptr %9832, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %9833)
  store i32 2, ptr %676, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %731) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %730) #9
  br label %11526

9834:                                             ; preds = %9817
  %9835 = landingpad { ptr, i32 }
          cleanup
  %9836 = extractvalue { ptr, i32 } %9835, 0
  store ptr %9836, ptr %23, align 8
  %9837 = extractvalue { ptr, i32 } %9835, 1
  store i32 %9837, ptr %24, align 4
  br label %9842

9838:                                             ; preds = %9829
  %9839 = landingpad { ptr, i32 }
          cleanup
  %9840 = extractvalue { ptr, i32 } %9839, 0
  store ptr %9840, ptr %23, align 8
  %9841 = extractvalue { ptr, i32 } %9839, 1
  store i32 %9841, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %732) #9
  br label %9842

9842:                                             ; preds = %9838, %9834
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %733) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %733) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %732) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %731) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %730) #9
  br label %11527

9843:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 8, ptr %734) #9
  %9844 = load ptr, ptr %5, align 8, !tbaa !5
  %9845 = getelementptr inbounds i32, ptr %9844, i64 2
  %9846 = load i32, ptr %9845, align 4, !tbaa !16
  %9847 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %9846)
  store ptr %9847, ptr %734, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %735) #9
  %9848 = load ptr, ptr %5, align 8, !tbaa !5
  %9849 = getelementptr inbounds i32, ptr %9848, i64 0
  %9850 = load i32, ptr %9849, align 4, !tbaa !16
  store i32 %9850, ptr %735, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %736) #9
  %9851 = load ptr, ptr %5, align 8, !tbaa !5
  %9852 = getelementptr inbounds i32, ptr %9851, i64 1
  %9853 = load i32, ptr %9852, align 4, !tbaa !16
  store i32 %9853, ptr %736, align 4, !tbaa !16
  %9854 = load ptr, ptr %734, align 8, !tbaa !5
  %9855 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %9854, i32 0, i32 14
  %9856 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %9855, i32 0, i32 1
  %9857 = load i32, ptr %9856, align 4, !tbaa !215
  %9858 = icmp eq i32 %9857, 6
  br i1 %9858, label %9859, label %9865

9859:                                             ; preds = %9843
  %9860 = load i32, ptr %735, align 4, !tbaa !16
  %9861 = load i32, ptr %736, align 4, !tbaa !16
  %9862 = load ptr, ptr %5, align 8, !tbaa !5
  %9863 = getelementptr inbounds i32, ptr %9862, i64 2
  %9864 = load i32, ptr %9863, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %9860, i32 noundef %9861, i32 noundef %9864, ptr noundef @.str.1484)
  br label %9874

9865:                                             ; preds = %9843
  %9866 = load i32, ptr %735, align 4, !tbaa !16
  %9867 = load i32, ptr %736, align 4, !tbaa !16
  %9868 = load ptr, ptr %5, align 8, !tbaa !5
  %9869 = getelementptr inbounds i32, ptr %9868, i64 2
  %9870 = load i32, ptr %9869, align 4, !tbaa !16
  %9871 = load ptr, ptr %5, align 8, !tbaa !5
  %9872 = getelementptr inbounds i32, ptr %9871, i64 3
  %9873 = load i32, ptr %9872, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %9866, i32 noundef %9867, i32 noundef %9870, i32 noundef %9873, ptr noundef @.str.1484)
  br label %9874

9874:                                             ; preds = %9865, %9859
  call void @llvm.lifetime.start.p0(i64 32, ptr %737) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %738) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %738) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %737, ptr noundef @.str.1485, ptr noundef nonnull align 1 dereferenceable(1) %738)
          to label %9875 unwind label %9877

9875:                                             ; preds = %9874
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %737)
          to label %9876 unwind label %9881

9876:                                             ; preds = %9875
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %737) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %738) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %738) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %737) #9
  store i32 2, ptr %676, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %736) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %735) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %734) #9
  br label %11526

9877:                                             ; preds = %9874
  %9878 = landingpad { ptr, i32 }
          cleanup
  %9879 = extractvalue { ptr, i32 } %9878, 0
  store ptr %9879, ptr %23, align 8
  %9880 = extractvalue { ptr, i32 } %9878, 1
  store i32 %9880, ptr %24, align 4
  br label %9885

9881:                                             ; preds = %9875
  %9882 = landingpad { ptr, i32 }
          cleanup
  %9883 = extractvalue { ptr, i32 } %9882, 0
  store ptr %9883, ptr %23, align 8
  %9884 = extractvalue { ptr, i32 } %9882, 1
  store i32 %9884, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %737) #9
  br label %9885

9885:                                             ; preds = %9881, %9877
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %738) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %738) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %737) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %736) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %735) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %734) #9
  br label %11527

9886:                                             ; preds = %919
  call void @llvm.lifetime.start.p0(i64 8, ptr %739) #9
  %9887 = load ptr, ptr %5, align 8, !tbaa !5
  %9888 = getelementptr inbounds i32, ptr %9887, i64 2
  %9889 = load i32, ptr %9888, align 4, !tbaa !16
  %9890 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %9889)
  store ptr %9890, ptr %739, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %740) #9
  %9891 = load ptr, ptr %5, align 8, !tbaa !5
  %9892 = getelementptr inbounds i32, ptr %9891, i64 0
  %9893 = load i32, ptr %9892, align 4, !tbaa !16
  store i32 %9893, ptr %740, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %741) #9
  %9894 = load ptr, ptr %5, align 8, !tbaa !5
  %9895 = getelementptr inbounds i32, ptr %9894, i64 1
  %9896 = load i32, ptr %9895, align 4, !tbaa !16
  store i32 %9896, ptr %741, align 4, !tbaa !16
  %9897 = load ptr, ptr %739, align 8, !tbaa !5
  %9898 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %9897, i32 0, i32 14
  %9899 = getelementptr inbounds %"struct.spirv_cross::SPIRType::ImageType", ptr %9898, i32 0, i32 1
  %9900 = load i32, ptr %9899, align 4, !tbaa !215
  %9901 = icmp eq i32 %9900, 6
  br i1 %9901, label %9902, label %9911

9902:                                             ; preds = %9886
  %9903 = load i32, ptr %740, align 4, !tbaa !16
  %9904 = load i32, ptr %741, align 4, !tbaa !16
  %9905 = load ptr, ptr %5, align 8, !tbaa !5
  %9906 = getelementptr inbounds i32, ptr %9905, i64 2
  %9907 = load i32, ptr %9906, align 4, !tbaa !16
  %9908 = load ptr, ptr %5, align 8, !tbaa !5
  %9909 = getelementptr inbounds i32, ptr %9908, i64 4
  %9910 = load i32, ptr %9909, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %9903, i32 noundef %9904, i32 noundef %9907, i32 noundef %9910, ptr noundef @.str.1486)
  br label %9923

9911:                                             ; preds = %9886
  %9912 = load i32, ptr %740, align 4, !tbaa !16
  %9913 = load i32, ptr %741, align 4, !tbaa !16
  %9914 = load ptr, ptr %5, align 8, !tbaa !5
  %9915 = getelementptr inbounds i32, ptr %9914, i64 2
  %9916 = load i32, ptr %9915, align 4, !tbaa !16
  %9917 = load ptr, ptr %5, align 8, !tbaa !5
  %9918 = getelementptr inbounds i32, ptr %9917, i64 3
  %9919 = load i32, ptr %9918, align 4, !tbaa !16
  %9920 = load ptr, ptr %5, align 8, !tbaa !5
  %9921 = getelementptr inbounds i32, ptr %9920, i64 4
  %9922 = load i32, ptr %9921, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL20emit_trinary_func_opEjjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %9912, i32 noundef %9913, i32 noundef %9916, i32 noundef %9919, i32 noundef %9922, ptr noundef @.str.1486)
  br label %9923

9923:                                             ; preds = %9911, %9902
  call void @llvm.lifetime.start.p0(i64 32, ptr %742) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %743) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %743) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %742, ptr noundef @.str.1485, ptr noundef nonnull align 1 dereferenceable(1) %743)
          to label %9924 unwind label %9926

9924:                                             ; preds = %9923
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %742)
          to label %9925 unwind label %9930

9925:                                             ; preds = %9924
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %742) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %743) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %743) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %742) #9
  store i32 2, ptr %676, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %741) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %740) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %739) #9
  br label %11526

9926:                                             ; preds = %9923
  %9927 = landingpad { ptr, i32 }
          cleanup
  %9928 = extractvalue { ptr, i32 } %9927, 0
  store ptr %9928, ptr %23, align 8
  %9929 = extractvalue { ptr, i32 } %9927, 1
  store i32 %9929, ptr %24, align 4
  br label %9934

9930:                                             ; preds = %9924
  %9931 = landingpad { ptr, i32 }
          cleanup
  %9932 = extractvalue { ptr, i32 } %9931, 0
  store ptr %9932, ptr %23, align 8
  %9933 = extractvalue { ptr, i32 } %9931, 1
  store i32 %9933, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %742) #9
  br label %9934

9934:                                             ; preds = %9930, %9926
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %743) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %743) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %742) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %741) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %740) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %739) #9
  br label %11527

9935:                                             ; preds = %919, %919, %919, %919, %919, %919, %919, %919, %919, %919, %919, %919, %919, %919, %919, %919, %919, %919, %919, %919, %919, %919, %919, %919, %919, %919, %919, %919, %919, %919, %919, %919, %919, %919
  %9936 = load ptr, ptr %4, align 8, !tbaa !5
  %9937 = load ptr, ptr %885, align 8, !tbaa !145
  %9938 = getelementptr inbounds ptr, ptr %9937, i64 18
  %9939 = load ptr, ptr %9938, align 8
  call void %9939(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 4 dereferenceable(12) %9936)
  br label %11526

9940:                                             ; preds = %919, %919, %919, %919, %919
  call void @llvm.lifetime.start.p0(i64 4, ptr %744) #9
  %9941 = load ptr, ptr %5, align 8, !tbaa !5
  %9942 = getelementptr inbounds i32, ptr %9941, i64 2
  %9943 = load i32, ptr %9942, align 4, !tbaa !16
  store i32 %9943, ptr %744, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 4, ptr %745) #9
  %9944 = load ptr, ptr %5, align 8, !tbaa !5
  %9945 = getelementptr inbounds i32, ptr %9944, i64 3
  %9946 = load i32, ptr %9945, align 4, !tbaa !16
  store i32 %9946, ptr %745, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %746) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %746) #9
  %9947 = load i32, ptr %744, align 4, !tbaa !16
  %9948 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %9947)
          to label %9949 unwind label %9955

9949:                                             ; preds = %9940
  %9950 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %9948, i32 0, i32 4
  %9951 = load i32, ptr %9950, align 8, !tbaa !129
  %9952 = icmp ugt i32 %9951, 1
  br i1 %9952, label %9953, label %9986

9953:                                             ; preds = %9949
  call void @llvm.lifetime.start.p0(i64 8, ptr %747) #9
  store ptr null, ptr %747, align 8, !tbaa !5
  %9954 = load i32, ptr %6, align 4, !tbaa !13
  switch i32 %9954, label %9964 [
    i32 181, label %9959
    i32 185, label %9960
    i32 189, label %9961
    i32 187, label %9962
    i32 191, label %9963
  ]

9955:                                             ; preds = %10037, %10032, %10029, %10025, %10015, %9940
  %9956 = landingpad { ptr, i32 }
          cleanup
  %9957 = extractvalue { ptr, i32 } %9956, 0
  store ptr %9957, ptr %23, align 8
  %9958 = extractvalue { ptr, i32 } %9956, 1
  store i32 %9958, ptr %24, align 4
  br label %10043

9959:                                             ; preds = %9953
  store ptr @.str.446, ptr %747, align 8, !tbaa !5
  br label %9965

9960:                                             ; preds = %9953
  store ptr @.str.398, ptr %747, align 8, !tbaa !5
  br label %9965

9961:                                             ; preds = %9953
  store ptr @.str.397, ptr %747, align 8, !tbaa !5
  br label %9965

9962:                                             ; preds = %9953
  store ptr @.str.425, ptr %747, align 8, !tbaa !5
  br label %9965

9963:                                             ; preds = %9953
  store ptr @.str.424, ptr %747, align 8, !tbaa !5
  br label %9965

9964:                                             ; preds = %9953
  call void @__assert_fail(ptr noundef @.str.760, ptr noundef @.str.11, i32 noundef 15002, ptr noundef @__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE) #10
  unreachable

9965:                                             ; preds = %9963, %9962, %9961, %9960, %9959
  call void @llvm.lifetime.start.p0(i64 32, ptr %748) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %749) #9
  %9966 = load i32, ptr %744, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %749, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %9966, i1 noundef zeroext true)
          to label %9967 unwind label %9972

9967:                                             ; preds = %9965
  call void @llvm.lifetime.start.p0(i64 32, ptr %750) #9
  %9968 = load i32, ptr %745, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %750, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %9968, i1 noundef zeroext true)
          to label %9969 unwind label %9976

9969:                                             ; preds = %9967
  invoke void @_ZN11spirv_cross4joinIJRA5_KcRPS1_RA2_S1_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_SD_SF_EEESD_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %748, ptr noundef nonnull align 1 dereferenceable(5) @.str.1487, ptr noundef nonnull align 8 dereferenceable(8) %747, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %749, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %750, ptr noundef nonnull align 1 dereferenceable(3) @.str.1016)
          to label %9970 unwind label %9980

9970:                                             ; preds = %9969
  %9971 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %746, ptr noundef nonnull align 8 dereferenceable(32) %748) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %748) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %750) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %750) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %749) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %749) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %748) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %747) #9
  br label %10015

9972:                                             ; preds = %9965
  %9973 = landingpad { ptr, i32 }
          cleanup
  %9974 = extractvalue { ptr, i32 } %9973, 0
  store ptr %9974, ptr %23, align 8
  %9975 = extractvalue { ptr, i32 } %9973, 1
  store i32 %9975, ptr %24, align 4
  br label %9985

9976:                                             ; preds = %9967
  %9977 = landingpad { ptr, i32 }
          cleanup
  %9978 = extractvalue { ptr, i32 } %9977, 0
  store ptr %9978, ptr %23, align 8
  %9979 = extractvalue { ptr, i32 } %9977, 1
  store i32 %9979, ptr %24, align 4
  br label %9984

9980:                                             ; preds = %9969
  %9981 = landingpad { ptr, i32 }
          cleanup
  %9982 = extractvalue { ptr, i32 } %9981, 0
  store ptr %9982, ptr %23, align 8
  %9983 = extractvalue { ptr, i32 } %9981, 1
  store i32 %9983, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %750) #9
  br label %9984

9984:                                             ; preds = %9980, %9976
  call void @llvm.lifetime.end.p0(i64 32, ptr %750) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %749) #9
  br label %9985

9985:                                             ; preds = %9984, %9972
  call void @llvm.lifetime.end.p0(i64 32, ptr %749) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %748) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %747) #9
  br label %10043

9986:                                             ; preds = %9949
  call void @llvm.lifetime.start.p0(i64 8, ptr %751) #9
  store ptr null, ptr %751, align 8, !tbaa !5
  %9987 = load i32, ptr %6, align 4, !tbaa !13
  switch i32 %9987, label %9993 [
    i32 181, label %9988
    i32 185, label %9989
    i32 189, label %9990
    i32 187, label %9991
    i32 191, label %9992
  ]

9988:                                             ; preds = %9986
  store ptr @.str.1488, ptr %751, align 8, !tbaa !5
  br label %9994

9989:                                             ; preds = %9986
  store ptr @.str.1489, ptr %751, align 8, !tbaa !5
  br label %9994

9990:                                             ; preds = %9986
  store ptr @.str.1490, ptr %751, align 8, !tbaa !5
  br label %9994

9991:                                             ; preds = %9986
  store ptr @.str.1491, ptr %751, align 8, !tbaa !5
  br label %9994

9992:                                             ; preds = %9986
  store ptr @.str.1492, ptr %751, align 8, !tbaa !5
  br label %9994

9993:                                             ; preds = %9986
  call void @__assert_fail(ptr noundef @.str.760, ptr noundef @.str.11, i32 noundef 15034, ptr noundef @__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE) #10
  unreachable

9994:                                             ; preds = %9992, %9991, %9990, %9989, %9988
  call void @llvm.lifetime.start.p0(i64 32, ptr %752) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %753) #9
  %9995 = load i32, ptr %744, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %753, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %9995, i1 noundef zeroext true)
          to label %9996 unwind label %10001

9996:                                             ; preds = %9994
  call void @llvm.lifetime.start.p0(i64 32, ptr %754) #9
  %9997 = load i32, ptr %745, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %754, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %9997, i1 noundef zeroext true)
          to label %9998 unwind label %10005

9998:                                             ; preds = %9996
  invoke void @_ZN11spirv_cross4joinIJRA3_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERPS1_S9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %752, ptr noundef nonnull align 1 dereferenceable(3) @.str.1014, ptr noundef nonnull align 8 dereferenceable(32) %753, ptr noundef nonnull align 8 dereferenceable(8) %751, ptr noundef nonnull align 8 dereferenceable(32) %754, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %9999 unwind label %10009

9999:                                             ; preds = %9998
  %10000 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %746, ptr noundef nonnull align 8 dereferenceable(32) %752) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %752) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %754) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %754) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %753) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %753) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %752) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %751) #9
  br label %10015

10001:                                            ; preds = %9994
  %10002 = landingpad { ptr, i32 }
          cleanup
  %10003 = extractvalue { ptr, i32 } %10002, 0
  store ptr %10003, ptr %23, align 8
  %10004 = extractvalue { ptr, i32 } %10002, 1
  store i32 %10004, ptr %24, align 4
  br label %10014

10005:                                            ; preds = %9996
  %10006 = landingpad { ptr, i32 }
          cleanup
  %10007 = extractvalue { ptr, i32 } %10006, 0
  store ptr %10007, ptr %23, align 8
  %10008 = extractvalue { ptr, i32 } %10006, 1
  store i32 %10008, ptr %24, align 4
  br label %10013

10009:                                            ; preds = %9998
  %10010 = landingpad { ptr, i32 }
          cleanup
  %10011 = extractvalue { ptr, i32 } %10010, 0
  store ptr %10011, ptr %23, align 8
  %10012 = extractvalue { ptr, i32 } %10010, 1
  store i32 %10012, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %754) #9
  br label %10013

10013:                                            ; preds = %10009, %10005
  call void @llvm.lifetime.end.p0(i64 32, ptr %754) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %753) #9
  br label %10014

10014:                                            ; preds = %10013, %10001
  call void @llvm.lifetime.end.p0(i64 32, ptr %753) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %752) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %751) #9
  br label %10043

10015:                                            ; preds = %9999, %9970
  %10016 = load ptr, ptr %5, align 8, !tbaa !5
  %10017 = getelementptr inbounds i32, ptr %10016, i64 0
  %10018 = load i32, ptr %10017, align 4, !tbaa !16
  %10019 = load ptr, ptr %5, align 8, !tbaa !5
  %10020 = getelementptr inbounds i32, ptr %10019, i64 1
  %10021 = load i32, ptr %10020, align 4, !tbaa !16
  %10022 = load i32, ptr %744, align 4, !tbaa !16
  %10023 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10022)
          to label %10024 unwind label %9955

10024:                                            ; preds = %10015
  br i1 %10023, label %10025, label %10029

10025:                                            ; preds = %10024
  %10026 = load i32, ptr %745, align 4, !tbaa !16
  %10027 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10026)
          to label %10028 unwind label %9955

10028:                                            ; preds = %10025
  br label %10029

10029:                                            ; preds = %10028, %10024
  %10030 = phi i1 [ false, %10024 ], [ %10027, %10028 ]
  %10031 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10018, i32 noundef %10021, ptr noundef nonnull align 8 dereferenceable(32) %746, i1 noundef zeroext %10030, i1 noundef zeroext false)
          to label %10032 unwind label %9955

10032:                                            ; preds = %10029
  %10033 = load ptr, ptr %5, align 8, !tbaa !5
  %10034 = getelementptr inbounds i32, ptr %10033, i64 1
  %10035 = load i32, ptr %10034, align 4, !tbaa !16
  %10036 = load i32, ptr %744, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %10035, i32 noundef %10036)
          to label %10037 unwind label %9955

10037:                                            ; preds = %10032
  %10038 = load ptr, ptr %5, align 8, !tbaa !5
  %10039 = getelementptr inbounds i32, ptr %10038, i64 1
  %10040 = load i32, ptr %10039, align 4, !tbaa !16
  %10041 = load i32, ptr %745, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %10040, i32 noundef %10041)
          to label %10042 unwind label %9955

10042:                                            ; preds = %10037
  store i32 2, ptr %676, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %746) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %746) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %745) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %744) #9
  br label %11526

10043:                                            ; preds = %10014, %9985, %9955
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %746) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %746) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %745) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %744) #9
  br label %11527

10044:                                            ; preds = %919
  %10045 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %885, i32 0, i32 15
  %10046 = load ptr, ptr %5, align 8, !tbaa !5
  %10047 = getelementptr inbounds i32, ptr %10046, i64 1
  %10048 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %10045, ptr noundef nonnull align 4 dereferenceable(4) %10047)
  %10049 = getelementptr inbounds { ptr, i8 }, ptr %755, i32 0, i32 0
  %10050 = extractvalue { ptr, i8 } %10048, 0
  store ptr %10050, ptr %10049, align 8
  %10051 = getelementptr inbounds { ptr, i8 }, ptr %755, i32 0, i32 1
  %10052 = extractvalue { ptr, i8 } %10048, 1
  store i8 %10052, ptr %10051, align 8
  %10053 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 36
  %10054 = load i8, ptr %10053, align 4, !tbaa !237, !range !127, !noundef !128
  %10055 = trunc i8 %10054 to i1
  br i1 %10055, label %10056, label %10069

10056:                                            ; preds = %10044
  %10057 = load ptr, ptr %5, align 8, !tbaa !5
  %10058 = getelementptr inbounds i32, ptr %10057, i64 0
  %10059 = load i32, ptr %10058, align 4, !tbaa !16
  %10060 = load ptr, ptr %5, align 8, !tbaa !5
  %10061 = getelementptr inbounds i32, ptr %10060, i64 1
  %10062 = load i32, ptr %10061, align 4, !tbaa !16
  %10063 = load ptr, ptr %5, align 8, !tbaa !5
  %10064 = getelementptr inbounds i32, ptr %10063, i64 2
  %10065 = load i32, ptr %10064, align 4, !tbaa !16
  %10066 = load ptr, ptr %5, align 8, !tbaa !5
  %10067 = getelementptr inbounds i32, ptr %10066, i64 3
  %10068 = load i32, ptr %10067, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10059, i32 noundef %10062, i32 noundef %10065, i32 noundef %10068, ptr noundef @.str.1493)
  br label %10082

10069:                                            ; preds = %10044
  %10070 = load ptr, ptr %5, align 8, !tbaa !5
  %10071 = getelementptr inbounds i32, ptr %10070, i64 0
  %10072 = load i32, ptr %10071, align 4, !tbaa !16
  %10073 = load ptr, ptr %5, align 8, !tbaa !5
  %10074 = getelementptr inbounds i32, ptr %10073, i64 1
  %10075 = load i32, ptr %10074, align 4, !tbaa !16
  %10076 = load ptr, ptr %5, align 8, !tbaa !5
  %10077 = getelementptr inbounds i32, ptr %10076, i64 2
  %10078 = load i32, ptr %10077, align 4, !tbaa !16
  %10079 = load ptr, ptr %5, align 8, !tbaa !5
  %10080 = getelementptr inbounds i32, ptr %10079, i64 3
  %10081 = load i32, ptr %10080, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10072, i32 noundef %10075, i32 noundef %10078, i32 noundef %10081, ptr noundef @.str.1494)
  br label %10082

10082:                                            ; preds = %10069, %10056
  %10083 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 1
  %10084 = load ptr, ptr %10083, align 8, !tbaa !231
  %10085 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %10084, i32 0, i32 1
  %10086 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %10085)
  call void @_ZN11spirv_cross8Compiler35flush_control_dependent_expressionsEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %10086)
  br label %11526

10087:                                            ; preds = %919
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA24_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 1 dereferenceable(24) @.str.1495)
  %10088 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 1
  %10089 = load ptr, ptr %10088, align 8, !tbaa !231
  %10090 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %10089, i32 0, i32 1
  %10091 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %10090)
  call void @_ZN11spirv_cross8Compiler35flush_control_dependent_expressionsEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %10091)
  br label %11526

10092:                                            ; preds = %919
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA18_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 1 dereferenceable(18) @.str.1496)
  %10093 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 1
  %10094 = load ptr, ptr %10093, align 8, !tbaa !231
  %10095 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %10094, i32 0, i32 1
  %10096 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %10095)
  call void @_ZN11spirv_cross8Compiler35flush_control_dependent_expressionsEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %10096)
  br label %11526

10097:                                            ; preds = %919
  call void @llvm.lifetime.start.p0(i64 32, ptr %756) #9
  %10098 = load ptr, ptr %5, align 8, !tbaa !5
  %10099 = getelementptr inbounds i32, ptr %10098, i64 0
  %10100 = load i32, ptr %10099, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %756, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10100)
  call void @llvm.lifetime.start.p0(i64 32, ptr %757) #9
  %10101 = load ptr, ptr %5, align 8, !tbaa !5
  %10102 = getelementptr inbounds i32, ptr %10101, i64 1
  %10103 = load i32, ptr %10102, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %757, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10103, i1 noundef zeroext true)
          to label %10104 unwind label %10146

10104:                                            ; preds = %10097
  call void @llvm.lifetime.start.p0(i64 32, ptr %758) #9
  %10105 = load ptr, ptr %5, align 8, !tbaa !5
  %10106 = getelementptr inbounds i32, ptr %10105, i64 2
  %10107 = load i32, ptr %10106, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %758, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10107, i1 noundef zeroext true)
          to label %10108 unwind label %10150

10108:                                            ; preds = %10104
  call void @llvm.lifetime.start.p0(i64 32, ptr %759) #9
  %10109 = load ptr, ptr %5, align 8, !tbaa !5
  %10110 = getelementptr inbounds i32, ptr %10109, i64 3
  %10111 = load i32, ptr %10110, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %759, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10111, i1 noundef zeroext true)
          to label %10112 unwind label %10154

10112:                                            ; preds = %10108
  call void @llvm.lifetime.start.p0(i64 32, ptr %760) #9
  %10113 = load ptr, ptr %5, align 8, !tbaa !5
  %10114 = getelementptr inbounds i32, ptr %10113, i64 4
  %10115 = load i32, ptr %10114, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %760, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10115, i1 noundef zeroext true)
          to label %10116 unwind label %10158

10116:                                            ; preds = %10112
  call void @llvm.lifetime.start.p0(i64 32, ptr %761) #9
  %10117 = load ptr, ptr %5, align 8, !tbaa !5
  %10118 = getelementptr inbounds i32, ptr %10117, i64 5
  %10119 = load i32, ptr %10118, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %761, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10119, i1 noundef zeroext true)
          to label %10120 unwind label %10162

10120:                                            ; preds = %10116
  call void @llvm.lifetime.start.p0(i64 32, ptr %762) #9
  %10121 = load ptr, ptr %5, align 8, !tbaa !5
  %10122 = getelementptr inbounds i32, ptr %10121, i64 6
  %10123 = load i32, ptr %10122, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %762, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10123, i1 noundef zeroext true)
          to label %10124 unwind label %10166

10124:                                            ; preds = %10120
  call void @llvm.lifetime.start.p0(i64 32, ptr %763) #9
  %10125 = load ptr, ptr %5, align 8, !tbaa !5
  %10126 = getelementptr inbounds i32, ptr %10125, i64 7
  %10127 = load i32, ptr %10126, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %763, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10127, i1 noundef zeroext true)
          to label %10128 unwind label %10170

10128:                                            ; preds = %10124
  call void @llvm.lifetime.start.p0(i64 32, ptr %764) #9
  %10129 = load ptr, ptr %5, align 8, !tbaa !5
  %10130 = getelementptr inbounds i32, ptr %10129, i64 8
  %10131 = load i32, ptr %10130, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %764, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10131, i1 noundef zeroext true)
          to label %10132 unwind label %10174

10132:                                            ; preds = %10128
  call void @llvm.lifetime.start.p0(i64 32, ptr %765) #9
  %10133 = load ptr, ptr %5, align 8, !tbaa !5
  %10134 = getelementptr inbounds i32, ptr %10133, i64 9
  %10135 = load i32, ptr %10134, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %765, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10135, i1 noundef zeroext true)
          to label %10136 unwind label %10178

10136:                                            ; preds = %10132
  call void @llvm.lifetime.start.p0(i64 32, ptr %766) #9
  %10137 = load ptr, ptr %5, align 8, !tbaa !5
  %10138 = getelementptr inbounds i32, ptr %10137, i64 10
  %10139 = load i32, ptr %10138, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %766, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10139, i1 noundef zeroext true)
          to label %10140 unwind label %10182

10140:                                            ; preds = %10136
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA9_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_SA_SC_SA_SC_SA_SC_SA_SC_SA_SC_SA_SC_SA_SC_SA_SC_SA_SC_SA_SC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 1 dereferenceable(9) @.str.1497, ptr noundef nonnull align 8 dereferenceable(32) %756, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %757, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %758, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %759, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %760, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %761, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %762, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %763, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %764, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %765, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %766, ptr noundef nonnull align 1 dereferenceable(3) @.str.751)
          to label %10141 unwind label %10186

10141:                                            ; preds = %10140
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %766) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %766) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %765) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %765) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %764) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %764) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %763) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %763) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %762) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %762) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %761) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %761) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %760) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %760) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %759) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %759) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %758) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %758) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %757) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %757) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %756) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %756) #9
  %10142 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 1
  %10143 = load ptr, ptr %10142, align 8, !tbaa !231
  %10144 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %10143, i32 0, i32 1
  %10145 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %10144)
  call void @_ZN11spirv_cross8Compiler35flush_control_dependent_expressionsEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %10145)
  br label %11526

10146:                                            ; preds = %10097
  %10147 = landingpad { ptr, i32 }
          cleanup
  %10148 = extractvalue { ptr, i32 } %10147, 0
  store ptr %10148, ptr %23, align 8
  %10149 = extractvalue { ptr, i32 } %10147, 1
  store i32 %10149, ptr %24, align 4
  br label %10199

10150:                                            ; preds = %10104
  %10151 = landingpad { ptr, i32 }
          cleanup
  %10152 = extractvalue { ptr, i32 } %10151, 0
  store ptr %10152, ptr %23, align 8
  %10153 = extractvalue { ptr, i32 } %10151, 1
  store i32 %10153, ptr %24, align 4
  br label %10198

10154:                                            ; preds = %10108
  %10155 = landingpad { ptr, i32 }
          cleanup
  %10156 = extractvalue { ptr, i32 } %10155, 0
  store ptr %10156, ptr %23, align 8
  %10157 = extractvalue { ptr, i32 } %10155, 1
  store i32 %10157, ptr %24, align 4
  br label %10197

10158:                                            ; preds = %10112
  %10159 = landingpad { ptr, i32 }
          cleanup
  %10160 = extractvalue { ptr, i32 } %10159, 0
  store ptr %10160, ptr %23, align 8
  %10161 = extractvalue { ptr, i32 } %10159, 1
  store i32 %10161, ptr %24, align 4
  br label %10196

10162:                                            ; preds = %10116
  %10163 = landingpad { ptr, i32 }
          cleanup
  %10164 = extractvalue { ptr, i32 } %10163, 0
  store ptr %10164, ptr %23, align 8
  %10165 = extractvalue { ptr, i32 } %10163, 1
  store i32 %10165, ptr %24, align 4
  br label %10195

10166:                                            ; preds = %10120
  %10167 = landingpad { ptr, i32 }
          cleanup
  %10168 = extractvalue { ptr, i32 } %10167, 0
  store ptr %10168, ptr %23, align 8
  %10169 = extractvalue { ptr, i32 } %10167, 1
  store i32 %10169, ptr %24, align 4
  br label %10194

10170:                                            ; preds = %10124
  %10171 = landingpad { ptr, i32 }
          cleanup
  %10172 = extractvalue { ptr, i32 } %10171, 0
  store ptr %10172, ptr %23, align 8
  %10173 = extractvalue { ptr, i32 } %10171, 1
  store i32 %10173, ptr %24, align 4
  br label %10193

10174:                                            ; preds = %10128
  %10175 = landingpad { ptr, i32 }
          cleanup
  %10176 = extractvalue { ptr, i32 } %10175, 0
  store ptr %10176, ptr %23, align 8
  %10177 = extractvalue { ptr, i32 } %10175, 1
  store i32 %10177, ptr %24, align 4
  br label %10192

10178:                                            ; preds = %10132
  %10179 = landingpad { ptr, i32 }
          cleanup
  %10180 = extractvalue { ptr, i32 } %10179, 0
  store ptr %10180, ptr %23, align 8
  %10181 = extractvalue { ptr, i32 } %10179, 1
  store i32 %10181, ptr %24, align 4
  br label %10191

10182:                                            ; preds = %10136
  %10183 = landingpad { ptr, i32 }
          cleanup
  %10184 = extractvalue { ptr, i32 } %10183, 0
  store ptr %10184, ptr %23, align 8
  %10185 = extractvalue { ptr, i32 } %10183, 1
  store i32 %10185, ptr %24, align 4
  br label %10190

10186:                                            ; preds = %10140
  %10187 = landingpad { ptr, i32 }
          cleanup
  %10188 = extractvalue { ptr, i32 } %10187, 0
  store ptr %10188, ptr %23, align 8
  %10189 = extractvalue { ptr, i32 } %10187, 1
  store i32 %10189, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %766) #9
  br label %10190

10190:                                            ; preds = %10186, %10182
  call void @llvm.lifetime.end.p0(i64 32, ptr %766) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %765) #9
  br label %10191

10191:                                            ; preds = %10190, %10178
  call void @llvm.lifetime.end.p0(i64 32, ptr %765) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %764) #9
  br label %10192

10192:                                            ; preds = %10191, %10174
  call void @llvm.lifetime.end.p0(i64 32, ptr %764) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %763) #9
  br label %10193

10193:                                            ; preds = %10192, %10170
  call void @llvm.lifetime.end.p0(i64 32, ptr %763) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %762) #9
  br label %10194

10194:                                            ; preds = %10193, %10166
  call void @llvm.lifetime.end.p0(i64 32, ptr %762) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %761) #9
  br label %10195

10195:                                            ; preds = %10194, %10162
  call void @llvm.lifetime.end.p0(i64 32, ptr %761) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %760) #9
  br label %10196

10196:                                            ; preds = %10195, %10158
  call void @llvm.lifetime.end.p0(i64 32, ptr %760) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %759) #9
  br label %10197

10197:                                            ; preds = %10196, %10154
  call void @llvm.lifetime.end.p0(i64 32, ptr %759) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %758) #9
  br label %10198

10198:                                            ; preds = %10197, %10150
  call void @llvm.lifetime.end.p0(i64 32, ptr %758) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %757) #9
  br label %10199

10199:                                            ; preds = %10198, %10146
  call void @llvm.lifetime.end.p0(i64 32, ptr %757) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %756) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %756) #9
  br label %11527

10200:                                            ; preds = %919
  %10201 = load ptr, ptr %5, align 8, !tbaa !5
  %10202 = getelementptr inbounds i32, ptr %10201, i64 10
  %10203 = load i32, ptr %10202, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %767, i32 noundef %10203)
  %10204 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %767, i32 0, i32 0
  %10205 = load i32, ptr %10204, align 4
  %10206 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 %10205, i32 noundef 30)
  br i1 %10206, label %10214, label %10207

10207:                                            ; preds = %10200
  %10208 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %10208, ptr noundef @.str.1498)
          to label %10209 unwind label %10210

10209:                                            ; preds = %10207
  call void @__cxa_throw(ptr %10208, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
  unreachable

10210:                                            ; preds = %10207
  %10211 = landingpad { ptr, i32 }
          cleanup
  %10212 = extractvalue { ptr, i32 } %10211, 0
  store ptr %10212, ptr %23, align 8
  %10213 = extractvalue { ptr, i32 } %10211, 1
  store i32 %10213, ptr %24, align 4
  call void @__cxa_free_exception(ptr %10208) #9
  br label %11527

10214:                                            ; preds = %10200
  call void @llvm.lifetime.start.p0(i64 32, ptr %768) #9
  %10215 = load ptr, ptr %5, align 8, !tbaa !5
  %10216 = getelementptr inbounds i32, ptr %10215, i64 0
  %10217 = load i32, ptr %10216, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %768, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10217)
  call void @llvm.lifetime.start.p0(i64 32, ptr %769) #9
  %10218 = load ptr, ptr %5, align 8, !tbaa !5
  %10219 = getelementptr inbounds i32, ptr %10218, i64 1
  %10220 = load i32, ptr %10219, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %769, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10220, i1 noundef zeroext true)
          to label %10221 unwind label %10267

10221:                                            ; preds = %10214
  call void @llvm.lifetime.start.p0(i64 32, ptr %770) #9
  %10222 = load ptr, ptr %5, align 8, !tbaa !5
  %10223 = getelementptr inbounds i32, ptr %10222, i64 2
  %10224 = load i32, ptr %10223, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %770, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10224, i1 noundef zeroext true)
          to label %10225 unwind label %10271

10225:                                            ; preds = %10221
  call void @llvm.lifetime.start.p0(i64 32, ptr %771) #9
  %10226 = load ptr, ptr %5, align 8, !tbaa !5
  %10227 = getelementptr inbounds i32, ptr %10226, i64 3
  %10228 = load i32, ptr %10227, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %771, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10228, i1 noundef zeroext true)
          to label %10229 unwind label %10275

10229:                                            ; preds = %10225
  call void @llvm.lifetime.start.p0(i64 32, ptr %772) #9
  %10230 = load ptr, ptr %5, align 8, !tbaa !5
  %10231 = getelementptr inbounds i32, ptr %10230, i64 4
  %10232 = load i32, ptr %10231, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %772, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10232, i1 noundef zeroext true)
          to label %10233 unwind label %10279

10233:                                            ; preds = %10229
  call void @llvm.lifetime.start.p0(i64 32, ptr %773) #9
  %10234 = load ptr, ptr %5, align 8, !tbaa !5
  %10235 = getelementptr inbounds i32, ptr %10234, i64 5
  %10236 = load i32, ptr %10235, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %773, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10236, i1 noundef zeroext true)
          to label %10237 unwind label %10283

10237:                                            ; preds = %10233
  call void @llvm.lifetime.start.p0(i64 32, ptr %774) #9
  %10238 = load ptr, ptr %5, align 8, !tbaa !5
  %10239 = getelementptr inbounds i32, ptr %10238, i64 6
  %10240 = load i32, ptr %10239, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %774, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10240, i1 noundef zeroext true)
          to label %10241 unwind label %10287

10241:                                            ; preds = %10237
  call void @llvm.lifetime.start.p0(i64 32, ptr %775) #9
  %10242 = load ptr, ptr %5, align 8, !tbaa !5
  %10243 = getelementptr inbounds i32, ptr %10242, i64 7
  %10244 = load i32, ptr %10243, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %775, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10244, i1 noundef zeroext true)
          to label %10245 unwind label %10291

10245:                                            ; preds = %10241
  call void @llvm.lifetime.start.p0(i64 32, ptr %776) #9
  %10246 = load ptr, ptr %5, align 8, !tbaa !5
  %10247 = getelementptr inbounds i32, ptr %10246, i64 8
  %10248 = load i32, ptr %10247, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %776, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10248, i1 noundef zeroext true)
          to label %10249 unwind label %10295

10249:                                            ; preds = %10245
  call void @llvm.lifetime.start.p0(i64 32, ptr %777) #9
  %10250 = load ptr, ptr %5, align 8, !tbaa !5
  %10251 = getelementptr inbounds i32, ptr %10250, i64 9
  %10252 = load i32, ptr %10251, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %777, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10252, i1 noundef zeroext true)
          to label %10253 unwind label %10299

10253:                                            ; preds = %10249
  call void @llvm.lifetime.start.p0(i64 4, ptr %778) #9
  %10254 = load ptr, ptr %5, align 8, !tbaa !5
  %10255 = getelementptr inbounds i32, ptr %10254, i64 10
  %10256 = load i32, ptr %10255, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %779, i32 noundef %10256)
          to label %10257 unwind label %10303

10257:                                            ; preds = %10253
  %10258 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %779, i32 0, i32 0
  %10259 = load i32, ptr %10258, align 4
  %10260 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 %10259, i32 noundef 30)
          to label %10261 unwind label %10303

10261:                                            ; preds = %10257
  store i32 %10260, ptr %778, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA13_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_SA_SC_SA_SC_SA_SC_SA_SC_SA_SC_SA_SC_SA_SC_SA_SC_SA_SC_jSC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 1 dereferenceable(13) @.str.1499, ptr noundef nonnull align 8 dereferenceable(32) %768, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %769, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %770, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %771, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %772, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %773, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %774, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %775, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %776, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %777, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 4 dereferenceable(4) %778, ptr noundef nonnull align 1 dereferenceable(3) @.str.751)
          to label %10262 unwind label %10303

10262:                                            ; preds = %10261
  call void @llvm.lifetime.end.p0(i64 4, ptr %778) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %777) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %777) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %776) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %776) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %775) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %775) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %774) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %774) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %773) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %773) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %772) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %772) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %771) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %771) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %770) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %770) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %769) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %769) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %768) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %768) #9
  %10263 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 1
  %10264 = load ptr, ptr %10263, align 8, !tbaa !231
  %10265 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %10264, i32 0, i32 1
  %10266 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %10265)
  call void @_ZN11spirv_cross8Compiler35flush_control_dependent_expressionsEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %10266)
  br label %11526

10267:                                            ; preds = %10214
  %10268 = landingpad { ptr, i32 }
          cleanup
  %10269 = extractvalue { ptr, i32 } %10268, 0
  store ptr %10269, ptr %23, align 8
  %10270 = extractvalue { ptr, i32 } %10268, 1
  store i32 %10270, ptr %24, align 4
  br label %10315

10271:                                            ; preds = %10221
  %10272 = landingpad { ptr, i32 }
          cleanup
  %10273 = extractvalue { ptr, i32 } %10272, 0
  store ptr %10273, ptr %23, align 8
  %10274 = extractvalue { ptr, i32 } %10272, 1
  store i32 %10274, ptr %24, align 4
  br label %10314

10275:                                            ; preds = %10225
  %10276 = landingpad { ptr, i32 }
          cleanup
  %10277 = extractvalue { ptr, i32 } %10276, 0
  store ptr %10277, ptr %23, align 8
  %10278 = extractvalue { ptr, i32 } %10276, 1
  store i32 %10278, ptr %24, align 4
  br label %10313

10279:                                            ; preds = %10229
  %10280 = landingpad { ptr, i32 }
          cleanup
  %10281 = extractvalue { ptr, i32 } %10280, 0
  store ptr %10281, ptr %23, align 8
  %10282 = extractvalue { ptr, i32 } %10280, 1
  store i32 %10282, ptr %24, align 4
  br label %10312

10283:                                            ; preds = %10233
  %10284 = landingpad { ptr, i32 }
          cleanup
  %10285 = extractvalue { ptr, i32 } %10284, 0
  store ptr %10285, ptr %23, align 8
  %10286 = extractvalue { ptr, i32 } %10284, 1
  store i32 %10286, ptr %24, align 4
  br label %10311

10287:                                            ; preds = %10237
  %10288 = landingpad { ptr, i32 }
          cleanup
  %10289 = extractvalue { ptr, i32 } %10288, 0
  store ptr %10289, ptr %23, align 8
  %10290 = extractvalue { ptr, i32 } %10288, 1
  store i32 %10290, ptr %24, align 4
  br label %10310

10291:                                            ; preds = %10241
  %10292 = landingpad { ptr, i32 }
          cleanup
  %10293 = extractvalue { ptr, i32 } %10292, 0
  store ptr %10293, ptr %23, align 8
  %10294 = extractvalue { ptr, i32 } %10292, 1
  store i32 %10294, ptr %24, align 4
  br label %10309

10295:                                            ; preds = %10245
  %10296 = landingpad { ptr, i32 }
          cleanup
  %10297 = extractvalue { ptr, i32 } %10296, 0
  store ptr %10297, ptr %23, align 8
  %10298 = extractvalue { ptr, i32 } %10296, 1
  store i32 %10298, ptr %24, align 4
  br label %10308

10299:                                            ; preds = %10249
  %10300 = landingpad { ptr, i32 }
          cleanup
  %10301 = extractvalue { ptr, i32 } %10300, 0
  store ptr %10301, ptr %23, align 8
  %10302 = extractvalue { ptr, i32 } %10300, 1
  store i32 %10302, ptr %24, align 4
  br label %10307

10303:                                            ; preds = %10261, %10257, %10253
  %10304 = landingpad { ptr, i32 }
          cleanup
  %10305 = extractvalue { ptr, i32 } %10304, 0
  store ptr %10305, ptr %23, align 8
  %10306 = extractvalue { ptr, i32 } %10304, 1
  store i32 %10306, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %778) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %777) #9
  br label %10307

10307:                                            ; preds = %10303, %10299
  call void @llvm.lifetime.end.p0(i64 32, ptr %777) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %776) #9
  br label %10308

10308:                                            ; preds = %10307, %10295
  call void @llvm.lifetime.end.p0(i64 32, ptr %776) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %775) #9
  br label %10309

10309:                                            ; preds = %10308, %10291
  call void @llvm.lifetime.end.p0(i64 32, ptr %775) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %774) #9
  br label %10310

10310:                                            ; preds = %10309, %10287
  call void @llvm.lifetime.end.p0(i64 32, ptr %774) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %773) #9
  br label %10311

10311:                                            ; preds = %10310, %10283
  call void @llvm.lifetime.end.p0(i64 32, ptr %773) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %772) #9
  br label %10312

10312:                                            ; preds = %10311, %10279
  call void @llvm.lifetime.end.p0(i64 32, ptr %772) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %771) #9
  br label %10313

10313:                                            ; preds = %10312, %10275
  call void @llvm.lifetime.end.p0(i64 32, ptr %771) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %770) #9
  br label %10314

10314:                                            ; preds = %10313, %10271
  call void @llvm.lifetime.end.p0(i64 32, ptr %770) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %769) #9
  br label %10315

10315:                                            ; preds = %10314, %10267
  call void @llvm.lifetime.end.p0(i64 32, ptr %769) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %768) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %768) #9
  br label %11527

10316:                                            ; preds = %919
  call void @llvm.lifetime.start.p0(i64 32, ptr %780) #9
  %10317 = load ptr, ptr %5, align 8, !tbaa !5
  %10318 = getelementptr inbounds i32, ptr %10317, i64 0
  %10319 = load i32, ptr %10318, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %780, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10319, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %781) #9
  %10320 = load ptr, ptr %5, align 8, !tbaa !5
  %10321 = getelementptr inbounds i32, ptr %10320, i64 1
  %10322 = load i32, ptr %10321, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %781, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10322, i1 noundef zeroext true)
          to label %10323 unwind label %10329

10323:                                            ; preds = %10316
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA19_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_SA_SC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 1 dereferenceable(19) @.str.1500, ptr noundef nonnull align 8 dereferenceable(32) %780, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %781, ptr noundef nonnull align 1 dereferenceable(3) @.str.751)
          to label %10324 unwind label %10333

10324:                                            ; preds = %10323
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %781) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %781) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %780) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %780) #9
  %10325 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 1
  %10326 = load ptr, ptr %10325, align 8, !tbaa !231
  %10327 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %10326, i32 0, i32 1
  %10328 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %10327)
  call void @_ZN11spirv_cross8Compiler35flush_control_dependent_expressionsEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %10328)
  br label %11526

10329:                                            ; preds = %10316
  %10330 = landingpad { ptr, i32 }
          cleanup
  %10331 = extractvalue { ptr, i32 } %10330, 0
  store ptr %10331, ptr %23, align 8
  %10332 = extractvalue { ptr, i32 } %10330, 1
  store i32 %10332, ptr %24, align 4
  br label %10337

10333:                                            ; preds = %10323
  %10334 = landingpad { ptr, i32 }
          cleanup
  %10335 = extractvalue { ptr, i32 } %10334, 0
  store ptr %10335, ptr %23, align 8
  %10336 = extractvalue { ptr, i32 } %10334, 1
  store i32 %10336, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %781) #9
  br label %10337

10337:                                            ; preds = %10333, %10329
  call void @llvm.lifetime.end.p0(i64 32, ptr %781) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %780) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %780) #9
  br label %11527

10338:                                            ; preds = %919
  %10339 = load ptr, ptr %5, align 8, !tbaa !5
  %10340 = getelementptr inbounds i32, ptr %10339, i64 1
  %10341 = load i32, ptr %10340, align 4, !tbaa !16
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %782, i32 noundef %10341)
  %10342 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %782, i32 0, i32 0
  %10343 = load i32, ptr %10342, align 4
  %10344 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 %10343, i32 noundef 30)
  br i1 %10344, label %10352, label %10345

10345:                                            ; preds = %10338
  %10346 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %10346, ptr noundef @.str.1501)
          to label %10347 unwind label %10348

10347:                                            ; preds = %10345
  call void @__cxa_throw(ptr %10346, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
  unreachable

10348:                                            ; preds = %10345
  %10349 = landingpad { ptr, i32 }
          cleanup
  %10350 = extractvalue { ptr, i32 } %10349, 0
  store ptr %10350, ptr %23, align 8
  %10351 = extractvalue { ptr, i32 } %10349, 1
  store i32 %10351, ptr %24, align 4
  call void @__cxa_free_exception(ptr %10346) #9
  br label %11527

10352:                                            ; preds = %10338
  call void @llvm.lifetime.start.p0(i64 32, ptr %783) #9
  %10353 = load ptr, ptr %5, align 8, !tbaa !5
  %10354 = getelementptr inbounds i32, ptr %10353, i64 0
  %10355 = load i32, ptr %10354, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %783, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10355, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 4, ptr %784) #9
  %10356 = load ptr, ptr %5, align 8, !tbaa !5
  %10357 = getelementptr inbounds i32, ptr %10356, i64 1
  %10358 = load i32, ptr %10357, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %785, i32 noundef %10358)
          to label %10359 unwind label %10369

10359:                                            ; preds = %10352
  %10360 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %785, i32 0, i32 0
  %10361 = load i32, ptr %10360, align 4
  %10362 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 %10361, i32 noundef 30)
          to label %10363 unwind label %10369

10363:                                            ; preds = %10359
  store i32 %10362, ptr %784, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA20_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_jSC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 1 dereferenceable(20) @.str.1502, ptr noundef nonnull align 8 dereferenceable(32) %783, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 4 dereferenceable(4) %784, ptr noundef nonnull align 1 dereferenceable(3) @.str.751)
          to label %10364 unwind label %10369

10364:                                            ; preds = %10363
  call void @llvm.lifetime.end.p0(i64 4, ptr %784) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %783) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %783) #9
  %10365 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 1
  %10366 = load ptr, ptr %10365, align 8, !tbaa !231
  %10367 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %10366, i32 0, i32 1
  %10368 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %10367)
  call void @_ZN11spirv_cross8Compiler35flush_control_dependent_expressionsEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %10368)
  br label %11526

10369:                                            ; preds = %10363, %10359, %10352
  %10370 = landingpad { ptr, i32 }
          cleanup
  %10371 = extractvalue { ptr, i32 } %10370, 0
  store ptr %10371, ptr %23, align 8
  %10372 = extractvalue { ptr, i32 } %10370, 1
  store i32 %10372, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %784) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %783) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %783) #9
  br label %11527

10373:                                            ; preds = %919
  %10374 = load ptr, ptr %5, align 8, !tbaa !5
  %10375 = getelementptr inbounds i32, ptr %10374, i64 0
  %10376 = load i32, ptr %10375, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10376)
  call void @llvm.lifetime.start.p0(i64 32, ptr %786) #9
  %10377 = load ptr, ptr %5, align 8, !tbaa !5
  %10378 = getelementptr inbounds i32, ptr %10377, i64 0
  %10379 = load i32, ptr %10378, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %786, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10379, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %787) #9
  %10380 = load ptr, ptr %5, align 8, !tbaa !5
  %10381 = getelementptr inbounds i32, ptr %10380, i64 1
  %10382 = load i32, ptr %10381, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %787, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10382, i1 noundef zeroext true)
          to label %10383 unwind label %10409

10383:                                            ; preds = %10373
  call void @llvm.lifetime.start.p0(i64 32, ptr %788) #9
  %10384 = load ptr, ptr %5, align 8, !tbaa !5
  %10385 = getelementptr inbounds i32, ptr %10384, i64 2
  %10386 = load i32, ptr %10385, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %788, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10386, i1 noundef zeroext true)
          to label %10387 unwind label %10413

10387:                                            ; preds = %10383
  call void @llvm.lifetime.start.p0(i64 32, ptr %789) #9
  %10388 = load ptr, ptr %5, align 8, !tbaa !5
  %10389 = getelementptr inbounds i32, ptr %10388, i64 3
  %10390 = load i32, ptr %10389, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %789, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10390, i1 noundef zeroext true)
          to label %10391 unwind label %10417

10391:                                            ; preds = %10387
  call void @llvm.lifetime.start.p0(i64 32, ptr %790) #9
  %10392 = load ptr, ptr %5, align 8, !tbaa !5
  %10393 = getelementptr inbounds i32, ptr %10392, i64 4
  %10394 = load i32, ptr %10393, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %790, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10394, i1 noundef zeroext true)
          to label %10395 unwind label %10421

10395:                                            ; preds = %10391
  call void @llvm.lifetime.start.p0(i64 32, ptr %791) #9
  %10396 = load ptr, ptr %5, align 8, !tbaa !5
  %10397 = getelementptr inbounds i32, ptr %10396, i64 5
  %10398 = load i32, ptr %10397, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %791, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10398, i1 noundef zeroext true)
          to label %10399 unwind label %10425

10399:                                            ; preds = %10395
  call void @llvm.lifetime.start.p0(i64 32, ptr %792) #9
  %10400 = load ptr, ptr %5, align 8, !tbaa !5
  %10401 = getelementptr inbounds i32, ptr %10400, i64 6
  %10402 = load i32, ptr %10401, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %792, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10402, i1 noundef zeroext true)
          to label %10403 unwind label %10429

10403:                                            ; preds = %10399
  call void @llvm.lifetime.start.p0(i64 32, ptr %793) #9
  %10404 = load ptr, ptr %5, align 8, !tbaa !5
  %10405 = getelementptr inbounds i32, ptr %10404, i64 7
  %10406 = load i32, ptr %10405, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %793, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10406, i1 noundef zeroext true)
          to label %10407 unwind label %10433

10407:                                            ; preds = %10403
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA23_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_SA_SC_SA_SC_SA_SC_SA_SC_SA_SC_SA_SC_SA_SC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 1 dereferenceable(23) @.str.1503, ptr noundef nonnull align 8 dereferenceable(32) %786, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %787, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %788, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %789, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %790, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %791, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %792, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %793, ptr noundef nonnull align 1 dereferenceable(3) @.str.751)
          to label %10408 unwind label %10437

10408:                                            ; preds = %10407
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %793) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %793) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %792) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %792) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %791) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %791) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %790) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %790) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %789) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %789) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %788) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %788) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %787) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %787) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %786) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %786) #9
  br label %11526

10409:                                            ; preds = %10373
  %10410 = landingpad { ptr, i32 }
          cleanup
  %10411 = extractvalue { ptr, i32 } %10410, 0
  store ptr %10411, ptr %23, align 8
  %10412 = extractvalue { ptr, i32 } %10410, 1
  store i32 %10412, ptr %24, align 4
  br label %10447

10413:                                            ; preds = %10383
  %10414 = landingpad { ptr, i32 }
          cleanup
  %10415 = extractvalue { ptr, i32 } %10414, 0
  store ptr %10415, ptr %23, align 8
  %10416 = extractvalue { ptr, i32 } %10414, 1
  store i32 %10416, ptr %24, align 4
  br label %10446

10417:                                            ; preds = %10387
  %10418 = landingpad { ptr, i32 }
          cleanup
  %10419 = extractvalue { ptr, i32 } %10418, 0
  store ptr %10419, ptr %23, align 8
  %10420 = extractvalue { ptr, i32 } %10418, 1
  store i32 %10420, ptr %24, align 4
  br label %10445

10421:                                            ; preds = %10391
  %10422 = landingpad { ptr, i32 }
          cleanup
  %10423 = extractvalue { ptr, i32 } %10422, 0
  store ptr %10423, ptr %23, align 8
  %10424 = extractvalue { ptr, i32 } %10422, 1
  store i32 %10424, ptr %24, align 4
  br label %10444

10425:                                            ; preds = %10395
  %10426 = landingpad { ptr, i32 }
          cleanup
  %10427 = extractvalue { ptr, i32 } %10426, 0
  store ptr %10427, ptr %23, align 8
  %10428 = extractvalue { ptr, i32 } %10426, 1
  store i32 %10428, ptr %24, align 4
  br label %10443

10429:                                            ; preds = %10399
  %10430 = landingpad { ptr, i32 }
          cleanup
  %10431 = extractvalue { ptr, i32 } %10430, 0
  store ptr %10431, ptr %23, align 8
  %10432 = extractvalue { ptr, i32 } %10430, 1
  store i32 %10432, ptr %24, align 4
  br label %10442

10433:                                            ; preds = %10403
  %10434 = landingpad { ptr, i32 }
          cleanup
  %10435 = extractvalue { ptr, i32 } %10434, 0
  store ptr %10435, ptr %23, align 8
  %10436 = extractvalue { ptr, i32 } %10434, 1
  store i32 %10436, ptr %24, align 4
  br label %10441

10437:                                            ; preds = %10407
  %10438 = landingpad { ptr, i32 }
          cleanup
  %10439 = extractvalue { ptr, i32 } %10438, 0
  store ptr %10439, ptr %23, align 8
  %10440 = extractvalue { ptr, i32 } %10438, 1
  store i32 %10440, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %793) #9
  br label %10441

10441:                                            ; preds = %10437, %10433
  call void @llvm.lifetime.end.p0(i64 32, ptr %793) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %792) #9
  br label %10442

10442:                                            ; preds = %10441, %10429
  call void @llvm.lifetime.end.p0(i64 32, ptr %792) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %791) #9
  br label %10443

10443:                                            ; preds = %10442, %10425
  call void @llvm.lifetime.end.p0(i64 32, ptr %791) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %790) #9
  br label %10444

10444:                                            ; preds = %10443, %10421
  call void @llvm.lifetime.end.p0(i64 32, ptr %790) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %789) #9
  br label %10445

10445:                                            ; preds = %10444, %10417
  call void @llvm.lifetime.end.p0(i64 32, ptr %789) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %788) #9
  br label %10446

10446:                                            ; preds = %10445, %10413
  call void @llvm.lifetime.end.p0(i64 32, ptr %788) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %787) #9
  br label %10447

10447:                                            ; preds = %10446, %10409
  call void @llvm.lifetime.end.p0(i64 32, ptr %787) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %786) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %786) #9
  br label %11527

10448:                                            ; preds = %919
  %10449 = load ptr, ptr %5, align 8, !tbaa !5
  %10450 = getelementptr inbounds i32, ptr %10449, i64 0
  %10451 = load i32, ptr %10450, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10451)
  %10452 = load ptr, ptr %5, align 8, !tbaa !5
  %10453 = getelementptr inbounds i32, ptr %10452, i64 0
  %10454 = load i32, ptr %10453, align 4, !tbaa !16
  %10455 = load ptr, ptr %5, align 8, !tbaa !5
  %10456 = getelementptr inbounds i32, ptr %10455, i64 1
  %10457 = load i32, ptr %10456, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %794) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %795) #9
  %10458 = load ptr, ptr %5, align 8, !tbaa !5
  %10459 = getelementptr inbounds i32, ptr %10458, i64 2
  %10460 = load i32, ptr %10459, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %795, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10460, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJRA20_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %794, ptr noundef nonnull align 1 dereferenceable(20) @.str.1504, ptr noundef nonnull align 8 dereferenceable(32) %795, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %10461 unwind label %10464

10461:                                            ; preds = %10448
  %10462 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10454, i32 noundef %10457, ptr noundef nonnull align 8 dereferenceable(32) %794, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %10463 unwind label %10468

10463:                                            ; preds = %10461
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %794) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %795) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %795) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %794) #9
  br label %11526

10464:                                            ; preds = %10448
  %10465 = landingpad { ptr, i32 }
          cleanup
  %10466 = extractvalue { ptr, i32 } %10465, 0
  store ptr %10466, ptr %23, align 8
  %10467 = extractvalue { ptr, i32 } %10465, 1
  store i32 %10467, ptr %24, align 4
  br label %10472

10468:                                            ; preds = %10461
  %10469 = landingpad { ptr, i32 }
          cleanup
  %10470 = extractvalue { ptr, i32 } %10469, 0
  store ptr %10470, ptr %23, align 8
  %10471 = extractvalue { ptr, i32 } %10469, 1
  store i32 %10471, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %794) #9
  br label %10472

10472:                                            ; preds = %10468, %10464
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %795) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %795) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %794) #9
  br label %11527

10473:                                            ; preds = %919
  %10474 = load ptr, ptr %5, align 8, !tbaa !5
  %10475 = getelementptr inbounds i32, ptr %10474, i64 0
  %10476 = load i32, ptr %10475, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10476)
  call void @llvm.lifetime.start.p0(i64 32, ptr %796) #9
  %10477 = load ptr, ptr %5, align 8, !tbaa !5
  %10478 = getelementptr inbounds i32, ptr %10477, i64 0
  %10479 = load i32, ptr %10478, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %796, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10479, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA22_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 1 dereferenceable(22) @.str.1505, ptr noundef nonnull align 8 dereferenceable(32) %796, ptr noundef nonnull align 1 dereferenceable(3) @.str.751)
          to label %10480 unwind label %10481

10480:                                            ; preds = %10473
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %796) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %796) #9
  br label %11526

10481:                                            ; preds = %10473
  %10482 = landingpad { ptr, i32 }
          cleanup
  %10483 = extractvalue { ptr, i32 } %10482, 0
  store ptr %10483, ptr %23, align 8
  %10484 = extractvalue { ptr, i32 } %10482, 1
  store i32 %10484, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %796) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %796) #9
  br label %11527

10485:                                            ; preds = %919
  %10486 = load ptr, ptr %5, align 8, !tbaa !5
  %10487 = getelementptr inbounds i32, ptr %10486, i64 0
  %10488 = load i32, ptr %10487, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10488)
  call void @llvm.lifetime.start.p0(i64 32, ptr %797) #9
  %10489 = load ptr, ptr %5, align 8, !tbaa !5
  %10490 = getelementptr inbounds i32, ptr %10489, i64 0
  %10491 = load i32, ptr %10490, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %797, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10491, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %798) #9
  %10492 = load ptr, ptr %5, align 8, !tbaa !5
  %10493 = getelementptr inbounds i32, ptr %10492, i64 1
  %10494 = load i32, ptr %10493, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %798, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10494, i1 noundef zeroext true)
          to label %10495 unwind label %10497

10495:                                            ; preds = %10485
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA33_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_SA_SC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 1 dereferenceable(33) @.str.1506, ptr noundef nonnull align 8 dereferenceable(32) %797, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %798, ptr noundef nonnull align 1 dereferenceable(3) @.str.751)
          to label %10496 unwind label %10501

10496:                                            ; preds = %10495
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %798) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %798) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %797) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %797) #9
  br label %11526

10497:                                            ; preds = %10485
  %10498 = landingpad { ptr, i32 }
          cleanup
  %10499 = extractvalue { ptr, i32 } %10498, 0
  store ptr %10499, ptr %23, align 8
  %10500 = extractvalue { ptr, i32 } %10498, 1
  store i32 %10500, ptr %24, align 4
  br label %10505

10501:                                            ; preds = %10495
  %10502 = landingpad { ptr, i32 }
          cleanup
  %10503 = extractvalue { ptr, i32 } %10502, 0
  store ptr %10503, ptr %23, align 8
  %10504 = extractvalue { ptr, i32 } %10502, 1
  store i32 %10504, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %798) #9
  br label %10505

10505:                                            ; preds = %10501, %10497
  call void @llvm.lifetime.end.p0(i64 32, ptr %798) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %797) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %797) #9
  br label %11527

10506:                                            ; preds = %919
  %10507 = load ptr, ptr %5, align 8, !tbaa !5
  %10508 = getelementptr inbounds i32, ptr %10507, i64 0
  %10509 = load i32, ptr %10508, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10509)
  call void @llvm.lifetime.start.p0(i64 32, ptr %799) #9
  %10510 = load ptr, ptr %5, align 8, !tbaa !5
  %10511 = getelementptr inbounds i32, ptr %10510, i64 0
  %10512 = load i32, ptr %10511, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %799, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10512, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA32_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 1 dereferenceable(32) @.str.1507, ptr noundef nonnull align 8 dereferenceable(32) %799, ptr noundef nonnull align 1 dereferenceable(3) @.str.751)
          to label %10513 unwind label %10514

10513:                                            ; preds = %10506
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %799) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %799) #9
  br label %11526

10514:                                            ; preds = %10506
  %10515 = landingpad { ptr, i32 }
          cleanup
  %10516 = extractvalue { ptr, i32 } %10515, 0
  store ptr %10516, ptr %23, align 8
  %10517 = extractvalue { ptr, i32 } %10515, 1
  store i32 %10517, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %799) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %799) #9
  br label %11527

10518:                                            ; preds = %919
  %10519 = load ptr, ptr %5, align 8, !tbaa !5
  %10520 = getelementptr inbounds i32, ptr %10519, i64 2
  %10521 = load i32, ptr %10520, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10521)
  %10522 = load ptr, ptr %5, align 8, !tbaa !5
  %10523 = getelementptr inbounds i32, ptr %10522, i64 0
  %10524 = load i32, ptr %10523, align 4, !tbaa !16
  %10525 = load ptr, ptr %5, align 8, !tbaa !5
  %10526 = getelementptr inbounds i32, ptr %10525, i64 1
  %10527 = load i32, ptr %10526, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %800) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %801) #9
  %10528 = load ptr, ptr %5, align 8, !tbaa !5
  %10529 = getelementptr inbounds i32, ptr %10528, i64 2
  %10530 = load i32, ptr %10529, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %801, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10530, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJRA23_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %800, ptr noundef nonnull align 1 dereferenceable(23) @.str.1508, ptr noundef nonnull align 8 dereferenceable(32) %801, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %10531 unwind label %10534

10531:                                            ; preds = %10518
  %10532 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10524, i32 noundef %10527, ptr noundef nonnull align 8 dereferenceable(32) %800, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %10533 unwind label %10538

10533:                                            ; preds = %10531
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %800) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %801) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %801) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %800) #9
  br label %11526

10534:                                            ; preds = %10518
  %10535 = landingpad { ptr, i32 }
          cleanup
  %10536 = extractvalue { ptr, i32 } %10535, 0
  store ptr %10536, ptr %23, align 8
  %10537 = extractvalue { ptr, i32 } %10535, 1
  store i32 %10537, ptr %24, align 4
  br label %10542

10538:                                            ; preds = %10531
  %10539 = landingpad { ptr, i32 }
          cleanup
  %10540 = extractvalue { ptr, i32 } %10539, 0
  store ptr %10540, ptr %23, align 8
  %10541 = extractvalue { ptr, i32 } %10539, 1
  store i32 %10541, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %800) #9
  br label %10542

10542:                                            ; preds = %10538, %10534
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %801) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %801) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %800) #9
  br label %11527

10543:                                            ; preds = %919
  %10544 = load ptr, ptr %5, align 8, !tbaa !5
  %10545 = getelementptr inbounds i32, ptr %10544, i64 2
  %10546 = load i32, ptr %10545, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10546)
  %10547 = load ptr, ptr %5, align 8, !tbaa !5
  %10548 = getelementptr inbounds i32, ptr %10547, i64 0
  %10549 = load i32, ptr %10548, align 4, !tbaa !16
  %10550 = load ptr, ptr %5, align 8, !tbaa !5
  %10551 = getelementptr inbounds i32, ptr %10550, i64 1
  %10552 = load i32, ptr %10551, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %802) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %803) #9
  %10553 = load ptr, ptr %5, align 8, !tbaa !5
  %10554 = getelementptr inbounds i32, ptr %10553, i64 2
  %10555 = load i32, ptr %10554, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %803, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10555, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJRA24_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %802, ptr noundef nonnull align 1 dereferenceable(24) @.str.1509, ptr noundef nonnull align 8 dereferenceable(32) %803, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %10556 unwind label %10559

10556:                                            ; preds = %10543
  %10557 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10549, i32 noundef %10552, ptr noundef nonnull align 8 dereferenceable(32) %802, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %10558 unwind label %10563

10558:                                            ; preds = %10556
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %802) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %803) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %803) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %802) #9
  br label %11526

10559:                                            ; preds = %10543
  %10560 = landingpad { ptr, i32 }
          cleanup
  %10561 = extractvalue { ptr, i32 } %10560, 0
  store ptr %10561, ptr %23, align 8
  %10562 = extractvalue { ptr, i32 } %10560, 1
  store i32 %10562, ptr %24, align 4
  br label %10567

10563:                                            ; preds = %10556
  %10564 = landingpad { ptr, i32 }
          cleanup
  %10565 = extractvalue { ptr, i32 } %10564, 0
  store ptr %10565, ptr %23, align 8
  %10566 = extractvalue { ptr, i32 } %10564, 1
  store i32 %10566, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %802) #9
  br label %10567

10567:                                            ; preds = %10563, %10559
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %803) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %803) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %802) #9
  br label %11527

10568:                                            ; preds = %919
  %10569 = load ptr, ptr %5, align 8, !tbaa !5
  %10570 = getelementptr inbounds i32, ptr %10569, i64 2
  %10571 = load i32, ptr %10570, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10571)
  %10572 = load ptr, ptr %5, align 8, !tbaa !5
  %10573 = getelementptr inbounds i32, ptr %10572, i64 0
  %10574 = load i32, ptr %10573, align 4, !tbaa !16
  %10575 = load ptr, ptr %5, align 8, !tbaa !5
  %10576 = getelementptr inbounds i32, ptr %10575, i64 1
  %10577 = load i32, ptr %10576, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %804) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %805) #9
  %10578 = load ptr, ptr %5, align 8, !tbaa !5
  %10579 = getelementptr inbounds i32, ptr %10578, i64 2
  %10580 = load i32, ptr %10579, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %805, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10580, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJRA30_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %804, ptr noundef nonnull align 1 dereferenceable(30) @.str.1510, ptr noundef nonnull align 8 dereferenceable(32) %805, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %10581 unwind label %10584

10581:                                            ; preds = %10568
  %10582 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10574, i32 noundef %10577, ptr noundef nonnull align 8 dereferenceable(32) %804, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %10583 unwind label %10588

10583:                                            ; preds = %10581
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %804) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %805) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %805) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %804) #9
  br label %11526

10584:                                            ; preds = %10568
  %10585 = landingpad { ptr, i32 }
          cleanup
  %10586 = extractvalue { ptr, i32 } %10585, 0
  store ptr %10586, ptr %23, align 8
  %10587 = extractvalue { ptr, i32 } %10585, 1
  store i32 %10587, ptr %24, align 4
  br label %10592

10588:                                            ; preds = %10581
  %10589 = landingpad { ptr, i32 }
          cleanup
  %10590 = extractvalue { ptr, i32 } %10589, 0
  store ptr %10590, ptr %23, align 8
  %10591 = extractvalue { ptr, i32 } %10589, 1
  store i32 %10591, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %804) #9
  br label %10592

10592:                                            ; preds = %10588, %10584
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %805) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %805) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %804) #9
  br label %11527

10593:                                            ; preds = %919
  %10594 = load ptr, ptr %5, align 8, !tbaa !5
  %10595 = getelementptr inbounds i32, ptr %10594, i64 2
  %10596 = load i32, ptr %10595, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10596)
  %10597 = load ptr, ptr %5, align 8, !tbaa !5
  %10598 = getelementptr inbounds i32, ptr %10597, i64 0
  %10599 = load i32, ptr %10598, align 4, !tbaa !16
  %10600 = load ptr, ptr %5, align 8, !tbaa !5
  %10601 = getelementptr inbounds i32, ptr %10600, i64 1
  %10602 = load i32, ptr %10601, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %806) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %807) #9
  %10603 = load ptr, ptr %5, align 8, !tbaa !5
  %10604 = getelementptr inbounds i32, ptr %10603, i64 2
  %10605 = load i32, ptr %10604, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %807, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10605, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJRA33_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %806, ptr noundef nonnull align 1 dereferenceable(33) @.str.1511, ptr noundef nonnull align 8 dereferenceable(32) %807, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %10606 unwind label %10609

10606:                                            ; preds = %10593
  %10607 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10599, i32 noundef %10602, ptr noundef nonnull align 8 dereferenceable(32) %806, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %10608 unwind label %10613

10608:                                            ; preds = %10606
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %806) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %807) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %807) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %806) #9
  br label %11526

10609:                                            ; preds = %10593
  %10610 = landingpad { ptr, i32 }
          cleanup
  %10611 = extractvalue { ptr, i32 } %10610, 0
  store ptr %10611, ptr %23, align 8
  %10612 = extractvalue { ptr, i32 } %10610, 1
  store i32 %10612, ptr %24, align 4
  br label %10617

10613:                                            ; preds = %10606
  %10614 = landingpad { ptr, i32 }
          cleanup
  %10615 = extractvalue { ptr, i32 } %10614, 0
  store ptr %10615, ptr %23, align 8
  %10616 = extractvalue { ptr, i32 } %10614, 1
  store i32 %10616, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %806) #9
  br label %10617

10617:                                            ; preds = %10613, %10609
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %807) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %807) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %806) #9
  br label %11527

10618:                                            ; preds = %919
  %10619 = load ptr, ptr %5, align 8, !tbaa !5
  %10620 = getelementptr inbounds i32, ptr %10619, i64 2
  %10621 = load i32, ptr %10620, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10621)
  %10622 = load ptr, ptr %5, align 8, !tbaa !5
  %10623 = getelementptr inbounds i32, ptr %10622, i64 0
  %10624 = load i32, ptr %10623, align 4, !tbaa !16
  %10625 = load ptr, ptr %5, align 8, !tbaa !5
  %10626 = getelementptr inbounds i32, ptr %10625, i64 1
  %10627 = load i32, ptr %10626, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %808) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %809) #9
  %10628 = load ptr, ptr %5, align 8, !tbaa !5
  %10629 = getelementptr inbounds i32, ptr %10628, i64 2
  %10630 = load i32, ptr %10629, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %809, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10630, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJRA47_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %808, ptr noundef nonnull align 1 dereferenceable(47) @.str.1512, ptr noundef nonnull align 8 dereferenceable(32) %809, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %10631 unwind label %10634

10631:                                            ; preds = %10618
  %10632 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10624, i32 noundef %10627, ptr noundef nonnull align 8 dereferenceable(32) %808, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %10633 unwind label %10638

10633:                                            ; preds = %10631
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %808) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %809) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %809) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %808) #9
  br label %11526

10634:                                            ; preds = %10618
  %10635 = landingpad { ptr, i32 }
          cleanup
  %10636 = extractvalue { ptr, i32 } %10635, 0
  store ptr %10636, ptr %23, align 8
  %10637 = extractvalue { ptr, i32 } %10635, 1
  store i32 %10637, ptr %24, align 4
  br label %10642

10638:                                            ; preds = %10631
  %10639 = landingpad { ptr, i32 }
          cleanup
  %10640 = extractvalue { ptr, i32 } %10639, 0
  store ptr %10640, ptr %23, align 8
  %10641 = extractvalue { ptr, i32 } %10639, 1
  store i32 %10641, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %808) #9
  br label %10642

10642:                                            ; preds = %10638, %10634
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %809) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %809) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %808) #9
  br label %11527

10643:                                            ; preds = %919
  %10644 = load ptr, ptr %5, align 8, !tbaa !5
  %10645 = getelementptr inbounds i32, ptr %10644, i64 2
  %10646 = load i32, ptr %10645, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10646)
  %10647 = load ptr, ptr %5, align 8, !tbaa !5
  %10648 = getelementptr inbounds i32, ptr %10647, i64 0
  %10649 = load i32, ptr %10648, align 4, !tbaa !16
  %10650 = load ptr, ptr %5, align 8, !tbaa !5
  %10651 = getelementptr inbounds i32, ptr %10650, i64 1
  %10652 = load i32, ptr %10651, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %810) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %811) #9
  %10653 = load ptr, ptr %5, align 8, !tbaa !5
  %10654 = getelementptr inbounds i32, ptr %10653, i64 2
  %10655 = load i32, ptr %10654, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %811, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10655, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %812) #9
  %10656 = load ptr, ptr %5, align 8, !tbaa !5
  %10657 = getelementptr inbounds i32, ptr %10656, i64 3
  %10658 = load i32, ptr %10657, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %812, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10658, i1 noundef zeroext true)
          to label %10659 unwind label %10663

10659:                                            ; preds = %10643
  invoke void @_ZN11spirv_cross4joinIJRA32_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RA6_S1_S9_SB_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %810, ptr noundef nonnull align 1 dereferenceable(32) @.str.1513, ptr noundef nonnull align 8 dereferenceable(32) %811, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 1 dereferenceable(6) @.str.1514, ptr noundef nonnull align 8 dereferenceable(32) %812, ptr noundef nonnull align 1 dereferenceable(3) @.str.1016)
          to label %10660 unwind label %10667

10660:                                            ; preds = %10659
  %10661 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10649, i32 noundef %10652, ptr noundef nonnull align 8 dereferenceable(32) %810, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %10662 unwind label %10671

10662:                                            ; preds = %10660
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %810) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %812) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %812) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %811) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %811) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %810) #9
  br label %11526

10663:                                            ; preds = %10643
  %10664 = landingpad { ptr, i32 }
          cleanup
  %10665 = extractvalue { ptr, i32 } %10664, 0
  store ptr %10665, ptr %23, align 8
  %10666 = extractvalue { ptr, i32 } %10664, 1
  store i32 %10666, ptr %24, align 4
  br label %10676

10667:                                            ; preds = %10659
  %10668 = landingpad { ptr, i32 }
          cleanup
  %10669 = extractvalue { ptr, i32 } %10668, 0
  store ptr %10669, ptr %23, align 8
  %10670 = extractvalue { ptr, i32 } %10668, 1
  store i32 %10670, ptr %24, align 4
  br label %10675

10671:                                            ; preds = %10660
  %10672 = landingpad { ptr, i32 }
          cleanup
  %10673 = extractvalue { ptr, i32 } %10672, 0
  store ptr %10673, ptr %23, align 8
  %10674 = extractvalue { ptr, i32 } %10672, 1
  store i32 %10674, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %810) #9
  br label %10675

10675:                                            ; preds = %10671, %10667
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %812) #9
  br label %10676

10676:                                            ; preds = %10675, %10663
  call void @llvm.lifetime.end.p0(i64 32, ptr %812) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %811) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %811) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %810) #9
  br label %11527

10677:                                            ; preds = %919
  %10678 = load ptr, ptr %5, align 8, !tbaa !5
  %10679 = getelementptr inbounds i32, ptr %10678, i64 2
  %10680 = load i32, ptr %10679, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10680)
  %10681 = load ptr, ptr %5, align 8, !tbaa !5
  %10682 = getelementptr inbounds i32, ptr %10681, i64 0
  %10683 = load i32, ptr %10682, align 4, !tbaa !16
  %10684 = load ptr, ptr %5, align 8, !tbaa !5
  %10685 = getelementptr inbounds i32, ptr %10684, i64 1
  %10686 = load i32, ptr %10685, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %813) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %814) #9
  %10687 = load ptr, ptr %5, align 8, !tbaa !5
  %10688 = getelementptr inbounds i32, ptr %10687, i64 2
  %10689 = load i32, ptr %10688, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %814, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10689, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %815) #9
  %10690 = load ptr, ptr %5, align 8, !tbaa !5
  %10691 = getelementptr inbounds i32, ptr %10690, i64 3
  %10692 = load i32, ptr %10691, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %815, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10692, i1 noundef zeroext true)
          to label %10693 unwind label %10697

10693:                                            ; preds = %10677
  invoke void @_ZN11spirv_cross4joinIJRA29_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RA6_S1_S9_SB_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %813, ptr noundef nonnull align 1 dereferenceable(29) @.str.1515, ptr noundef nonnull align 8 dereferenceable(32) %814, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 1 dereferenceable(6) @.str.1514, ptr noundef nonnull align 8 dereferenceable(32) %815, ptr noundef nonnull align 1 dereferenceable(3) @.str.1016)
          to label %10694 unwind label %10701

10694:                                            ; preds = %10693
  %10695 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10683, i32 noundef %10686, ptr noundef nonnull align 8 dereferenceable(32) %813, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %10696 unwind label %10705

10696:                                            ; preds = %10694
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %813) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %815) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %815) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %814) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %814) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %813) #9
  br label %11526

10697:                                            ; preds = %10677
  %10698 = landingpad { ptr, i32 }
          cleanup
  %10699 = extractvalue { ptr, i32 } %10698, 0
  store ptr %10699, ptr %23, align 8
  %10700 = extractvalue { ptr, i32 } %10698, 1
  store i32 %10700, ptr %24, align 4
  br label %10710

10701:                                            ; preds = %10693
  %10702 = landingpad { ptr, i32 }
          cleanup
  %10703 = extractvalue { ptr, i32 } %10702, 0
  store ptr %10703, ptr %23, align 8
  %10704 = extractvalue { ptr, i32 } %10702, 1
  store i32 %10704, ptr %24, align 4
  br label %10709

10705:                                            ; preds = %10694
  %10706 = landingpad { ptr, i32 }
          cleanup
  %10707 = extractvalue { ptr, i32 } %10706, 0
  store ptr %10707, ptr %23, align 8
  %10708 = extractvalue { ptr, i32 } %10706, 1
  store i32 %10708, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %813) #9
  br label %10709

10709:                                            ; preds = %10705, %10701
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %815) #9
  br label %10710

10710:                                            ; preds = %10709, %10697
  call void @llvm.lifetime.end.p0(i64 32, ptr %815) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %814) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %814) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %813) #9
  br label %11527

10711:                                            ; preds = %919
  %10712 = load ptr, ptr %5, align 8, !tbaa !5
  %10713 = getelementptr inbounds i32, ptr %10712, i64 2
  %10714 = load i32, ptr %10713, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10714)
  %10715 = load ptr, ptr %5, align 8, !tbaa !5
  %10716 = getelementptr inbounds i32, ptr %10715, i64 0
  %10717 = load i32, ptr %10716, align 4, !tbaa !16
  %10718 = load ptr, ptr %5, align 8, !tbaa !5
  %10719 = getelementptr inbounds i32, ptr %10718, i64 1
  %10720 = load i32, ptr %10719, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %816) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %817) #9
  %10721 = load ptr, ptr %5, align 8, !tbaa !5
  %10722 = getelementptr inbounds i32, ptr %10721, i64 2
  %10723 = load i32, ptr %10722, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %817, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10723, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %818) #9
  %10724 = load ptr, ptr %5, align 8, !tbaa !5
  %10725 = getelementptr inbounds i32, ptr %10724, i64 3
  %10726 = load i32, ptr %10725, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %818, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10726, i1 noundef zeroext true)
          to label %10727 unwind label %10731

10727:                                            ; preds = %10711
  invoke void @_ZN11spirv_cross4joinIJRA47_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RA6_S1_S9_SB_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %816, ptr noundef nonnull align 1 dereferenceable(47) @.str.1516, ptr noundef nonnull align 8 dereferenceable(32) %817, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 1 dereferenceable(6) @.str.1514, ptr noundef nonnull align 8 dereferenceable(32) %818, ptr noundef nonnull align 1 dereferenceable(3) @.str.1016)
          to label %10728 unwind label %10735

10728:                                            ; preds = %10727
  %10729 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10717, i32 noundef %10720, ptr noundef nonnull align 8 dereferenceable(32) %816, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %10730 unwind label %10739

10730:                                            ; preds = %10728
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %816) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %818) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %818) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %817) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %817) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %816) #9
  br label %11526

10731:                                            ; preds = %10711
  %10732 = landingpad { ptr, i32 }
          cleanup
  %10733 = extractvalue { ptr, i32 } %10732, 0
  store ptr %10733, ptr %23, align 8
  %10734 = extractvalue { ptr, i32 } %10732, 1
  store i32 %10734, ptr %24, align 4
  br label %10744

10735:                                            ; preds = %10727
  %10736 = landingpad { ptr, i32 }
          cleanup
  %10737 = extractvalue { ptr, i32 } %10736, 0
  store ptr %10737, ptr %23, align 8
  %10738 = extractvalue { ptr, i32 } %10736, 1
  store i32 %10738, ptr %24, align 4
  br label %10743

10739:                                            ; preds = %10728
  %10740 = landingpad { ptr, i32 }
          cleanup
  %10741 = extractvalue { ptr, i32 } %10740, 0
  store ptr %10741, ptr %23, align 8
  %10742 = extractvalue { ptr, i32 } %10740, 1
  store i32 %10742, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %816) #9
  br label %10743

10743:                                            ; preds = %10739, %10735
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %818) #9
  br label %10744

10744:                                            ; preds = %10743, %10731
  call void @llvm.lifetime.end.p0(i64 32, ptr %818) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %817) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %817) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %816) #9
  br label %11527

10745:                                            ; preds = %919
  %10746 = load ptr, ptr %5, align 8, !tbaa !5
  %10747 = getelementptr inbounds i32, ptr %10746, i64 2
  %10748 = load i32, ptr %10747, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10748)
  %10749 = load ptr, ptr %5, align 8, !tbaa !5
  %10750 = getelementptr inbounds i32, ptr %10749, i64 0
  %10751 = load i32, ptr %10750, align 4, !tbaa !16
  %10752 = load ptr, ptr %5, align 8, !tbaa !5
  %10753 = getelementptr inbounds i32, ptr %10752, i64 1
  %10754 = load i32, ptr %10753, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %819) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %820) #9
  %10755 = load ptr, ptr %5, align 8, !tbaa !5
  %10756 = getelementptr inbounds i32, ptr %10755, i64 2
  %10757 = load i32, ptr %10756, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %820, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10757, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %821) #9
  %10758 = load ptr, ptr %5, align 8, !tbaa !5
  %10759 = getelementptr inbounds i32, ptr %10758, i64 3
  %10760 = load i32, ptr %10759, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %821, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10760, i1 noundef zeroext true)
          to label %10761 unwind label %10765

10761:                                            ; preds = %10745
  invoke void @_ZN11spirv_cross4joinIJRA38_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RA6_S1_S9_SB_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %819, ptr noundef nonnull align 1 dereferenceable(38) @.str.1517, ptr noundef nonnull align 8 dereferenceable(32) %820, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 1 dereferenceable(6) @.str.1514, ptr noundef nonnull align 8 dereferenceable(32) %821, ptr noundef nonnull align 1 dereferenceable(3) @.str.1016)
          to label %10762 unwind label %10769

10762:                                            ; preds = %10761
  %10763 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10751, i32 noundef %10754, ptr noundef nonnull align 8 dereferenceable(32) %819, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %10764 unwind label %10773

10764:                                            ; preds = %10762
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %819) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %821) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %821) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %820) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %820) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %819) #9
  br label %11526

10765:                                            ; preds = %10745
  %10766 = landingpad { ptr, i32 }
          cleanup
  %10767 = extractvalue { ptr, i32 } %10766, 0
  store ptr %10767, ptr %23, align 8
  %10768 = extractvalue { ptr, i32 } %10766, 1
  store i32 %10768, ptr %24, align 4
  br label %10778

10769:                                            ; preds = %10761
  %10770 = landingpad { ptr, i32 }
          cleanup
  %10771 = extractvalue { ptr, i32 } %10770, 0
  store ptr %10771, ptr %23, align 8
  %10772 = extractvalue { ptr, i32 } %10770, 1
  store i32 %10772, ptr %24, align 4
  br label %10777

10773:                                            ; preds = %10762
  %10774 = landingpad { ptr, i32 }
          cleanup
  %10775 = extractvalue { ptr, i32 } %10774, 0
  store ptr %10775, ptr %23, align 8
  %10776 = extractvalue { ptr, i32 } %10774, 1
  store i32 %10776, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %819) #9
  br label %10777

10777:                                            ; preds = %10773, %10769
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %821) #9
  br label %10778

10778:                                            ; preds = %10777, %10765
  call void @llvm.lifetime.end.p0(i64 32, ptr %821) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %820) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %820) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %819) #9
  br label %11527

10779:                                            ; preds = %919
  %10780 = load ptr, ptr %5, align 8, !tbaa !5
  %10781 = getelementptr inbounds i32, ptr %10780, i64 2
  %10782 = load i32, ptr %10781, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10782)
  %10783 = load ptr, ptr %5, align 8, !tbaa !5
  %10784 = getelementptr inbounds i32, ptr %10783, i64 0
  %10785 = load i32, ptr %10784, align 4, !tbaa !16
  %10786 = load ptr, ptr %5, align 8, !tbaa !5
  %10787 = getelementptr inbounds i32, ptr %10786, i64 1
  %10788 = load i32, ptr %10787, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %822) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %823) #9
  %10789 = load ptr, ptr %5, align 8, !tbaa !5
  %10790 = getelementptr inbounds i32, ptr %10789, i64 2
  %10791 = load i32, ptr %10790, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %823, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10791, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %824) #9
  %10792 = load ptr, ptr %5, align 8, !tbaa !5
  %10793 = getelementptr inbounds i32, ptr %10792, i64 3
  %10794 = load i32, ptr %10793, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %824, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10794, i1 noundef zeroext true)
          to label %10795 unwind label %10799

10795:                                            ; preds = %10779
  invoke void @_ZN11spirv_cross4joinIJRA66_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RA6_S1_S9_SB_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %822, ptr noundef nonnull align 1 dereferenceable(66) @.str.1518, ptr noundef nonnull align 8 dereferenceable(32) %823, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 1 dereferenceable(6) @.str.1514, ptr noundef nonnull align 8 dereferenceable(32) %824, ptr noundef nonnull align 1 dereferenceable(3) @.str.1016)
          to label %10796 unwind label %10803

10796:                                            ; preds = %10795
  %10797 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10785, i32 noundef %10788, ptr noundef nonnull align 8 dereferenceable(32) %822, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %10798 unwind label %10807

10798:                                            ; preds = %10796
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %822) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %824) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %824) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %823) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %823) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %822) #9
  br label %11526

10799:                                            ; preds = %10779
  %10800 = landingpad { ptr, i32 }
          cleanup
  %10801 = extractvalue { ptr, i32 } %10800, 0
  store ptr %10801, ptr %23, align 8
  %10802 = extractvalue { ptr, i32 } %10800, 1
  store i32 %10802, ptr %24, align 4
  br label %10812

10803:                                            ; preds = %10795
  %10804 = landingpad { ptr, i32 }
          cleanup
  %10805 = extractvalue { ptr, i32 } %10804, 0
  store ptr %10805, ptr %23, align 8
  %10806 = extractvalue { ptr, i32 } %10804, 1
  store i32 %10806, ptr %24, align 4
  br label %10811

10807:                                            ; preds = %10796
  %10808 = landingpad { ptr, i32 }
          cleanup
  %10809 = extractvalue { ptr, i32 } %10808, 0
  store ptr %10809, ptr %23, align 8
  %10810 = extractvalue { ptr, i32 } %10808, 1
  store i32 %10810, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %822) #9
  br label %10811

10811:                                            ; preds = %10807, %10803
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %824) #9
  br label %10812

10812:                                            ; preds = %10811, %10799
  call void @llvm.lifetime.end.p0(i64 32, ptr %824) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %823) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %823) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %822) #9
  br label %11527

10813:                                            ; preds = %919
  %10814 = load ptr, ptr %5, align 8, !tbaa !5
  %10815 = getelementptr inbounds i32, ptr %10814, i64 2
  %10816 = load i32, ptr %10815, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10816)
  %10817 = load ptr, ptr %5, align 8, !tbaa !5
  %10818 = getelementptr inbounds i32, ptr %10817, i64 0
  %10819 = load i32, ptr %10818, align 4, !tbaa !16
  %10820 = load ptr, ptr %5, align 8, !tbaa !5
  %10821 = getelementptr inbounds i32, ptr %10820, i64 1
  %10822 = load i32, ptr %10821, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %825) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %826) #9
  %10823 = load ptr, ptr %5, align 8, !tbaa !5
  %10824 = getelementptr inbounds i32, ptr %10823, i64 2
  %10825 = load i32, ptr %10824, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %826, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10825, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %827) #9
  %10826 = load ptr, ptr %5, align 8, !tbaa !5
  %10827 = getelementptr inbounds i32, ptr %10826, i64 3
  %10828 = load i32, ptr %10827, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %827, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10828, i1 noundef zeroext true)
          to label %10829 unwind label %10833

10829:                                            ; preds = %10813
  invoke void @_ZN11spirv_cross4joinIJRA41_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RA6_S1_S9_SB_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %825, ptr noundef nonnull align 1 dereferenceable(41) @.str.1519, ptr noundef nonnull align 8 dereferenceable(32) %826, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 1 dereferenceable(6) @.str.1514, ptr noundef nonnull align 8 dereferenceable(32) %827, ptr noundef nonnull align 1 dereferenceable(3) @.str.1016)
          to label %10830 unwind label %10837

10830:                                            ; preds = %10829
  %10831 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10819, i32 noundef %10822, ptr noundef nonnull align 8 dereferenceable(32) %825, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %10832 unwind label %10841

10832:                                            ; preds = %10830
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %825) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %827) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %827) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %826) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %826) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %825) #9
  br label %11526

10833:                                            ; preds = %10813
  %10834 = landingpad { ptr, i32 }
          cleanup
  %10835 = extractvalue { ptr, i32 } %10834, 0
  store ptr %10835, ptr %23, align 8
  %10836 = extractvalue { ptr, i32 } %10834, 1
  store i32 %10836, ptr %24, align 4
  br label %10846

10837:                                            ; preds = %10829
  %10838 = landingpad { ptr, i32 }
          cleanup
  %10839 = extractvalue { ptr, i32 } %10838, 0
  store ptr %10839, ptr %23, align 8
  %10840 = extractvalue { ptr, i32 } %10838, 1
  store i32 %10840, ptr %24, align 4
  br label %10845

10841:                                            ; preds = %10830
  %10842 = landingpad { ptr, i32 }
          cleanup
  %10843 = extractvalue { ptr, i32 } %10842, 0
  store ptr %10843, ptr %23, align 8
  %10844 = extractvalue { ptr, i32 } %10842, 1
  store i32 %10844, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %825) #9
  br label %10845

10845:                                            ; preds = %10841, %10837
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %827) #9
  br label %10846

10846:                                            ; preds = %10845, %10833
  call void @llvm.lifetime.end.p0(i64 32, ptr %827) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %826) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %826) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %825) #9
  br label %11527

10847:                                            ; preds = %919
  %10848 = load ptr, ptr %5, align 8, !tbaa !5
  %10849 = getelementptr inbounds i32, ptr %10848, i64 2
  %10850 = load i32, ptr %10849, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10850)
  %10851 = load ptr, ptr %5, align 8, !tbaa !5
  %10852 = getelementptr inbounds i32, ptr %10851, i64 0
  %10853 = load i32, ptr %10852, align 4, !tbaa !16
  %10854 = load ptr, ptr %5, align 8, !tbaa !5
  %10855 = getelementptr inbounds i32, ptr %10854, i64 1
  %10856 = load i32, ptr %10855, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %828) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %829) #9
  %10857 = load ptr, ptr %5, align 8, !tbaa !5
  %10858 = getelementptr inbounds i32, ptr %10857, i64 2
  %10859 = load i32, ptr %10858, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %829, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10859, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %830) #9
  %10860 = load ptr, ptr %5, align 8, !tbaa !5
  %10861 = getelementptr inbounds i32, ptr %10860, i64 3
  %10862 = load i32, ptr %10861, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %830, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10862, i1 noundef zeroext true)
          to label %10863 unwind label %10867

10863:                                            ; preds = %10847
  invoke void @_ZN11spirv_cross4joinIJRA42_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RA6_S1_S9_SB_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %828, ptr noundef nonnull align 1 dereferenceable(42) @.str.1520, ptr noundef nonnull align 8 dereferenceable(32) %829, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 1 dereferenceable(6) @.str.1514, ptr noundef nonnull align 8 dereferenceable(32) %830, ptr noundef nonnull align 1 dereferenceable(3) @.str.1016)
          to label %10864 unwind label %10871

10864:                                            ; preds = %10863
  %10865 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10853, i32 noundef %10856, ptr noundef nonnull align 8 dereferenceable(32) %828, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %10866 unwind label %10875

10866:                                            ; preds = %10864
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %828) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %830) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %830) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %829) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %829) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %828) #9
  br label %11526

10867:                                            ; preds = %10847
  %10868 = landingpad { ptr, i32 }
          cleanup
  %10869 = extractvalue { ptr, i32 } %10868, 0
  store ptr %10869, ptr %23, align 8
  %10870 = extractvalue { ptr, i32 } %10868, 1
  store i32 %10870, ptr %24, align 4
  br label %10880

10871:                                            ; preds = %10863
  %10872 = landingpad { ptr, i32 }
          cleanup
  %10873 = extractvalue { ptr, i32 } %10872, 0
  store ptr %10873, ptr %23, align 8
  %10874 = extractvalue { ptr, i32 } %10872, 1
  store i32 %10874, ptr %24, align 4
  br label %10879

10875:                                            ; preds = %10864
  %10876 = landingpad { ptr, i32 }
          cleanup
  %10877 = extractvalue { ptr, i32 } %10876, 0
  store ptr %10877, ptr %23, align 8
  %10878 = extractvalue { ptr, i32 } %10876, 1
  store i32 %10878, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %828) #9
  br label %10879

10879:                                            ; preds = %10875, %10871
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %830) #9
  br label %10880

10880:                                            ; preds = %10879, %10867
  call void @llvm.lifetime.end.p0(i64 32, ptr %830) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %829) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %829) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %828) #9
  br label %11527

10881:                                            ; preds = %919
  %10882 = load ptr, ptr %5, align 8, !tbaa !5
  %10883 = getelementptr inbounds i32, ptr %10882, i64 2
  %10884 = load i32, ptr %10883, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10884)
  %10885 = load ptr, ptr %5, align 8, !tbaa !5
  %10886 = getelementptr inbounds i32, ptr %10885, i64 0
  %10887 = load i32, ptr %10886, align 4, !tbaa !16
  %10888 = load ptr, ptr %5, align 8, !tbaa !5
  %10889 = getelementptr inbounds i32, ptr %10888, i64 1
  %10890 = load i32, ptr %10889, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %831) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %832) #9
  %10891 = load ptr, ptr %5, align 8, !tbaa !5
  %10892 = getelementptr inbounds i32, ptr %10891, i64 2
  %10893 = load i32, ptr %10892, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %832, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10893, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %833) #9
  %10894 = load ptr, ptr %5, align 8, !tbaa !5
  %10895 = getelementptr inbounds i32, ptr %10894, i64 3
  %10896 = load i32, ptr %10895, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %833, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10896, i1 noundef zeroext true)
          to label %10897 unwind label %10901

10897:                                            ; preds = %10881
  invoke void @_ZN11spirv_cross4joinIJRA40_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RA6_S1_S9_SB_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %831, ptr noundef nonnull align 1 dereferenceable(40) @.str.1521, ptr noundef nonnull align 8 dereferenceable(32) %832, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 1 dereferenceable(6) @.str.1514, ptr noundef nonnull align 8 dereferenceable(32) %833, ptr noundef nonnull align 1 dereferenceable(3) @.str.1016)
          to label %10898 unwind label %10905

10898:                                            ; preds = %10897
  %10899 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10887, i32 noundef %10890, ptr noundef nonnull align 8 dereferenceable(32) %831, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %10900 unwind label %10909

10900:                                            ; preds = %10898
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %831) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %833) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %833) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %832) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %832) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %831) #9
  br label %11526

10901:                                            ; preds = %10881
  %10902 = landingpad { ptr, i32 }
          cleanup
  %10903 = extractvalue { ptr, i32 } %10902, 0
  store ptr %10903, ptr %23, align 8
  %10904 = extractvalue { ptr, i32 } %10902, 1
  store i32 %10904, ptr %24, align 4
  br label %10914

10905:                                            ; preds = %10897
  %10906 = landingpad { ptr, i32 }
          cleanup
  %10907 = extractvalue { ptr, i32 } %10906, 0
  store ptr %10907, ptr %23, align 8
  %10908 = extractvalue { ptr, i32 } %10906, 1
  store i32 %10908, ptr %24, align 4
  br label %10913

10909:                                            ; preds = %10898
  %10910 = landingpad { ptr, i32 }
          cleanup
  %10911 = extractvalue { ptr, i32 } %10910, 0
  store ptr %10911, ptr %23, align 8
  %10912 = extractvalue { ptr, i32 } %10910, 1
  store i32 %10912, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %831) #9
  br label %10913

10913:                                            ; preds = %10909, %10905
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %833) #9
  br label %10914

10914:                                            ; preds = %10913, %10901
  call void @llvm.lifetime.end.p0(i64 32, ptr %833) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %832) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %832) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %831) #9
  br label %11527

10915:                                            ; preds = %919
  %10916 = load ptr, ptr %5, align 8, !tbaa !5
  %10917 = getelementptr inbounds i32, ptr %10916, i64 2
  %10918 = load i32, ptr %10917, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10918)
  %10919 = load ptr, ptr %5, align 8, !tbaa !5
  %10920 = getelementptr inbounds i32, ptr %10919, i64 0
  %10921 = load i32, ptr %10920, align 4, !tbaa !16
  %10922 = load ptr, ptr %5, align 8, !tbaa !5
  %10923 = getelementptr inbounds i32, ptr %10922, i64 1
  %10924 = load i32, ptr %10923, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %834) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %835) #9
  %10925 = load ptr, ptr %5, align 8, !tbaa !5
  %10926 = getelementptr inbounds i32, ptr %10925, i64 2
  %10927 = load i32, ptr %10926, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %835, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10927, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %836) #9
  %10928 = load ptr, ptr %5, align 8, !tbaa !5
  %10929 = getelementptr inbounds i32, ptr %10928, i64 3
  %10930 = load i32, ptr %10929, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %836, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10930, i1 noundef zeroext true)
          to label %10931 unwind label %10935

10931:                                            ; preds = %10915
  invoke void @_ZN11spirv_cross4joinIJRA37_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RA6_S1_S9_SB_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %834, ptr noundef nonnull align 1 dereferenceable(37) @.str.1522, ptr noundef nonnull align 8 dereferenceable(32) %835, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 1 dereferenceable(6) @.str.1514, ptr noundef nonnull align 8 dereferenceable(32) %836, ptr noundef nonnull align 1 dereferenceable(3) @.str.1016)
          to label %10932 unwind label %10939

10932:                                            ; preds = %10931
  %10933 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10921, i32 noundef %10924, ptr noundef nonnull align 8 dereferenceable(32) %834, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %10934 unwind label %10943

10934:                                            ; preds = %10932
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %834) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %836) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %836) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %835) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %835) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %834) #9
  br label %11526

10935:                                            ; preds = %10915
  %10936 = landingpad { ptr, i32 }
          cleanup
  %10937 = extractvalue { ptr, i32 } %10936, 0
  store ptr %10937, ptr %23, align 8
  %10938 = extractvalue { ptr, i32 } %10936, 1
  store i32 %10938, ptr %24, align 4
  br label %10948

10939:                                            ; preds = %10931
  %10940 = landingpad { ptr, i32 }
          cleanup
  %10941 = extractvalue { ptr, i32 } %10940, 0
  store ptr %10941, ptr %23, align 8
  %10942 = extractvalue { ptr, i32 } %10940, 1
  store i32 %10942, ptr %24, align 4
  br label %10947

10943:                                            ; preds = %10932
  %10944 = landingpad { ptr, i32 }
          cleanup
  %10945 = extractvalue { ptr, i32 } %10944, 0
  store ptr %10945, ptr %23, align 8
  %10946 = extractvalue { ptr, i32 } %10944, 1
  store i32 %10946, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %834) #9
  br label %10947

10947:                                            ; preds = %10943, %10939
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %836) #9
  br label %10948

10948:                                            ; preds = %10947, %10935
  call void @llvm.lifetime.end.p0(i64 32, ptr %836) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %835) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %835) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %834) #9
  br label %11527

10949:                                            ; preds = %919
  %10950 = load ptr, ptr %5, align 8, !tbaa !5
  %10951 = getelementptr inbounds i32, ptr %10950, i64 2
  %10952 = load i32, ptr %10951, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10952)
  %10953 = load ptr, ptr %5, align 8, !tbaa !5
  %10954 = getelementptr inbounds i32, ptr %10953, i64 0
  %10955 = load i32, ptr %10954, align 4, !tbaa !16
  %10956 = load ptr, ptr %5, align 8, !tbaa !5
  %10957 = getelementptr inbounds i32, ptr %10956, i64 1
  %10958 = load i32, ptr %10957, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %837) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %838) #9
  %10959 = load ptr, ptr %5, align 8, !tbaa !5
  %10960 = getelementptr inbounds i32, ptr %10959, i64 2
  %10961 = load i32, ptr %10960, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %838, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10961, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %839) #9
  %10962 = load ptr, ptr %5, align 8, !tbaa !5
  %10963 = getelementptr inbounds i32, ptr %10962, i64 3
  %10964 = load i32, ptr %10963, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %839, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10964, i1 noundef zeroext true)
          to label %10965 unwind label %10969

10965:                                            ; preds = %10949
  invoke void @_ZN11spirv_cross4joinIJRA46_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RA6_S1_S9_SB_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %837, ptr noundef nonnull align 1 dereferenceable(46) @.str.1523, ptr noundef nonnull align 8 dereferenceable(32) %838, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 1 dereferenceable(6) @.str.1514, ptr noundef nonnull align 8 dereferenceable(32) %839, ptr noundef nonnull align 1 dereferenceable(3) @.str.1016)
          to label %10966 unwind label %10973

10966:                                            ; preds = %10965
  %10967 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10955, i32 noundef %10958, ptr noundef nonnull align 8 dereferenceable(32) %837, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %10968 unwind label %10977

10968:                                            ; preds = %10966
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %837) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %839) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %839) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %838) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %838) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %837) #9
  br label %11526

10969:                                            ; preds = %10949
  %10970 = landingpad { ptr, i32 }
          cleanup
  %10971 = extractvalue { ptr, i32 } %10970, 0
  store ptr %10971, ptr %23, align 8
  %10972 = extractvalue { ptr, i32 } %10970, 1
  store i32 %10972, ptr %24, align 4
  br label %10982

10973:                                            ; preds = %10965
  %10974 = landingpad { ptr, i32 }
          cleanup
  %10975 = extractvalue { ptr, i32 } %10974, 0
  store ptr %10975, ptr %23, align 8
  %10976 = extractvalue { ptr, i32 } %10974, 1
  store i32 %10976, ptr %24, align 4
  br label %10981

10977:                                            ; preds = %10966
  %10978 = landingpad { ptr, i32 }
          cleanup
  %10979 = extractvalue { ptr, i32 } %10978, 0
  store ptr %10979, ptr %23, align 8
  %10980 = extractvalue { ptr, i32 } %10978, 1
  store i32 %10980, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %837) #9
  br label %10981

10981:                                            ; preds = %10977, %10973
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %839) #9
  br label %10982

10982:                                            ; preds = %10981, %10969
  call void @llvm.lifetime.end.p0(i64 32, ptr %839) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %838) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %838) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %837) #9
  br label %11527

10983:                                            ; preds = %919
  %10984 = load ptr, ptr %5, align 8, !tbaa !5
  %10985 = getelementptr inbounds i32, ptr %10984, i64 2
  %10986 = load i32, ptr %10985, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10986)
  %10987 = load ptr, ptr %5, align 8, !tbaa !5
  %10988 = getelementptr inbounds i32, ptr %10987, i64 0
  %10989 = load i32, ptr %10988, align 4, !tbaa !16
  %10990 = load ptr, ptr %5, align 8, !tbaa !5
  %10991 = getelementptr inbounds i32, ptr %10990, i64 1
  %10992 = load i32, ptr %10991, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %840) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %841) #9
  %10993 = load ptr, ptr %5, align 8, !tbaa !5
  %10994 = getelementptr inbounds i32, ptr %10993, i64 2
  %10995 = load i32, ptr %10994, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %841, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10995, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %842) #9
  %10996 = load ptr, ptr %5, align 8, !tbaa !5
  %10997 = getelementptr inbounds i32, ptr %10996, i64 3
  %10998 = load i32, ptr %10997, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %842, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10998, i1 noundef zeroext true)
          to label %10999 unwind label %11003

10999:                                            ; preds = %10983
  invoke void @_ZN11spirv_cross4joinIJRA43_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RA6_S1_S9_SB_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %840, ptr noundef nonnull align 1 dereferenceable(43) @.str.1524, ptr noundef nonnull align 8 dereferenceable(32) %841, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 1 dereferenceable(6) @.str.1514, ptr noundef nonnull align 8 dereferenceable(32) %842, ptr noundef nonnull align 1 dereferenceable(3) @.str.1016)
          to label %11000 unwind label %11007

11000:                                            ; preds = %10999
  %11001 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %10989, i32 noundef %10992, ptr noundef nonnull align 8 dereferenceable(32) %840, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %11002 unwind label %11011

11002:                                            ; preds = %11000
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %840) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %842) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %842) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %841) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %841) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %840) #9
  br label %11526

11003:                                            ; preds = %10983
  %11004 = landingpad { ptr, i32 }
          cleanup
  %11005 = extractvalue { ptr, i32 } %11004, 0
  store ptr %11005, ptr %23, align 8
  %11006 = extractvalue { ptr, i32 } %11004, 1
  store i32 %11006, ptr %24, align 4
  br label %11016

11007:                                            ; preds = %10999
  %11008 = landingpad { ptr, i32 }
          cleanup
  %11009 = extractvalue { ptr, i32 } %11008, 0
  store ptr %11009, ptr %23, align 8
  %11010 = extractvalue { ptr, i32 } %11008, 1
  store i32 %11010, ptr %24, align 4
  br label %11015

11011:                                            ; preds = %11000
  %11012 = landingpad { ptr, i32 }
          cleanup
  %11013 = extractvalue { ptr, i32 } %11012, 0
  store ptr %11013, ptr %23, align 8
  %11014 = extractvalue { ptr, i32 } %11012, 1
  store i32 %11014, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %840) #9
  br label %11015

11015:                                            ; preds = %11011, %11007
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %842) #9
  br label %11016

11016:                                            ; preds = %11015, %11003
  call void @llvm.lifetime.end.p0(i64 32, ptr %842) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %841) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %841) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %840) #9
  br label %11527

11017:                                            ; preds = %919
  %11018 = load ptr, ptr %5, align 8, !tbaa !5
  %11019 = getelementptr inbounds i32, ptr %11018, i64 2
  %11020 = load i32, ptr %11019, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %11020)
  %11021 = load ptr, ptr %5, align 8, !tbaa !5
  %11022 = getelementptr inbounds i32, ptr %11021, i64 0
  %11023 = load i32, ptr %11022, align 4, !tbaa !16
  %11024 = load ptr, ptr %5, align 8, !tbaa !5
  %11025 = getelementptr inbounds i32, ptr %11024, i64 1
  %11026 = load i32, ptr %11025, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %843) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %844) #9
  %11027 = load ptr, ptr %5, align 8, !tbaa !5
  %11028 = getelementptr inbounds i32, ptr %11027, i64 2
  %11029 = load i32, ptr %11028, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %844, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %11029, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %845) #9
  %11030 = load ptr, ptr %5, align 8, !tbaa !5
  %11031 = getelementptr inbounds i32, ptr %11030, i64 3
  %11032 = load i32, ptr %11031, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %845, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %11032, i1 noundef zeroext true)
          to label %11033 unwind label %11037

11033:                                            ; preds = %11017
  invoke void @_ZN11spirv_cross4joinIJRA41_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RA6_S1_S9_SB_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %843, ptr noundef nonnull align 1 dereferenceable(41) @.str.1525, ptr noundef nonnull align 8 dereferenceable(32) %844, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 1 dereferenceable(6) @.str.1514, ptr noundef nonnull align 8 dereferenceable(32) %845, ptr noundef nonnull align 1 dereferenceable(3) @.str.1016)
          to label %11034 unwind label %11041

11034:                                            ; preds = %11033
  %11035 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %11023, i32 noundef %11026, ptr noundef nonnull align 8 dereferenceable(32) %843, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %11036 unwind label %11045

11036:                                            ; preds = %11034
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %843) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %845) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %845) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %844) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %844) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %843) #9
  br label %11526

11037:                                            ; preds = %11017
  %11038 = landingpad { ptr, i32 }
          cleanup
  %11039 = extractvalue { ptr, i32 } %11038, 0
  store ptr %11039, ptr %23, align 8
  %11040 = extractvalue { ptr, i32 } %11038, 1
  store i32 %11040, ptr %24, align 4
  br label %11050

11041:                                            ; preds = %11033
  %11042 = landingpad { ptr, i32 }
          cleanup
  %11043 = extractvalue { ptr, i32 } %11042, 0
  store ptr %11043, ptr %23, align 8
  %11044 = extractvalue { ptr, i32 } %11042, 1
  store i32 %11044, ptr %24, align 4
  br label %11049

11045:                                            ; preds = %11034
  %11046 = landingpad { ptr, i32 }
          cleanup
  %11047 = extractvalue { ptr, i32 } %11046, 0
  store ptr %11047, ptr %23, align 8
  %11048 = extractvalue { ptr, i32 } %11046, 1
  store i32 %11048, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %843) #9
  br label %11049

11049:                                            ; preds = %11045, %11041
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %845) #9
  br label %11050

11050:                                            ; preds = %11049, %11037
  call void @llvm.lifetime.end.p0(i64 32, ptr %845) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %844) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %844) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %843) #9
  br label %11527

11051:                                            ; preds = %919
  %11052 = load ptr, ptr %5, align 8, !tbaa !5
  %11053 = getelementptr inbounds i32, ptr %11052, i64 2
  %11054 = load i32, ptr %11053, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %11054)
  %11055 = load ptr, ptr %5, align 8, !tbaa !5
  %11056 = getelementptr inbounds i32, ptr %11055, i64 0
  %11057 = load i32, ptr %11056, align 4, !tbaa !16
  %11058 = load ptr, ptr %5, align 8, !tbaa !5
  %11059 = getelementptr inbounds i32, ptr %11058, i64 1
  %11060 = load i32, ptr %11059, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %846) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %847) #9
  %11061 = load ptr, ptr %5, align 8, !tbaa !5
  %11062 = getelementptr inbounds i32, ptr %11061, i64 2
  %11063 = load i32, ptr %11062, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %847, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %11063, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %848) #9
  %11064 = load ptr, ptr %5, align 8, !tbaa !5
  %11065 = getelementptr inbounds i32, ptr %11064, i64 3
  %11066 = load i32, ptr %11065, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %848, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %11066, i1 noundef zeroext true)
          to label %11067 unwind label %11071

11067:                                            ; preds = %11051
  invoke void @_ZN11spirv_cross4joinIJRA41_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RA6_S1_S9_SB_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %846, ptr noundef nonnull align 1 dereferenceable(41) @.str.1526, ptr noundef nonnull align 8 dereferenceable(32) %847, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 1 dereferenceable(6) @.str.1514, ptr noundef nonnull align 8 dereferenceable(32) %848, ptr noundef nonnull align 1 dereferenceable(3) @.str.1016)
          to label %11068 unwind label %11075

11068:                                            ; preds = %11067
  %11069 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %11057, i32 noundef %11060, ptr noundef nonnull align 8 dereferenceable(32) %846, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %11070 unwind label %11079

11070:                                            ; preds = %11068
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %846) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %848) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %848) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %847) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %847) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %846) #9
  br label %11526

11071:                                            ; preds = %11051
  %11072 = landingpad { ptr, i32 }
          cleanup
  %11073 = extractvalue { ptr, i32 } %11072, 0
  store ptr %11073, ptr %23, align 8
  %11074 = extractvalue { ptr, i32 } %11072, 1
  store i32 %11074, ptr %24, align 4
  br label %11084

11075:                                            ; preds = %11067
  %11076 = landingpad { ptr, i32 }
          cleanup
  %11077 = extractvalue { ptr, i32 } %11076, 0
  store ptr %11077, ptr %23, align 8
  %11078 = extractvalue { ptr, i32 } %11076, 1
  store i32 %11078, ptr %24, align 4
  br label %11083

11079:                                            ; preds = %11068
  %11080 = landingpad { ptr, i32 }
          cleanup
  %11081 = extractvalue { ptr, i32 } %11080, 0
  store ptr %11081, ptr %23, align 8
  %11082 = extractvalue { ptr, i32 } %11080, 1
  store i32 %11082, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %846) #9
  br label %11083

11083:                                            ; preds = %11079, %11075
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %848) #9
  br label %11084

11084:                                            ; preds = %11083, %11071
  call void @llvm.lifetime.end.p0(i64 32, ptr %848) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %847) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %847) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %846) #9
  br label %11527

11085:                                            ; preds = %919
  call void @llvm.lifetime.start.p0(i64 32, ptr %849) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %850) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %850) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %849, ptr noundef @.str.26, ptr noundef nonnull align 1 dereferenceable(1) %850)
          to label %11086 unwind label %11120

11086:                                            ; preds = %11085
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %849)
          to label %11087 unwind label %11124

11087:                                            ; preds = %11086
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %849) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %850) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %850) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %849) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %851) #9
  %11088 = load ptr, ptr %5, align 8, !tbaa !5
  %11089 = getelementptr inbounds i32, ptr %11088, i64 2
  %11090 = load i32, ptr %11089, align 4, !tbaa !16
  %11091 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %11090)
  br i1 %11091, label %11092, label %11105

11092:                                            ; preds = %11087
  %11093 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %885, i32 0, i32 15
  %11094 = load ptr, ptr %5, align 8, !tbaa !5
  %11095 = getelementptr inbounds i32, ptr %11094, i64 1
  %11096 = call noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %11093, ptr noundef nonnull align 4 dereferenceable(4) %11095)
  %11097 = icmp eq i64 %11096, 0
  br i1 %11097, label %11098, label %11105

11098:                                            ; preds = %11092
  %11099 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %885, i32 0, i32 18
  %11100 = load ptr, ptr %5, align 8, !tbaa !5
  %11101 = getelementptr inbounds i32, ptr %11100, i64 1
  %11102 = call noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %11099, ptr noundef nonnull align 4 dereferenceable(4) %11101)
  %11103 = icmp ne i64 %11102, 0
  %11104 = xor i1 %11103, true
  br label %11105

11105:                                            ; preds = %11098, %11092, %11087
  %11106 = phi i1 [ false, %11092 ], [ false, %11087 ], [ %11104, %11098 ]
  %11107 = zext i1 %11106 to i8
  store i8 %11107, ptr %851, align 1, !tbaa !142
  %11108 = load i8, ptr %851, align 1, !tbaa !142, !range !127, !noundef !128
  %11109 = trunc i8 %11108 to i1
  br i1 %11109, label %11110, label %11129

11110:                                            ; preds = %11105
  %11111 = load ptr, ptr %5, align 8, !tbaa !5
  %11112 = getelementptr inbounds i32, ptr %11111, i64 0
  %11113 = load i32, ptr %11112, align 4, !tbaa !16
  %11114 = load ptr, ptr %5, align 8, !tbaa !5
  %11115 = getelementptr inbounds i32, ptr %11114, i64 1
  %11116 = load i32, ptr %11115, align 4, !tbaa !16
  %11117 = load ptr, ptr %5, align 8, !tbaa !5
  %11118 = getelementptr inbounds i32, ptr %11117, i64 2
  %11119 = load i32, ptr %11118, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %11113, i32 noundef %11116, i32 noundef %11119, ptr noundef @.str.1527)
  br label %11182

11120:                                            ; preds = %11085
  %11121 = landingpad { ptr, i32 }
          cleanup
  %11122 = extractvalue { ptr, i32 } %11121, 0
  store ptr %11122, ptr %23, align 8
  %11123 = extractvalue { ptr, i32 } %11121, 1
  store i32 %11123, ptr %24, align 4
  br label %11128

11124:                                            ; preds = %11086
  %11125 = landingpad { ptr, i32 }
          cleanup
  %11126 = extractvalue { ptr, i32 } %11125, 0
  store ptr %11126, ptr %23, align 8
  %11127 = extractvalue { ptr, i32 } %11125, 1
  store i32 %11127, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %849) #9
  br label %11128

11128:                                            ; preds = %11124, %11120
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %850) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %850) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %849) #9
  br label %11527

11129:                                            ; preds = %11105
  %11130 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %885, i32 0, i32 15
  %11131 = load ptr, ptr %5, align 8, !tbaa !5
  %11132 = getelementptr inbounds i32, ptr %11131, i64 1
  %11133 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %11130, ptr noundef nonnull align 4 dereferenceable(4) %11132)
  %11134 = getelementptr inbounds { ptr, i8 }, ptr %852, i32 0, i32 0
  %11135 = extractvalue { ptr, i8 } %11133, 0
  store ptr %11135, ptr %11134, align 8
  %11136 = getelementptr inbounds { ptr, i8 }, ptr %852, i32 0, i32 1
  %11137 = extractvalue { ptr, i8 } %11133, 1
  store i8 %11137, ptr %11136, align 8
  call void @llvm.lifetime.start.p0(i64 32, ptr %853) #9
  %11138 = load ptr, ptr %5, align 8, !tbaa !5
  %11139 = getelementptr inbounds i32, ptr %11138, i64 2
  %11140 = load i32, ptr %11139, align 4, !tbaa !16
  %11141 = call noundef i32 @_ZNK11spirv_cross8Compiler18expression_type_idEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %11140)
  %11142 = load ptr, ptr %5, align 8, !tbaa !5
  %11143 = getelementptr inbounds i32, ptr %11142, i64 1
  %11144 = load i32, ptr %11143, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL17declare_temporaryB5cxx11Ejj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %853, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %11141, i32 noundef %11144)
  call void @llvm.lifetime.start.p0(i64 32, ptr %854) #9
  %11145 = load ptr, ptr %5, align 8, !tbaa !5
  %11146 = getelementptr inbounds i32, ptr %11145, i64 2
  %11147 = load i32, ptr %11146, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %854, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %11147, i1 noundef zeroext true)
          to label %11148 unwind label %11164

11148:                                            ; preds = %11129
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_RA2_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %853, ptr noundef nonnull align 8 dereferenceable(32) %854, ptr noundef nonnull align 1 dereferenceable(2) @.str.298)
          to label %11149 unwind label %11168

11149:                                            ; preds = %11148
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %854) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %854) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %853) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %853) #9
  %11150 = load ptr, ptr %5, align 8, !tbaa !5
  %11151 = getelementptr inbounds i32, ptr %11150, i64 1
  %11152 = load i32, ptr %11151, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %855) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %856) #9
  %11153 = load ptr, ptr %5, align 8, !tbaa !5
  %11154 = getelementptr inbounds i32, ptr %11153, i64 1
  %11155 = load i32, ptr %11154, align 4, !tbaa !16
  %11156 = load ptr, ptr %885, align 8, !tbaa !145
  %11157 = getelementptr inbounds ptr, ptr %11156, i64 6
  %11158 = load ptr, ptr %11157, align 8
  call void %11158(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %856, ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %11155, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJRA26_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %855, ptr noundef nonnull align 1 dereferenceable(26) @.str.1528, ptr noundef nonnull align 8 dereferenceable(32) %856, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %11159 unwind label %11173

11159:                                            ; preds = %11149
  %11160 = load ptr, ptr %5, align 8, !tbaa !5
  %11161 = getelementptr inbounds i32, ptr %11160, i64 0
  call void @llvm.lifetime.start.p0(i64 1, ptr %857) #9
  store i8 1, ptr %857, align 1, !tbaa !142
  %11162 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross8Compiler3setINS_14SPIRExpressionEJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKjbEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %11152, ptr noundef nonnull align 8 dereferenceable(32) %855, ptr noundef nonnull align 4 dereferenceable(4) %11161, ptr noundef nonnull align 1 dereferenceable(1) %857)
          to label %11163 unwind label %11177

11163:                                            ; preds = %11159
  call void @llvm.lifetime.end.p0(i64 1, ptr %857) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %855) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %856) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %856) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %855) #9
  br label %11182

11164:                                            ; preds = %11129
  %11165 = landingpad { ptr, i32 }
          cleanup
  %11166 = extractvalue { ptr, i32 } %11165, 0
  store ptr %11166, ptr %23, align 8
  %11167 = extractvalue { ptr, i32 } %11165, 1
  store i32 %11167, ptr %24, align 4
  br label %11172

11168:                                            ; preds = %11148
  %11169 = landingpad { ptr, i32 }
          cleanup
  %11170 = extractvalue { ptr, i32 } %11169, 0
  store ptr %11170, ptr %23, align 8
  %11171 = extractvalue { ptr, i32 } %11169, 1
  store i32 %11171, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %854) #9
  br label %11172

11172:                                            ; preds = %11168, %11164
  call void @llvm.lifetime.end.p0(i64 32, ptr %854) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %853) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %853) #9
  br label %11183

11173:                                            ; preds = %11149
  %11174 = landingpad { ptr, i32 }
          cleanup
  %11175 = extractvalue { ptr, i32 } %11174, 0
  store ptr %11175, ptr %23, align 8
  %11176 = extractvalue { ptr, i32 } %11174, 1
  store i32 %11176, ptr %24, align 4
  br label %11181

11177:                                            ; preds = %11159
  %11178 = landingpad { ptr, i32 }
          cleanup
  %11179 = extractvalue { ptr, i32 } %11178, 0
  store ptr %11179, ptr %23, align 8
  %11180 = extractvalue { ptr, i32 } %11178, 1
  store i32 %11180, ptr %24, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %857) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %855) #9
  br label %11181

11181:                                            ; preds = %11177, %11173
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %856) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %856) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %855) #9
  br label %11183

11182:                                            ; preds = %11163, %11110
  store i32 2, ptr %676, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %851) #9
  br label %11526

11183:                                            ; preds = %11181, %11172
  call void @llvm.lifetime.end.p0(i64 1, ptr %851) #9
  br label %11527

11184:                                            ; preds = %919
  call void @llvm.lifetime.start.p0(i64 8, ptr %858) #9
  %11185 = load ptr, ptr %5, align 8, !tbaa !5
  %11186 = getelementptr inbounds i32, ptr %11185, i64 0
  %11187 = load i32, ptr %11186, align 4, !tbaa !16
  %11188 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %11187)
  store ptr %11188, ptr %858, align 8, !tbaa !5
  %11189 = load ptr, ptr %858, align 8, !tbaa !5
  %11190 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %11189, i32 0, i32 11
  %11191 = load i32, ptr %11190, align 8, !tbaa !212
  %11192 = icmp ne i32 %11191, 5349
  br i1 %11192, label %11193, label %11200

11193:                                            ; preds = %11184
  %11194 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %11194, ptr noundef @.str.1529)
          to label %11195 unwind label %11196

11195:                                            ; preds = %11193
  call void @__cxa_throw(ptr %11194, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
  unreachable

11196:                                            ; preds = %11193
  %11197 = landingpad { ptr, i32 }
          cleanup
  %11198 = extractvalue { ptr, i32 } %11197, 0
  store ptr %11198, ptr %23, align 8
  %11199 = extractvalue { ptr, i32 } %11197, 1
  store i32 %11199, ptr %24, align 4
  call void @__cxa_free_exception(ptr %11194) #9
  br label %11242

11200:                                            ; preds = %11184
  call void @llvm.lifetime.start.p0(i64 8, ptr %859) #9
  %11201 = load ptr, ptr %5, align 8, !tbaa !5
  %11202 = getelementptr inbounds i32, ptr %11201, i64 2
  %11203 = load i32, ptr %11202, align 4, !tbaa !16
  %11204 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %11203)
  store ptr %11204, ptr %859, align 8, !tbaa !5
  %11205 = load ptr, ptr %859, align 8, !tbaa !5
  %11206 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %11205, i32 0, i32 4
  %11207 = load i32, ptr %11206, align 8, !tbaa !129
  %11208 = icmp eq i32 %11207, 2
  br i1 %11208, label %11209, label %11221

11209:                                            ; preds = %11200
  call void @llvm.lifetime.start.p0(i64 32, ptr %860) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %861) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %861) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %860, ptr noundef @.str.1210, ptr noundef nonnull align 1 dereferenceable(1) %861)
          to label %11210 unwind label %11212

11210:                                            ; preds = %11209
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %860)
          to label %11211 unwind label %11216

11211:                                            ; preds = %11210
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %860) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %861) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %861) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %860) #9
  br label %11221

11212:                                            ; preds = %11209
  %11213 = landingpad { ptr, i32 }
          cleanup
  %11214 = extractvalue { ptr, i32 } %11213, 0
  store ptr %11214, ptr %23, align 8
  %11215 = extractvalue { ptr, i32 } %11213, 1
  store i32 %11215, ptr %24, align 4
  br label %11220

11216:                                            ; preds = %11210
  %11217 = landingpad { ptr, i32 }
          cleanup
  %11218 = extractvalue { ptr, i32 } %11217, 0
  store ptr %11218, ptr %23, align 8
  %11219 = extractvalue { ptr, i32 } %11217, 1
  store i32 %11219, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %860) #9
  br label %11220

11220:                                            ; preds = %11216, %11212
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %861) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %861) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %860) #9
  br label %11241

11221:                                            ; preds = %11211, %11200
  call void @llvm.lifetime.start.p0(i64 32, ptr %862) #9
  %11222 = load ptr, ptr %858, align 8, !tbaa !5
  %11223 = load ptr, ptr %885, align 8, !tbaa !145
  %11224 = getelementptr inbounds ptr, ptr %11223, i64 19
  %11225 = load ptr, ptr %11224, align 8
  call void %11225(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %862, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(336) %11222, i32 noundef 0)
  %11226 = load ptr, ptr %5, align 8, !tbaa !5
  %11227 = getelementptr inbounds i32, ptr %11226, i64 0
  %11228 = load i32, ptr %11227, align 4, !tbaa !16
  %11229 = load ptr, ptr %5, align 8, !tbaa !5
  %11230 = getelementptr inbounds i32, ptr %11229, i64 1
  %11231 = load i32, ptr %11230, align 4, !tbaa !16
  %11232 = load ptr, ptr %5, align 8, !tbaa !5
  %11233 = getelementptr inbounds i32, ptr %11232, i64 2
  %11234 = load i32, ptr %11233, align 4, !tbaa !16
  %11235 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %862) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %11228, i32 noundef %11231, i32 noundef %11234, ptr noundef %11235)
          to label %11236 unwind label %11237

11236:                                            ; preds = %11221
  store i32 2, ptr %676, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %862) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %862) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %859) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %858) #9
  br label %11526

11237:                                            ; preds = %11221
  %11238 = landingpad { ptr, i32 }
          cleanup
  %11239 = extractvalue { ptr, i32 } %11238, 0
  store ptr %11239, ptr %23, align 8
  %11240 = extractvalue { ptr, i32 } %11238, 1
  store i32 %11240, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %862) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %862) #9
  br label %11241

11241:                                            ; preds = %11237, %11220
  call void @llvm.lifetime.end.p0(i64 8, ptr %859) #9
  br label %11242

11242:                                            ; preds = %11241, %11196
  call void @llvm.lifetime.end.p0(i64 8, ptr %858) #9
  br label %11527

11243:                                            ; preds = %919
  call void @llvm.lifetime.start.p0(i64 8, ptr %863) #9
  %11244 = load ptr, ptr %5, align 8, !tbaa !5
  %11245 = getelementptr inbounds i32, ptr %11244, i64 0
  %11246 = load i32, ptr %11245, align 4, !tbaa !16
  %11247 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %11246)
  store ptr %11247, ptr %863, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %864) #9
  %11248 = load ptr, ptr %5, align 8, !tbaa !5
  %11249 = getelementptr inbounds i32, ptr %11248, i64 2
  %11250 = load i32, ptr %11249, align 4, !tbaa !16
  %11251 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %11250)
  store ptr %11251, ptr %864, align 8, !tbaa !5
  %11252 = load ptr, ptr %864, align 8, !tbaa !5
  %11253 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %11252, i32 0, i32 11
  %11254 = load i32, ptr %11253, align 8, !tbaa !212
  %11255 = icmp ne i32 %11254, 5349
  br i1 %11255, label %11256, label %11263

11256:                                            ; preds = %11243
  %11257 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %11257, ptr noundef @.str.1530)
          to label %11258 unwind label %11259

11258:                                            ; preds = %11256
  call void @__cxa_throw(ptr %11257, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
  unreachable

11259:                                            ; preds = %11256
  %11260 = landingpad { ptr, i32 }
          cleanup
  %11261 = extractvalue { ptr, i32 } %11260, 0
  store ptr %11261, ptr %23, align 8
  %11262 = extractvalue { ptr, i32 } %11260, 1
  store i32 %11262, ptr %24, align 4
  call void @__cxa_free_exception(ptr %11257) #9
  br label %11300

11263:                                            ; preds = %11243
  %11264 = load ptr, ptr %863, align 8, !tbaa !5
  %11265 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %11264, i32 0, i32 4
  %11266 = load i32, ptr %11265, align 8, !tbaa !129
  %11267 = icmp eq i32 %11266, 2
  br i1 %11267, label %11268, label %11280

11268:                                            ; preds = %11263
  call void @llvm.lifetime.start.p0(i64 32, ptr %865) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %866) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %866) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %865, ptr noundef @.str.1210, ptr noundef nonnull align 1 dereferenceable(1) %866)
          to label %11269 unwind label %11271

11269:                                            ; preds = %11268
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %865)
          to label %11270 unwind label %11275

11270:                                            ; preds = %11269
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %865) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %866) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %866) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %865) #9
  br label %11280

11271:                                            ; preds = %11268
  %11272 = landingpad { ptr, i32 }
          cleanup
  %11273 = extractvalue { ptr, i32 } %11272, 0
  store ptr %11273, ptr %23, align 8
  %11274 = extractvalue { ptr, i32 } %11272, 1
  store i32 %11274, ptr %24, align 4
  br label %11279

11275:                                            ; preds = %11269
  %11276 = landingpad { ptr, i32 }
          cleanup
  %11277 = extractvalue { ptr, i32 } %11276, 0
  store ptr %11277, ptr %23, align 8
  %11278 = extractvalue { ptr, i32 } %11276, 1
  store i32 %11278, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %865) #9
  br label %11279

11279:                                            ; preds = %11275, %11271
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %866) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %866) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %865) #9
  br label %11300

11280:                                            ; preds = %11270, %11263
  call void @llvm.lifetime.start.p0(i64 32, ptr %867) #9
  %11281 = load ptr, ptr %863, align 8, !tbaa !5
  %11282 = load ptr, ptr %885, align 8, !tbaa !145
  %11283 = getelementptr inbounds ptr, ptr %11282, i64 19
  %11284 = load ptr, ptr %11283, align 8
  call void %11284(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %867, ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(336) %11281, i32 noundef 0)
  %11285 = load ptr, ptr %5, align 8, !tbaa !5
  %11286 = getelementptr inbounds i32, ptr %11285, i64 0
  %11287 = load i32, ptr %11286, align 4, !tbaa !16
  %11288 = load ptr, ptr %5, align 8, !tbaa !5
  %11289 = getelementptr inbounds i32, ptr %11288, i64 1
  %11290 = load i32, ptr %11289, align 4, !tbaa !16
  %11291 = load ptr, ptr %5, align 8, !tbaa !5
  %11292 = getelementptr inbounds i32, ptr %11291, i64 2
  %11293 = load i32, ptr %11292, align 4, !tbaa !16
  %11294 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %867) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %11287, i32 noundef %11290, i32 noundef %11293, ptr noundef %11294)
          to label %11295 unwind label %11296

11295:                                            ; preds = %11280
  store i32 2, ptr %676, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %867) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %867) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %864) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %863) #9
  br label %11526

11296:                                            ; preds = %11280
  %11297 = landingpad { ptr, i32 }
          cleanup
  %11298 = extractvalue { ptr, i32 } %11297, 0
  store ptr %11298, ptr %23, align 8
  %11299 = extractvalue { ptr, i32 } %11297, 1
  store i32 %11299, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %867) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %867) #9
  br label %11300

11300:                                            ; preds = %11296, %11279, %11259
  call void @llvm.lifetime.end.p0(i64 8, ptr %864) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %863) #9
  br label %11527

11301:                                            ; preds = %919
  %11302 = load ptr, ptr %5, align 8, !tbaa !5
  %11303 = getelementptr inbounds i32, ptr %11302, i64 0
  %11304 = load i32, ptr %11303, align 4, !tbaa !16
  %11305 = load ptr, ptr %5, align 8, !tbaa !5
  %11306 = getelementptr inbounds i32, ptr %11305, i64 1
  %11307 = load i32, ptr %11306, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL19emit_line_directiveEjj(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %11304, i32 noundef %11307)
  br label %11526

11308:                                            ; preds = %919
  %11309 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %11310 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %11309, i32 0, i32 4
  %11311 = load i8, ptr %11310, align 4, !tbaa !223, !range !127, !noundef !128
  %11312 = trunc i8 %11311 to i1
  br i1 %11312, label %11320, label %11313

11313:                                            ; preds = %11308
  %11314 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %11314, ptr noundef @.str.1531)
          to label %11315 unwind label %11316

11315:                                            ; preds = %11313
  call void @__cxa_throw(ptr %11314, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
  unreachable

11316:                                            ; preds = %11313
  %11317 = landingpad { ptr, i32 }
          cleanup
  %11318 = extractvalue { ptr, i32 } %11317, 0
  store ptr %11318, ptr %23, align 8
  %11319 = extractvalue { ptr, i32 } %11317, 1
  store i32 %11319, ptr %24, align 4
  call void @__cxa_free_exception(ptr %11314) #9
  br label %11527

11320:                                            ; preds = %11308
  call void @llvm.lifetime.start.p0(i64 32, ptr %868) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %869) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %869) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %868, ptr noundef @.str.1532, ptr noundef nonnull align 1 dereferenceable(1) %869)
          to label %11321 unwind label %11325

11321:                                            ; preds = %11320
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %868)
          to label %11322 unwind label %11329

11322:                                            ; preds = %11321
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %868) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %869) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %869) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %868) #9
  %11323 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 21
  %11324 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %11323, i32 0, i32 1
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %11324, ptr noundef nonnull align 1 dereferenceable(2) @.str.298)
  br label %11526

11325:                                            ; preds = %11320
  %11326 = landingpad { ptr, i32 }
          cleanup
  %11327 = extractvalue { ptr, i32 } %11326, 0
  store ptr %11327, ptr %23, align 8
  %11328 = extractvalue { ptr, i32 } %11326, 1
  store i32 %11328, ptr %24, align 4
  br label %11333

11329:                                            ; preds = %11321
  %11330 = landingpad { ptr, i32 }
          cleanup
  %11331 = extractvalue { ptr, i32 } %11330, 0
  store ptr %11331, ptr %23, align 8
  %11332 = extractvalue { ptr, i32 } %11330, 1
  store i32 %11332, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %868) #9
  br label %11333

11333:                                            ; preds = %11329, %11325
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %869) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %869) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %868) #9
  br label %11527

11334:                                            ; preds = %919
  %11335 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %885, i32 0, i32 9
  %11336 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %11335, i32 0, i32 4
  %11337 = load i8, ptr %11336, align 4, !tbaa !223, !range !127, !noundef !128
  %11338 = trunc i8 %11337 to i1
  br i1 %11338, label %11346, label %11339

11339:                                            ; preds = %11334
  %11340 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %11340, ptr noundef @.str.1531)
          to label %11341 unwind label %11342

11341:                                            ; preds = %11339
  call void @__cxa_throw(ptr %11340, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
  unreachable

11342:                                            ; preds = %11339
  %11343 = landingpad { ptr, i32 }
          cleanup
  %11344 = extractvalue { ptr, i32 } %11343, 0
  store ptr %11344, ptr %23, align 8
  %11345 = extractvalue { ptr, i32 } %11343, 1
  store i32 %11345, ptr %24, align 4
  call void @__cxa_free_exception(ptr %11340) #9
  br label %11527

11346:                                            ; preds = %11334
  call void @llvm.lifetime.start.p0(i64 32, ptr %870) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %871) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %871) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %870, ptr noundef @.str.1532, ptr noundef nonnull align 1 dereferenceable(1) %871)
          to label %11347 unwind label %11358

11347:                                            ; preds = %11346
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %870)
          to label %11348 unwind label %11362

11348:                                            ; preds = %11347
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %870) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %871) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %871) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %870) #9
  %11349 = load ptr, ptr %5, align 8, !tbaa !5
  %11350 = getelementptr inbounds i32, ptr %11349, i64 0
  %11351 = load i32, ptr %11350, align 4, !tbaa !16
  %11352 = load ptr, ptr %5, align 8, !tbaa !5
  %11353 = getelementptr inbounds i32, ptr %11352, i64 1
  %11354 = load i32, ptr %11353, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %872) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %873) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %873) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %872, ptr noundef @.str.1533, ptr noundef nonnull align 1 dereferenceable(1) %873)
          to label %11355 unwind label %11367

11355:                                            ; preds = %11348
  %11356 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %11351, i32 noundef %11354, ptr noundef nonnull align 8 dereferenceable(32) %872, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %11357 unwind label %11371

11357:                                            ; preds = %11355
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %872) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %873) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %873) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %872) #9
  br label %11526

11358:                                            ; preds = %11346
  %11359 = landingpad { ptr, i32 }
          cleanup
  %11360 = extractvalue { ptr, i32 } %11359, 0
  store ptr %11360, ptr %23, align 8
  %11361 = extractvalue { ptr, i32 } %11359, 1
  store i32 %11361, ptr %24, align 4
  br label %11366

11362:                                            ; preds = %11347
  %11363 = landingpad { ptr, i32 }
          cleanup
  %11364 = extractvalue { ptr, i32 } %11363, 0
  store ptr %11364, ptr %23, align 8
  %11365 = extractvalue { ptr, i32 } %11363, 1
  store i32 %11365, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %870) #9
  br label %11366

11366:                                            ; preds = %11362, %11358
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %871) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %871) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %870) #9
  br label %11527

11367:                                            ; preds = %11348
  %11368 = landingpad { ptr, i32 }
          cleanup
  %11369 = extractvalue { ptr, i32 } %11368, 0
  store ptr %11369, ptr %23, align 8
  %11370 = extractvalue { ptr, i32 } %11368, 1
  store i32 %11370, ptr %24, align 4
  br label %11375

11371:                                            ; preds = %11355
  %11372 = landingpad { ptr, i32 }
          cleanup
  %11373 = extractvalue { ptr, i32 } %11372, 0
  store ptr %11373, ptr %23, align 8
  %11374 = extractvalue { ptr, i32 } %11372, 1
  store i32 %11374, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %872) #9
  br label %11375

11375:                                            ; preds = %11371, %11367
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %873) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %873) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %872) #9
  br label %11527

11376:                                            ; preds = %919
  %11377 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %885, i32 0, i32 33
  %11378 = load i8, ptr %11377, align 8, !tbaa !238, !range !127, !noundef !128
  %11379 = trunc i8 %11378 to i1
  br i1 %11379, label %11381, label %11380

11380:                                            ; preds = %11376
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA40_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 1 dereferenceable(40) @.str.59)
  call void @_ZN11spirv_cross8Compiler26flush_all_active_variablesEv(ptr noundef nonnull align 8 dereferenceable(3176) %885)
  br label %11381

11381:                                            ; preds = %11380, %11376
  br label %11526

11382:                                            ; preds = %919
  %11383 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %885, i32 0, i32 33
  %11384 = load i8, ptr %11383, align 8, !tbaa !238, !range !127, !noundef !128
  %11385 = trunc i8 %11384 to i1
  br i1 %11385, label %11387, label %11386

11386:                                            ; preds = %11382
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA38_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 1 dereferenceable(38) @.str.61)
  call void @_ZN11spirv_cross8Compiler26flush_all_active_variablesEv(ptr noundef nonnull align 8 dereferenceable(3176) %885)
  br label %11387

11387:                                            ; preds = %11386, %11382
  br label %11526

11388:                                            ; preds = %919
  call void @llvm.lifetime.start.p0(i64 32, ptr %874) #9
  %11389 = load ptr, ptr %5, align 8, !tbaa !5
  %11390 = getelementptr inbounds i32, ptr %11389, i64 0
  %11391 = load i32, ptr %11390, align 4, !tbaa !16
  call void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %874, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %11391, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %875) #9
  %11392 = load ptr, ptr %5, align 8, !tbaa !5
  %11393 = getelementptr inbounds i32, ptr %11392, i64 1
  %11394 = load i32, ptr %11393, align 4, !tbaa !16
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %875, ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %11394, i1 noundef zeroext true)
          to label %11395 unwind label %11397

11395:                                            ; preds = %11388
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA19_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_SA_SC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 1 dereferenceable(19) @.str.1534, ptr noundef nonnull align 8 dereferenceable(32) %874, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %875, ptr noundef nonnull align 1 dereferenceable(3) @.str.751)
          to label %11396 unwind label %11401

11396:                                            ; preds = %11395
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %875) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %875) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %874) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %874) #9
  br label %11526

11397:                                            ; preds = %11388
  %11398 = landingpad { ptr, i32 }
          cleanup
  %11399 = extractvalue { ptr, i32 } %11398, 0
  store ptr %11399, ptr %23, align 8
  %11400 = extractvalue { ptr, i32 } %11398, 1
  store i32 %11400, ptr %24, align 4
  br label %11405

11401:                                            ; preds = %11395
  %11402 = landingpad { ptr, i32 }
          cleanup
  %11403 = extractvalue { ptr, i32 } %11402, 0
  store ptr %11403, ptr %23, align 8
  %11404 = extractvalue { ptr, i32 } %11402, 1
  store i32 %11404, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %875) #9
  br label %11405

11405:                                            ; preds = %11401, %11397
  call void @llvm.lifetime.end.p0(i64 32, ptr %875) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %874) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %874) #9
  br label %11527

11406:                                            ; preds = %919
  call void @llvm.lifetime.start.p0(i64 8, ptr %876) #9
  %11407 = load ptr, ptr %5, align 8, !tbaa !5
  %11408 = getelementptr inbounds i32, ptr %11407, i64 0
  %11409 = load i32, ptr %11408, align 4, !tbaa !16
  %11410 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %11409)
  store ptr %11410, ptr %876, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %877) #9
  %11411 = load ptr, ptr %5, align 8, !tbaa !5
  %11412 = getelementptr inbounds i32, ptr %11411, i64 2
  %11413 = load i32, ptr %11412, align 4, !tbaa !16
  %11414 = call noundef i32 @_ZNK11spirv_cross8Compiler21evaluate_constant_u32Ej(ptr noundef nonnull align 8 dereferenceable(3176) %885, i32 noundef %11413)
  store i32 %11414, ptr %877, align 4, !tbaa !239
  call void @llvm.lifetime.start.p0(i64 8, ptr %878) #9
  store ptr null, ptr %878, align 8, !tbaa !5
  %11415 = load i32, ptr %877, align 4, !tbaa !239
  %11416 = icmp eq i32 %11415, 1
  br i1 %11416, label %11417, label %11454

11417:                                            ; preds = %11406
  call void @llvm.lifetime.start.p0(i64 32, ptr %879) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %880) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %880) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %879, ptr noundef @.str.1535, ptr noundef nonnull align 1 dereferenceable(1) %880)
          to label %11418 unwind label %11425

11418:                                            ; preds = %11417
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %879)
          to label %11419 unwind label %11429

11419:                                            ; preds = %11418
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %879) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %880) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %880) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %879) #9
  %11420 = load ptr, ptr %876, align 8, !tbaa !5
  %11421 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %11420, i32 0, i32 2
  %11422 = load i32, ptr %11421, align 8, !tbaa !148
  %11423 = icmp eq i32 %11422, 10
  br i1 %11423, label %11424, label %11434

11424:                                            ; preds = %11419
  store ptr @.str.1536, ptr %878, align 8, !tbaa !5
  br label %11453

11425:                                            ; preds = %11417
  %11426 = landingpad { ptr, i32 }
          cleanup
  %11427 = extractvalue { ptr, i32 } %11426, 0
  store ptr %11427, ptr %23, align 8
  %11428 = extractvalue { ptr, i32 } %11426, 1
  store i32 %11428, ptr %24, align 4
  br label %11433

11429:                                            ; preds = %11418
  %11430 = landingpad { ptr, i32 }
          cleanup
  %11431 = extractvalue { ptr, i32 } %11430, 0
  store ptr %11431, ptr %23, align 8
  %11432 = extractvalue { ptr, i32 } %11430, 1
  store i32 %11432, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %879) #9
  br label %11433

11433:                                            ; preds = %11429, %11425
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %880) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %880) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %879) #9
  br label %11522

11434:                                            ; preds = %11419
  %11435 = load ptr, ptr %876, align 8, !tbaa !5
  %11436 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %11435, i32 0, i32 2
  %11437 = load i32, ptr %11436, align 8, !tbaa !148
  %11438 = icmp eq i32 %11437, 8
  br i1 %11438, label %11439, label %11445

11439:                                            ; preds = %11434
  %11440 = load ptr, ptr %876, align 8, !tbaa !5
  %11441 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %11440, i32 0, i32 4
  %11442 = load i32, ptr %11441, align 8, !tbaa !129
  %11443 = icmp eq i32 %11442, 2
  br i1 %11443, label %11444, label %11445

11444:                                            ; preds = %11439
  store ptr @.str.1537, ptr %878, align 8, !tbaa !5
  br label %11452

11445:                                            ; preds = %11439, %11434
  %11446 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %11446, ptr noundef @.str.1538)
          to label %11447 unwind label %11448

11447:                                            ; preds = %11445
  call void @__cxa_throw(ptr %11446, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
  unreachable

11448:                                            ; preds = %11445
  %11449 = landingpad { ptr, i32 }
          cleanup
  %11450 = extractvalue { ptr, i32 } %11449, 0
  store ptr %11450, ptr %23, align 8
  %11451 = extractvalue { ptr, i32 } %11449, 1
  store i32 %11451, ptr %24, align 4
  call void @__cxa_free_exception(ptr %11446) #9
  br label %11522

11452:                                            ; preds = %11444
  br label %11453

11453:                                            ; preds = %11452, %11424
  br label %11502

11454:                                            ; preds = %11406
  %11455 = load i32, ptr %877, align 4, !tbaa !239
  %11456 = icmp eq i32 %11455, 3
  br i1 %11456, label %11457, label %11494

11457:                                            ; preds = %11454
  call void @llvm.lifetime.start.p0(i64 32, ptr %881) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %882) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %882) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %881, ptr noundef @.str.1539, ptr noundef nonnull align 1 dereferenceable(1) %882)
          to label %11458 unwind label %11465

11458:                                            ; preds = %11457
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 8 dereferenceable(32) %881)
          to label %11459 unwind label %11469

11459:                                            ; preds = %11458
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %881) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %882) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %882) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %881) #9
  %11460 = load ptr, ptr %876, align 8, !tbaa !5
  %11461 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %11460, i32 0, i32 2
  %11462 = load i32, ptr %11461, align 8, !tbaa !148
  %11463 = icmp eq i32 %11462, 10
  br i1 %11463, label %11464, label %11474

11464:                                            ; preds = %11459
  store ptr @.str.1540, ptr %878, align 8, !tbaa !5
  br label %11493

11465:                                            ; preds = %11457
  %11466 = landingpad { ptr, i32 }
          cleanup
  %11467 = extractvalue { ptr, i32 } %11466, 0
  store ptr %11467, ptr %23, align 8
  %11468 = extractvalue { ptr, i32 } %11466, 1
  store i32 %11468, ptr %24, align 4
  br label %11473

11469:                                            ; preds = %11458
  %11470 = landingpad { ptr, i32 }
          cleanup
  %11471 = extractvalue { ptr, i32 } %11470, 0
  store ptr %11471, ptr %23, align 8
  %11472 = extractvalue { ptr, i32 } %11470, 1
  store i32 %11472, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %881) #9
  br label %11473

11473:                                            ; preds = %11469, %11465
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %882) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %882) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %881) #9
  br label %11522

11474:                                            ; preds = %11459
  %11475 = load ptr, ptr %876, align 8, !tbaa !5
  %11476 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %11475, i32 0, i32 2
  %11477 = load i32, ptr %11476, align 8, !tbaa !148
  %11478 = icmp eq i32 %11477, 8
  br i1 %11478, label %11479, label %11485

11479:                                            ; preds = %11474
  %11480 = load ptr, ptr %876, align 8, !tbaa !5
  %11481 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %11480, i32 0, i32 4
  %11482 = load i32, ptr %11481, align 8, !tbaa !129
  %11483 = icmp eq i32 %11482, 2
  br i1 %11483, label %11484, label %11485

11484:                                            ; preds = %11479
  store ptr @.str.1541, ptr %878, align 8, !tbaa !5
  br label %11492

11485:                                            ; preds = %11479, %11474
  %11486 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %11486, ptr noundef @.str.1538)
          to label %11487 unwind label %11488

11487:                                            ; preds = %11485
  call void @__cxa_throw(ptr %11486, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
  unreachable

11488:                                            ; preds = %11485
  %11489 = landingpad { ptr, i32 }
          cleanup
  %11490 = extractvalue { ptr, i32 } %11489, 0
  store ptr %11490, ptr %23, align 8
  %11491 = extractvalue { ptr, i32 } %11489, 1
  store i32 %11491, ptr %24, align 4
  call void @__cxa_free_exception(ptr %11486) #9
  br label %11522

11492:                                            ; preds = %11484
  br label %11493

11493:                                            ; preds = %11492, %11464
  br label %11501

11494:                                            ; preds = %11454
  %11495 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %11495, ptr noundef @.str.1542)
          to label %11496 unwind label %11497

11496:                                            ; preds = %11494
  call void @__cxa_throw(ptr %11495, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
  unreachable

11497:                                            ; preds = %11494
  %11498 = landingpad { ptr, i32 }
          cleanup
  %11499 = extractvalue { ptr, i32 } %11498, 0
  store ptr %11499, ptr %23, align 8
  %11500 = extractvalue { ptr, i32 } %11498, 1
  store i32 %11500, ptr %24, align 4
  call void @__cxa_free_exception(ptr %11495) #9
  br label %11522

11501:                                            ; preds = %11493
  br label %11502

11502:                                            ; preds = %11501, %11453
  %11503 = load ptr, ptr %5, align 8, !tbaa !5
  %11504 = getelementptr inbounds i32, ptr %11503, i64 0
  %11505 = load i32, ptr %11504, align 4, !tbaa !16
  %11506 = load ptr, ptr %5, align 8, !tbaa !5
  %11507 = getelementptr inbounds i32, ptr %11506, i64 1
  %11508 = load i32, ptr %11507, align 4, !tbaa !16
  call void @llvm.lifetime.start.p0(i64 32, ptr %883) #9
  %11509 = load ptr, ptr %878, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %884) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %884) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %883, ptr noundef %11509, ptr noundef nonnull align 1 dereferenceable(1) %884)
          to label %11510 unwind label %11513

11510:                                            ; preds = %11502
  %11511 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %885, i32 noundef %11505, i32 noundef %11508, ptr noundef nonnull align 8 dereferenceable(32) %883, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %11512 unwind label %11517

11512:                                            ; preds = %11510
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %883) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %884) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %884) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %883) #9
  store i32 2, ptr %676, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %878) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %877) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %876) #9
  br label %11526

11513:                                            ; preds = %11502
  %11514 = landingpad { ptr, i32 }
          cleanup
  %11515 = extractvalue { ptr, i32 } %11514, 0
  store ptr %11515, ptr %23, align 8
  %11516 = extractvalue { ptr, i32 } %11514, 1
  store i32 %11516, ptr %24, align 4
  br label %11521

11517:                                            ; preds = %11510
  %11518 = landingpad { ptr, i32 }
          cleanup
  %11519 = extractvalue { ptr, i32 } %11518, 0
  store ptr %11519, ptr %23, align 8
  %11520 = extractvalue { ptr, i32 } %11518, 1
  store i32 %11520, ptr %24, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %883) #9
  br label %11521

11521:                                            ; preds = %11517, %11513
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %884) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %884) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %883) #9
  br label %11522

11522:                                            ; preds = %11521, %11497, %11488, %11473, %11448, %11433
  call void @llvm.lifetime.end.p0(i64 8, ptr %878) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %877) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %876) #9
  br label %11527

11523:                                            ; preds = %919
  %11524 = load ptr, ptr %4, align 8, !tbaa !5
  %11525 = getelementptr inbounds %"struct.spirv_cross::Instruction", ptr %11524, i32 0, i32 0
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA21_KcRKtEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %885, ptr noundef nonnull align 1 dereferenceable(21) @.str.1543, ptr noundef nonnull align 2 dereferenceable(2) %11525)
  br label %11526

11526:                                            ; preds = %11523, %11512, %11396, %11387, %11381, %11357, %11322, %11301, %11295, %11236, %11182, %11070, %11036, %11002, %10968, %10934, %10900, %10866, %10832, %10798, %10764, %10730, %10696, %10662, %10633, %10608, %10583, %10558, %10533, %10513, %10496, %10480, %10463, %10408, %10364, %10324, %10262, %10141, %10092, %10087, %10082, %10042, %9935, %9925, %9876, %9830, %9804, %9778, %9752, %9726, %9700, %9674, %9645, %9598, %9562, %9355, %9033, %8934, %8706, %8539, %8309, %8254, %7524, %7400, %7388, %7282, %7204, %7059, %7015, %6996, %6991, %6989, %6933, %6878, %6877, %6857, %6837, %6817, %6797, %6777, %6762, %6698, %6697, %6576, %6552, %6468, %6446, %6428, %6418, %6400, %6382, %6363, %6359, %6317, %6275, %6248, %6206, %6164, %6122, %6080, %6053, %6028, %5896, %5857, %5827, %5782, %5721, %5686, %5635, %5600, %5549, %5514, %5463, %5428, %5377, %5342, %5299, %5264, %5221, %5191, %5155, %5104, %5094, %5084, %5082, %4925, %4907, %4889, %4888, %4832, %4808, %4784, %4760, %4742, %4724, %4711, %4681, %4580, %4494, %4476, %4468, %4373, %4298, %4297, %4166, %4165, %4061, %3935, %3768, %3755, %3731, %3718, %3694, %3684, %3683, %3650, %3519, %3469, %3179, %3076, %3057, %3003, %2824, %2597, %2543, %2509, %2070, %1659, %1616, %1520, %1257, %919, %919
  call void @llvm.lifetime.end.p0(i64 1, ptr %11) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #9
  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

11527:                                            ; preds = %11522, %11405, %11375, %11366, %11342, %11333, %11316, %11300, %11242, %11183, %11128, %11084, %11050, %11016, %10982, %10948, %10914, %10880, %10846, %10812, %10778, %10744, %10710, %10676, %10642, %10617, %10592, %10567, %10542, %10514, %10505, %10481, %10472, %10447, %10369, %10348, %10337, %10315, %10210, %10199, %10043, %9934, %9885, %9842, %9816, %9790, %9764, %9738, %9712, %9686, %9657, %9631, %9563, %9104, %8955, %8936, %8726, %8707, %8542, %8343, %8255, %7537, %7399, %7297, %7225, %7062, %7034, %7009, %6990, %6960, %6943, %6934, %6904, %6887, %6776, %6696, %6585, %6561, %6358, %6338, %6316, %6296, %6274, %6247, %6227, %6205, %6176, %6163, %6143, %6121, %6101, %6079, %6052, %6029, %5892, %5858, %5841, %5770, %5083, %4710, %4640, %4623, %4609, %4542, %4525, %4475, %4358, %4283, %4151, %4047, %3921, %3649, %3470, %3180, %3077, %3053, %3004, %2825, %2598, %2566, %2510, %2071, %1674, %1523, %1262
  call void @llvm.lifetime.end.p0(i64 1, ptr %11) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #9
  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 %11528

11528:                                            ; preds = %11527
  %11529 = load ptr, ptr %23, align 8
  %11530 = load i32, ptr %24, align 4
  %11531 = insertvalue { ptr, i32 } poison, ptr %11529, 0
  %11532 = insertvalue { ptr, i32 } %11531, i32 %11530, 1
  resume { ptr, i32 } %11532

11533:                                            ; preds = %8974, %8900, %8745, %8598, %8440, %8103, %7975, %7823, %7753, %7627, %7586, %7467, %6013
  unreachable
}

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZN11spirv_crossL37opcode_can_promote_integer_implicitlyEN3spv2OpE(i32 noundef) #7

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL30unroll_array_from_complex_loadEjjRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i32 noundef, ptr noundef nonnull align 8 dereferenceable(32)) #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL34rewrite_load_for_wrapped_row_majorERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_7TypedIDILNS_5TypesE1EEENS8_ILS9_0EEE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32), i32, i32) #3 align 2

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross15AccessChainMetaC2Ev(ptr noundef nonnull align 4 dereferenceable(16)) unnamed_addr #7 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross8Compiler3setINS_14SPIRExpressionEJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKjbEEERT_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)) #3 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRS6_RA11_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(2), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(11)) #3

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL23append_global_func_argsERKNS_12SPIRFunctionEjRNS_11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(795), i32 noundef, ptr noundef nonnull align 8 dereferenceable(280)) #3 align 2

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA18_KcS7_RA5_S8_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(18), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(5), ptr noundef nonnull align 8 dereferenceable(32)) #3

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZSt4swapIbENSt9enable_ifIXsr6__and_ISt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS3_ESt18is_move_assignableIS3_EEE5valueEvE4typeERS3_SC_(ptr noundef nonnull align 1 dereferenceable(1), ptr noundef nonnull align 1 dereferenceable(1)) #7

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS6_S9_S6_RA2_S7_S6_SB_S6_S9_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(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), 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(3)) #3

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRPKcRA2_S2_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_SC_SE_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 1 dereferenceable(2), 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_cross4joinIJRPKcRA2_S1_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_S1_SB_S5_EEESB_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(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 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) #3

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRA18_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 1 dereferenceable(18), 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_cross12CompilerGLSL9statementIJRA20_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 1 dereferenceable(20), 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_cross4joinIJRA20_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(20), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA14_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(14), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA16_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(16), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) #3

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_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(3)) #3

; Function Attrs: inlinehint mustprogress uwtable
declare hidden ptr @"_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPN11spirv_cross8PlsRemapESt6vectorIS3_SaIS3_EEEEZNS2_12CompilerGLSL16emit_instructionERKNS2_11InstructionEE3$_0ET_SE_SE_T0_"(ptr, ptr, ptr) #6

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local ptr @_ZSt5beginISt6vectorIN11spirv_cross8PlsRemapESaIS2_EEEDTcldtfp_5beginEERT_(ptr noundef nonnull align 8 dereferenceable(24)) #7

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local ptr @_ZSt3endISt6vectorIN11spirv_cross8PlsRemapESaIS2_EEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(24)) #7

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9__gnu_cxxeqIPN11spirv_cross8PlsRemapESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #7

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef i32 @_ZL24pls_format_to_componentsN11spirv_cross9PlsFormatE(i32 noundef) #1

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA13_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(13), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(3), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA13_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(13), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA12_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA27_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(12), 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(2)) #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA12_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA29_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(29)) #3

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA23_KcS7_RA3_S8_RS7_SC_S7_SC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32), 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(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_cross4joinIJRA11_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_SB_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(11), 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)) #3

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross8Compiler3setINS_14SPIRExpressionEJRNSt7__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)) #3 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRA12_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_RSA_SC_SA_SC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 1 dereferenceable(12), 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)) #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: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA11_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(11), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) #3

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN11spirv_cross12CompilerGLSL30mask_relevant_memory_semanticsEj(i32 noundef) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN11spirv_cross12CompilerGLSL29get_next_instruction_in_blockERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 4 dereferenceable(12)) #1 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN3spvorENS_19MemorySemanticsMaskES0_(i32 noundef, i32 noundef) #7

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA17_KcRNSt7__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(17), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) #3

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA5_KcRPS1_RA2_S1_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_SD_SF_EEESD_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(5), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 1 dereferenceable(2), 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)) #3

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRA22_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 1 dereferenceable(22), 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_cross12CompilerGLSL9statementIJRA33_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_SA_SC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 1 dereferenceable(33), 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_cross12CompilerGLSL9statementIJRA32_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 1 dereferenceable(32), 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_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(23), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA24_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(24), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA30_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(30), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA33_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(33), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA47_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(47), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) #3

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA26_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(26), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) #3

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !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 = !{!10, !12, i64 8}
!16 = !{!12, !12, i64 0}
!17 = !{!18, !18, i64 0}
!18 = !{!"_ZTSN11spirv_cross8SPIRType8BaseTypeE", !7, i64 0}
!19 = !{!20, !62, i64 8411}
!20 = !{!"_ZTSN11spirv_cross12CompilerGLSLE", !21, i64 0, !6, i64 3176, !86, i64 3184, !62, i64 3272, !89, i64 3280, !6, i64 7616, !6, i64 7624, !62, i64 7632, !62, i64 7633, !94, i64 7636, !98, i64 7680, !98, i64 7736, !98, i64 7792, !98, i64 7848, !98, i64 7904, !98, i64 7960, !98, i64 8016, !100, i64 8072, !84, i64 8128, !62, i64 8184, !102, i64 8192, !12, i64 8416, !68, i64 8424, !68, i64 8480, !68, i64 8536, !103, i64 8592, !105, i64 8648, !106, i64 8656, !50, i64 8712, !50, i64 8992, !106, i64 9272, !108, i64 9328, !12, i64 9384, !12, i64 9388, !12, i64 9392, !62, i64 9396, !62, i64 9397, !111, i64 9400, !111, i64 9424, !115, i64 9448, !119, i64 9472, !106, i64 9496, !68, i64 9552, !68, i64 9608, !7, i64 9664, !123, i64 9672, !68, i64 9728, !6, i64 9784, !125, i64 9792}
!21 = !{!"_ZTSN11spirv_cross8CompilerE", !22, i64 8, !70, i64 1928, !70, i64 1984, !6, i64 2040, !6, i64 2048, !12, i64 2056, !73, i64 2064, !62, i64 2120, !68, i64 2128, !62, i64 2184, !62, i64 2185, !75, i64 2192, !70, i64 2312, !78, i64 2368, !68, i64 2400, !68, i64 2456, !68, i64 2512, !68, i64 2568, !68, i64 2624, !67, i64 2680, !67, i64 2744, !12, i64 2808, !12, i64 2812, !62, i64 2816, !68, i64 2824, !62, i64 2880, !62, i64 2881, !12, i64 2884, !80, i64 2888, !70, i64 2944, !82, i64 3000, !68, i64 3056, !62, i64 3112, !84, i64 3120}
!22 = !{!"_ZTSN11spirv_cross8ParsedIRE", !23, i64 0, !29, i64 8, !33, i64 32, !37, i64 248, !7, i64 304, !42, i64 1088, !42, i64 1144, !45, i64 1200, !47, i64 1256, !50, i64 1312, !53, i64 1592, !56, i64 1624, !58, i64 1680, !60, i64 1736, !61, i64 1740, !63, i64 1748, !64, i64 1752, !12, i64 1756, !12, i64 1760, !65, i64 1768, !67, i64 1800, !68, i64 1864}
!23 = !{!"_ZTSSt10unique_ptrIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EE", !24, i64 0}
!24 = !{!"_ZTSSt15__uniq_ptr_dataIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_ELb1ELb1EE", !25, i64 0}
!25 = !{!"_ZTSSt15__uniq_ptr_implIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EE", !26, i64 0}
!26 = !{!"_ZTSSt5tupleIJPN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EEE", !27, i64 0}
!27 = !{!"_ZTSSt11_Tuple_implILm0EJPN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EEE", !28, i64 0}
!28 = !{!"_ZTSSt10_Head_baseILm0EPN11spirv_cross15ObjectPoolGroupELb0EE", !6, i64 0}
!29 = !{!"_ZTSSt6vectorIjSaIjEE", !30, i64 0}
!30 = !{!"_ZTSSt12_Vector_baseIjSaIjEE", !31, i64 0}
!31 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE12_Vector_implE", !32, i64 0}
!32 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!33 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7VariantELm8EEE", !34, i64 0, !35, i64 16, !36, i64 24}
!34 = !{!"_ZTSN11spirv_cross10VectorViewINS_7VariantEEE", !6, i64 0, !35, i64 8}
!35 = !{!"long", !7, i64 0}
!36 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7VariantELm8EEE", !7, i64 0}
!37 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !38, i64 0}
!38 = !{!"_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, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !6, i64 48}
!39 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!40 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !41, i64 0, !35, i64 8}
!41 = !{!"float", !7, i64 0}
!42 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EEE", !43, i64 0, !35, i64 16, !44, i64 24}
!43 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEEE", !6, i64 0, !35, i64 8}
!44 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE0EEELm8EEE", !7, i64 0}
!45 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEEjSt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_jEEE", !46, i64 0}
!46 = !{!"_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, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !6, i64 48}
!47 = !{!"_ZTSN11spirv_cross11SmallVectorIN3spv10CapabilityELm8EEE", !48, i64 0, !35, i64 16, !49, i64 24}
!48 = !{!"_ZTSN11spirv_cross10VectorViewIN3spv10CapabilityEEE", !6, i64 0, !35, i64 8}
!49 = !{!"_ZTSN11spirv_cross13AlignedBufferIN3spv10CapabilityELm8EEE", !7, i64 0}
!50 = !{!"_ZTSN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !51, i64 0, !35, i64 16, !52, i64 24}
!51 = !{!"_ZTSN11spirv_cross10VectorViewINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE", !6, i64 0, !35, i64 8}
!52 = !{!"_ZTSN11spirv_cross13AlignedBufferINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !7, i64 0}
!53 = !{!"_ZTSN11spirv_cross11SmallVectorIhLm8EEE", !54, i64 0, !35, i64 16, !55, i64 24}
!54 = !{!"_ZTSN11spirv_cross10VectorViewIhEE", !6, i64 0, !35, i64 8}
!55 = !{!"_ZTSN11spirv_cross13AlignedBufferIhLm8EEE", !7, i64 0}
!56 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE6EEES3_St4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S3_EEE", !57, i64 0}
!57 = !{!"_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, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !6, i64 48}
!58 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE4EEENS0_14SPIREntryPointESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !59, i64 0}
!59 = !{!"_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, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !6, i64 48}
!60 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE4EEE", !12, i64 0}
!61 = !{!"_ZTSN11spirv_cross8ParsedIR6SourceE", !12, i64 0, !62, i64 4, !62, i64 5, !62, i64 6}
!62 = !{!"bool", !7, i64 0}
!63 = !{!"_ZTSN3spv15AddressingModelE", !7, i64 0}
!64 = !{!"_ZTSN3spv11MemoryModelE", !7, i64 0}
!65 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !66, i64 0, !35, i64 8, !7, i64 16}
!66 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!67 = !{!"_ZTSN11spirv_cross6BitsetE", !35, i64 0, !68, i64 8}
!68 = !{!"_ZTSSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE", !69, i64 0}
!69 = !{!"_ZTSSt10_HashtableIjjSaIjENSt8__detail9_IdentityESt8equal_toIjESt4hashIjENS1_18_Mod_range_hashingENS1_20_Default_ranged_hashENS1_20_Prime_rehash_policyENS1_17_Hashtable_traitsILb0ELb1ELb1EEEE", !6, i64 0, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !6, i64 48}
!70 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !71, i64 0, !35, i64 16, !72, i64 24}
!71 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !6, i64 0, !35, i64 8}
!72 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !7, i64 0}
!73 = !{!"_ZTSSt13unordered_setIN11spirv_cross7TypedIDILNS0_5TypesE2EEESt4hashIS3_ESt8equal_toIS3_ESaIS3_EE", !74, i64 0}
!74 = !{!"_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, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !6, i64 48}
!75 = !{!"_ZTSN11spirv_cross11SmallVectorINS_20CombinedImageSamplerELm8EEE", !76, i64 0, !35, i64 16, !77, i64 24}
!76 = !{!"_ZTSN11spirv_cross10VectorViewINS_20CombinedImageSamplerEEE", !6, i64 0, !35, i64 8}
!77 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_20CombinedImageSamplerELm8EEE", !7, i64 0}
!78 = !{!"_ZTSSt8functionIFvRKN11spirv_cross8SPIRTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERS9_EE", !79, i64 0, !6, i64 24}
!79 = !{!"_ZTSSt14_Function_base", !7, i64 0, !6, i64 16}
!80 = !{!"_ZTSSt13unordered_mapIjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS2_EESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !81, i64 0}
!81 = !{!"_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, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !6, i64 48}
!82 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross8Compiler17PhysicalBlockMetaESt4hashIjESt8equal_toIjESaISt4pairIKjS2_EEE", !83, i64 0}
!83 = !{!"_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, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !6, i64 48}
!84 = !{!"_ZTSSt13unordered_mapIjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !85, i64 0}
!85 = !{!"_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, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !6, i64 48}
!86 = !{!"_ZTSN11spirv_cross11SmallVectorIPNS_9SPIRBlockELm8EEE", !87, i64 0, !35, i64 16, !88, i64 24}
!87 = !{!"_ZTSN11spirv_cross10VectorViewIPNS_9SPIRBlockEEE", !6, i64 0, !35, i64 8}
!88 = !{!"_ZTSN11spirv_cross13AlignedBufferIPNS_9SPIRBlockELm8EEE", !7, i64 0}
!89 = !{!"_ZTSN11spirv_cross12StringStreamILm4096ELm4096EEE", !90, i64 0, !7, i64 24, !91, i64 4120}
!90 = !{!"_ZTSN11spirv_cross12StringStreamILm4096ELm4096EE6BufferE", !6, i64 0, !35, i64 8, !35, i64 16}
!91 = !{!"_ZTSN11spirv_cross11SmallVectorINS_12StringStreamILm4096ELm4096EE6BufferELm8EEE", !92, i64 0, !35, i64 16, !93, i64 24}
!92 = !{!"_ZTSN11spirv_cross10VectorViewINS_12StringStreamILm4096ELm4096EE6BufferEEE", !6, i64 0, !35, i64 8}
!93 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_12StringStreamILm4096ELm4096EE6BufferELm8EEE", !7, i64 0}
!94 = !{!"_ZTSN11spirv_cross12CompilerGLSL7OptionsE", !12, i64 0, !62, i64 4, !62, i64 5, !12, i64 8, !62, i64 12, !62, i64 13, !62, i64 14, !62, i64 15, !62, i64 16, !62, i64 17, !62, i64 18, !62, i64 19, !62, i64 20, !62, i64 21, !62, i64 22, !62, i64 23, !12, i64 24, !95, i64 28, !96, i64 32}
!95 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options13VertexOptionsE", !62, i64 0, !62, i64 1, !62, i64 2}
!96 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options15FragmentOptionsE", !97, i64 0, !97, i64 4}
!97 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options9PrecisionE", !7, i64 0}
!98 = !{!"_ZTSSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE", !99, i64 0}
!99 = !{!"_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, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !6, i64 48}
!100 = !{!"_ZTSSt13unordered_mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt13unordered_setImSt4hashImESt8equal_toImESaImEES7_IS5_ES9_IS5_ESaISt4pairIKS5_SC_EEE", !101, i64 0}
!101 = !{!"_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, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !6, i64 48}
!102 = !{!"_ZTSN11spirv_cross12CompilerGLSL17BackendVariationsE", !65, i64 0, !65, i64 32, !65, i64 64, !62, i64 96, !62, i64 97, !62, i64 98, !62, 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, !18, i64 184, !62, i64 188, !62, i64 189, !62, i64 190, !62, i64 191, !62, i64 192, !62, i64 193, !62, i64 194, !62, i64 195, !62, i64 196, !62, i64 197, !62, i64 198, !62, i64 199, !62, i64 200, !62, i64 201, !62, i64 202, !62, i64 203, !62, i64 204, !62, i64 205, !62, i64 206, !62, i64 207, !62, i64 208, !62, i64 209, !62, i64 210, !62, i64 211, !62, i64 212, !62, i64 213, !62, i64 214, !62, i64 215, !62, i64 216, !62, i64 217, !62, i64 218, !62, i64 219}
!103 = !{!"_ZTSSt13unordered_mapIjbSt4hashIjESt8equal_toIjESaISt4pairIKjbEEE", !104, i64 0}
!104 = !{!"_ZTSSt10_HashtableIjSt4pairIKjbESaIS2_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !6, i64 48}
!105 = !{!"_ZTSN11spirv_cross12CompilerGLSL27ShaderSubgroupSupportHelperE", !12, i64 0}
!106 = !{!"_ZTSSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEE", !107, i64 0}
!107 = !{!"_ZTSSt10_HashtableIjSt4pairIKjjESaIS2_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !6, i64 48}
!108 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEE", !109, i64 0, !35, i64 16, !110, i64 24}
!109 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEE", !6, i64 0, !35, i64 8}
!110 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE1EEELm8EEE", !7, i64 0}
!111 = !{!"_ZTSSt6vectorIN11spirv_cross8PlsRemapESaIS1_EE", !112, i64 0}
!112 = !{!"_ZTSSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE", !113, i64 0}
!113 = !{!"_ZTSNSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE12_Vector_implE", !114, i64 0}
!114 = !{!"_ZTSNSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!115 = !{!"_ZTSSt6vectorISt4pairIjjESaIS1_EE", !116, i64 0}
!116 = !{!"_ZTSSt12_Vector_baseISt4pairIjjESaIS1_EE", !117, i64 0}
!117 = !{!"_ZTSNSt12_Vector_baseISt4pairIjjESaIS1_EE12_Vector_implE", !118, i64 0}
!118 = !{!"_ZTSNSt12_Vector_baseISt4pairIjjESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!119 = !{!"_ZTSSt6vectorISt4pairIjbESaIS1_EE", !120, i64 0}
!120 = !{!"_ZTSSt12_Vector_baseISt4pairIjbESaIS1_EE", !121, i64 0}
!121 = !{!"_ZTSNSt12_Vector_baseISt4pairIjbESaIS1_EE12_Vector_implE", !122, i64 0}
!122 = !{!"_ZTSNSt12_Vector_baseISt4pairIjbESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!123 = !{!"_ZTSSt13unordered_setIN11spirv_cross21LocationComponentPairENS0_14InternalHasherESt8equal_toIS1_ESaIS1_EE", !124, i64 0}
!124 = !{!"_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, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !6, i64 48}
!125 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross11SmallVectorINS0_7TypedIDILNS0_5TypesE3EEELm8EEESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !126, i64 0}
!126 = !{!"_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, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !6, i64 48}
!127 = !{i8 0, i8 2}
!128 = !{}
!129 = !{!130, !12, i64 24}
!130 = !{!"_ZTSN11spirv_cross8SPIRTypeE", !131, i64 0, !14, i64 12, !18, i64 16, !12, i64 20, !12, i64 24, !12, i64 28, !70, i64 32, !133, i64 88, !12, i64 120, !62, i64 124, !62, i64 125, !136, i64 128, !108, i64 136, !70, i64 192, !137, i64 248, !138, i64 272, !138, i64 276, !98, i64 280}
!131 = !{!"_ZTSN11spirv_cross8IVariantE", !132, i64 8}
!132 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !12, i64 0}
!133 = !{!"_ZTSN11spirv_cross11SmallVectorIbLm8EEE", !134, i64 0, !35, i64 16, !135, i64 24}
!134 = !{!"_ZTSN11spirv_cross10VectorViewIbEE", !6, i64 0, !35, i64 8}
!135 = !{!"_ZTSN11spirv_cross13AlignedBufferIbLm8EEE", !7, i64 0}
!136 = !{!"_ZTSN3spv12StorageClassE", !7, i64 0}
!137 = !{!"_ZTSN11spirv_cross8SPIRType9ImageTypeE", !138, i64 0, !139, i64 4, !62, i64 8, !62, i64 9, !62, i64 10, !12, i64 12, !140, i64 16, !141, i64 20}
!138 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !12, i64 0}
!139 = !{!"_ZTSN3spv3DimE", !7, i64 0}
!140 = !{!"_ZTSN3spv11ImageFormatE", !7, i64 0}
!141 = !{!"_ZTSN3spv15AccessQualifierE", !7, i64 0}
!142 = !{!62, !62, i64 0}
!143 = !{!144, !62, i64 57}
!144 = !{!"_ZTSN11spirv_cross14SPIRExpressionE", !131, i64 0, !132, i64 12, !65, i64 16, !138, i64 48, !132, i64 52, !62, i64 56, !62, i64 57, !62, i64 58, !62, i64 59, !42, i64 64, !42, i64 120, !42, i64 176, !12, i64 232}
!145 = !{!146, !146, i64 0}
!146 = !{!"vtable pointer", !8, i64 0}
!147 = !{!20, !62, i64 8405}
!148 = !{!130, !18, i64 16}
!149 = !{!130, !12, i64 28}
!150 = !{!20, !62, i64 8386}
!151 = !{i64 0, i64 4, !16}
!152 = !{!153, !62, i64 4}
!153 = !{!"_ZTSN11spirv_cross15AccessChainMetaE", !12, i64 0, !62, i64 4, !62, i64 5, !62, i64 6, !62, i64 7, !62, i64 8, !62, i64 9, !62, i64 10, !154, i64 12}
!154 = !{!"_ZTSN3spv7BuiltInE", !7, i64 0}
!155 = !{!144, !62, i64 58}
!156 = !{!153, !62, i64 9}
!157 = !{!144, !62, i64 59}
!158 = !{!153, !62, i64 5}
!159 = !{!153, !12, i64 0}
!160 = !{!153, !62, i64 6}
!161 = !{!153, !62, i64 7}
!162 = !{!153, !62, i64 8}
!163 = !{!20, !62, i64 8410}
!164 = !{!153, !62, i64 10}
!165 = !{!153, !154, i64 12}
!166 = distinct !{!166, !167}
!167 = !{!"llvm.loop.mustprogress"}
!168 = !{!169, !62, i64 89}
!169 = !{!"_ZTSN11spirv_cross12SPIRVariableE", !131, i64 0, !138, i64 12, !136, i64 16, !12, i64 20, !132, i64 24, !170, i64 28, !70, i64 32, !62, i64 88, !62, i64 89, !132, i64 92, !42, i64 96, !62, i64 152, !62, i64 153, !62, i64 154, !62, i64 155, !12, i64 156, !171, i64 160, !62, i64 164, !62, i64 165, !62, i64 166, !6, i64 168}
!170 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE2EEE", !12, i64 0}
!171 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE6EEE", !12, i64 0}
!172 = !{!169, !62, i64 164}
!173 = !{!169, !62, i64 165}
!174 = !{!169, !62, i64 155}
!175 = !{!130, !62, i64 124}
!176 = !{!177, !12, i64 12}
!177 = !{!"_ZTSN11spirv_cross12SPIRFunction9ParameterE", !138, i64 0, !132, i64 4, !12, i64 8, !12, i64 12, !62, i64 16}
!178 = distinct !{!178, !167}
!179 = !{!20, !62, i64 8394}
!180 = distinct !{!180, !167}
!181 = !{!182, !62, i64 12}
!182 = !{!"_ZTSN11spirv_cross12SPIRFunction29CombinedImageSamplerParameterE", !170, i64 0, !170, i64 4, !170, i64 8, !62, i64 12, !62, i64 13, !62, i64 14}
!183 = !{!182, !62, i64 13}
!184 = distinct !{!184, !167}
!185 = distinct !{!185, !167}
!186 = !{!20, !62, i64 8389}
!187 = !{!20, !62, i64 8391}
!188 = distinct !{!188, !167}
!189 = !{!20, !62, i64 8387}
!190 = !{!20, !62, i64 8397}
!191 = !{!20, !62, i64 8384}
!192 = !{!20, !62, i64 8385}
!193 = !{!20, !62, i64 8398}
!194 = distinct !{!194, !167}
!195 = !{!196, !62, i64 264}
!196 = !{!"_ZTSN11spirv_cross12SPIRConstantE", !131, i64 0, !138, i64 12, !197, i64 16, !62, i64 264, !62, i64 265, !62, i64 266, !198, i64 272, !65, i64 328}
!197 = !{!"_ZTSN11spirv_cross12SPIRConstant14ConstantMatrixE", !7, i64 0, !7, i64 224, !12, i64 240}
!198 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE3EEELm8EEE", !199, i64 0, !35, i64 16, !200, i64 24}
!199 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE3EEEEE", !6, i64 0, !35, i64 8}
!200 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE3EEELm8EEE", !7, i64 0}
!201 = !{!10, !12, i64 4}
!202 = distinct !{!202, !167}
!203 = distinct !{!203, !167}
!204 = distinct !{!204, !167}
!205 = !{!20, !62, i64 8380}
!206 = distinct !{!206, !167}
!207 = !{!20, !12, i64 7636}
!208 = distinct !{!208, !167}
!209 = !{!7, !7, i64 0}
!210 = !{!20, !62, i64 7640}
!211 = !{!130, !12, i64 20}
!212 = !{!130, !136, i64 128}
!213 = !{!20, !6, i64 8360}
!214 = !{!130, !12, i64 260}
!215 = !{!130, !139, i64 252}
!216 = !{!130, !62, i64 258}
!217 = !{!218, !6, i64 0}
!218 = !{!"_ZTSZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionEE3$_0", !6, i64 0}
!219 = !{!169, !12, i64 156}
!220 = !{!221, !222, i64 4}
!221 = !{!"_ZTSN11spirv_cross8PlsRemapE", !12, i64 0, !222, i64 4}
!222 = !{!"_ZTSN11spirv_cross9PlsFormatE", !7, i64 0}
!223 = !{!20, !62, i64 7648}
!224 = !{!225, !230, i64 232}
!225 = !{!"_ZTSN11spirv_cross14SPIREntryPointE", !60, i64 0, !65, i64 8, !65, i64 40, !226, i64 72, !67, i64 128, !229, i64 192, !12, i64 220, !12, i64 224, !12, i64 228, !230, i64 232, !62, i64 236}
!226 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE2EEELm8EEE", !227, i64 0, !35, i64 16, !228, i64 24}
!227 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEEE", !6, i64 0, !35, i64 8}
!228 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE2EEELm8EEE", !7, i64 0}
!229 = !{!"_ZTSN11spirv_cross14SPIREntryPoint13WorkgroupSizeE", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !12, i64 16, !12, i64 20, !12, i64 24}
!230 = !{!"_ZTSN3spv14ExecutionModelE", !7, i64 0}
!231 = !{!20, !6, i64 3176}
!232 = !{!233, !234, i64 12}
!233 = !{!"_ZTSN11spirv_cross13SPIRExtensionE", !131, i64 0, !234, i64 12}
!234 = !{!"_ZTSN11spirv_cross13SPIRExtension9ExtensionE", !7, i64 0}
!235 = !{!234, !234, i64 0}
!236 = distinct !{!236, !167}
!237 = !{!20, !62, i64 9396}
!238 = !{!21, !62, i64 3112}
!239 = !{!240, !240, i64 0}
!240 = !{!"_ZTSN3spv5ScopeE", !7, i64 0}


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

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"struct.spirv_cross::SPIRType" = type { %"struct.spirv_cross::IVariant.base", i32, i32, i32, i32, i32, %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.284", i32, i8, i8, i32, %"class.spirv_cross::SmallVector.227", %"class.spirv_cross::SmallVector.92", %"struct.spirv_cross::SPIRType::ImageType", %"class.spirv_cross::TypedID.281", %"class.spirv_cross::TypedID.281", %"class.std::unordered_set.165" }
%"struct.spirv_cross::IVariant.base" = type <{ ptr, %"class.spirv_cross::TypedID.280" }>
%"class.spirv_cross::TypedID.280" = type { i32 }
%"class.spirv_cross::SmallVector.284" = type { %"class.spirv_cross::VectorView.285", i64, %"class.spirv_cross::AlignedBuffer.286" }
%"class.spirv_cross::VectorView.285" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.286" = 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.281", i32, i8, i8, i8, i32, i32, i32 }
%"class.spirv_cross::TypedID.281" = 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.std::__detail::_Node_iterator.364" = type { %"struct.std::__detail::_Node_iterator_base.365" }
%"struct.std::__detail::_Node_iterator_base.365" = type { ptr }
%"struct.spirv_cross::AccessChainMeta" = type { i32, i8, i8, i8, i8, i8, i8, i8, i32 }
%"class.spirv_cross::SmallVector.27" = type { %"class.spirv_cross::VectorView.28", i64, %"class.spirv_cross::AlignedBuffer.29" }
%"class.spirv_cross::VectorView.28" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.29" = type { [256 x i8] }
%"class.spirv_cross::TypedID.282" = type { i32 }
%"struct.spirv_cross::EmbeddedInstruction" = type { %"struct.spirv_cross::Instruction", %"class.spirv_cross::SmallVector.92" }
%"struct.spirv_cross::Instruction" = type { i16, i16, i32, i32 }
%"struct.spirv_cross::SPIRConstant" = type { %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.281", %"struct.spirv_cross::SPIRConstant::ConstantMatrix", i8, i8, i8, %"class.spirv_cross::SmallVector.310", %"class.std::__cxx11::basic_string" }
%"struct.spirv_cross::SPIRConstant::ConstantMatrix" = type { [4 x %"struct.spirv_cross::SPIRConstant::ConstantVector"], [4 x %"class.spirv_cross::TypedID.280"], i32, [4 x i8] }
%"struct.spirv_cross::SPIRConstant::ConstantVector" = type <{ [4 x %"union.spirv_cross::SPIRConstant::Constant"], [4 x %"class.spirv_cross::TypedID.280"], i32, [4 x i8] }>
%"union.spirv_cross::SPIRConstant::Constant" = type { i64 }
%"class.spirv_cross::SmallVector.310" = type { %"class.spirv_cross::VectorView.311", i64, %"class.spirv_cross::AlignedBuffer.312" }
%"class.spirv_cross::VectorView.311" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.312" = type { [32 x i8] }
%"class.std::allocator.71" = type { i8 }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }

@.str = external hidden unnamed_addr constant [3 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [90 x i8], align 1
@_ZTIN11spirv_cross13CompilerErrorE = external dso_local constant { ptr, ptr, ptr }, align 8
@.str.26 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.59 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.61 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.135 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.177 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.298 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.307 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.335 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.343 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.344 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.349 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.350 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.352 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.353 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.354 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.355 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.356 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.357 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.358 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.359 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.360 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.361 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.362 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.368 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.369 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.370 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.371 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.372 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.373 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.375 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.380 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.394 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.395 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.396 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.397 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.398 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.400 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.401 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.402 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.403 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.404 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.405 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.406 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.407 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.412 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.420 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.421 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.424 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.425 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.437 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.445 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.446 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.447 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.490 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.492 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.493 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.495 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.498 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.509 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.718 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.719 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.720 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.751 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.756 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.760 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.772 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.776 = external hidden unnamed_addr constant [2 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.955 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.956 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.957 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.958 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.959 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.960 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.961 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.962 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.963 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.964 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.965 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.966 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.967 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.968 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.969 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.970 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.971 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.972 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.973 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.974 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.975 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.976 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.977 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1014 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1016 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1061 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.1089 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1095 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1096 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1137 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.1210 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.1383 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.1384 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1385 = external hidden unnamed_addr constant [27 x i8], align 1
@__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE = external hidden unnamed_addr constant [78 x i8], align 1
@.str.1386 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.1387 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.1388 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1389 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.1390 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.1391 = external hidden unnamed_addr constant [54 x i8], align 1
@.str.1392 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1393 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.1394 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1395 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.1396 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1397 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1398 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1399 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1400 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.1401 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.1402 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.1403 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.1404 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.1405 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1406 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1407 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.1408 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.1409 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.1410 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.1411 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.1412 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1413 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.1414 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.1415 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.1416 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.1417 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.1418 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.1419 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.1420 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.1421 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.1422 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.1423 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.1424 = external hidden unnamed_addr constant [61 x i8], align 1
@.str.1425 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.1426 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.1427 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.1428 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.1429 = external hidden unnamed_addr constant [70 x i8], align 1
@.str.1430 = external hidden unnamed_addr constant [70 x i8], align 1
@.str.1431 = external hidden unnamed_addr constant [78 x i8], align 1
@.str.1432 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.1433 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.1434 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.1435 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.1436 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.1437 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1438 = external hidden unnamed_addr constant [79 x i8], align 1
@.str.1439 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.1440 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.1441 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.1442 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1443 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.1444 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.1445 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.1446 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.1447 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.1448 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.1450 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.1451 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.1452 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.1453 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.1454 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.1456 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1457 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.1458 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.1459 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.1460 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.1461 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.1462 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.1463 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.1464 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.1465 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.1466 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.1467 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.1468 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.1469 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.1470 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1471 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.1472 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.1473 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.1474 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.1475 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.1476 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.1477 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.1478 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.1479 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.1480 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.1481 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.1482 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.1483 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.1484 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.1485 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.1486 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.1487 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1488 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1489 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1490 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1491 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1492 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1493 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.1494 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.1495 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.1496 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.1497 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.1498 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.1499 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.1500 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.1501 = external hidden unnamed_addr constant [64 x i8], align 1
@.str.1502 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.1503 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.1504 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.1505 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.1506 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.1507 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.1508 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.1509 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.1510 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.1511 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.1512 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.1513 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.1514 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1515 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.1516 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.1517 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.1518 = external hidden unnamed_addr constant [66 x i8], align 1
@.str.1519 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.1520 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.1521 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.1522 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.1523 = external hidden unnamed_addr constant [46 x i8], align 1
@.str.1524 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.1525 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.1526 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.1527 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.1528 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.1529 = external hidden unnamed_addr constant [75 x i8], align 1
@.str.1530 = external hidden unnamed_addr constant [75 x i8], align 1
@.str.1531 = external hidden unnamed_addr constant [69 x i8], align 1
@.str.1532 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.1533 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.1534 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.1535 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.1536 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.1537 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.1538 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.1539 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.1540 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1541 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.1542 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.1543 = external hidden unnamed_addr constant [21 x i8], align 1
@switch.table._ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE = private unnamed_addr constant [4 x ptr] [ptr @.str.1445, ptr @.str.1446, ptr @.str.1447, ptr @.str.1448], align 8
@switch.table._ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE.1 = private unnamed_addr constant [4 x ptr] [ptr @.str.1451, ptr @.str.1452, ptr @.str.1453, ptr @.str.1454], align 8

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN11spirv_cross12CompilerGLSL14vector_swizzleEii(i32 noundef, i32 noundef) local_unnamed_addr #1 align 2

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #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 #3 align 2

declare i32 @__gxx_personality_v0(...)

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 #4

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #3 align 2

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL12is_legacy_esEv(ptr noundef nonnull align 8 dereferenceable(9848)) local_unnamed_addr #7 align 2

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL24request_subgroup_featureENS0_27ShaderSubgroupSupportHelper7FeatureE(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) local_unnamed_addr #3 align 2

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL13type_is_emptyERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #1 align 2

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL17is_legacy_desktopEv(ptr noundef nonnull align 8 dereferenceable(9848)) local_unnamed_addr #7 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848)) local_unnamed_addr #7 align 2

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

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

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

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

declare noundef nonnull align 8 dereferenceable(64) ptr @_ZNK11spirv_cross8Compiler21get_decoration_bitsetENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(3176), i32) local_unnamed_addr #5

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #1 align 2

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

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

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

; 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 uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind noalias 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 #3 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL19constant_expressionB5cxx11ERKNS_12SPIRConstantEbb(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(360), i1 noundef zeroext, i1 noundef zeroext) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL13remap_swizzleERKNS_8SPIRTypeEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind noalias 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 #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind noalias 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 #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN11spirv_cross12CompilerGLSL16index_to_swizzleEj(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) local_unnamed_addr #1 align 2

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind noalias 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 #3 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL29force_temporary_and_recompileEj(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) local_unnamed_addr #3 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local 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 #3 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL30convert_non_uniform_expressionERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32), i32 noundef) local_unnamed_addr #3 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local ptr @_ZSt3endISt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(56)) local_unnamed_addr #7

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL21track_expression_readEj(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) local_unnamed_addr #3 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionERKNS_8SPIRTypeENS1_8BaseTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind noalias 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 #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local 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 #3 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef) local_unnamed_addr #7

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL24binary_op_bitcast_helperERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_RNS_8SPIRType8BaseTypeEjjb(ptr dead_on_unwind noalias 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 #3 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS6_SA_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), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #3

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS6_S9_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), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #3

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNSt8__detaileqERKNS_19_Node_iterator_baseIjLb0EEES3_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL13emit_unary_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i32 noundef, i32 noundef, ptr noundef) local_unnamed_addr #3 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL18emit_unary_op_castEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i32 noundef, i32 noundef, ptr noundef) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local 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 #3 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local 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 #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEcRS6_cEEES6_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(1), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i32 noundef, i32 noundef, ptr noundef) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local 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 #3 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL19emit_atomic_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef) local_unnamed_addr #3 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL19emit_atomic_func_opEjjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local 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 #3 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local 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 #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRPKcRA2_S1_RNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_SB_S5_EEESB_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 1 dereferenceable(2), 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 #3

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL20emit_trinary_func_opEjjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local 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 #3 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL11emit_mix_opEjjjjj(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #3 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #1 align 2

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL32emit_sparse_feedback_temporariesEjjRjS1_(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i32 noundef, ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #3 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) local_unnamed_addr #3 align 2

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK11spirv_cross12CompilerGLSL21get_remapped_spirv_opEN3spv2OpE(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL26register_call_out_argumentEj(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) local_unnamed_addr #3 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local 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 #3 align 2

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL22store_flattened_structEjj(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i32 noundef) local_unnamed_addr #3 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL29register_impure_function_callEv(ptr noundef nonnull align 8 dereferenceable(9848)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) local_unnamed_addr #3 align 2

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 4 dereferenceable(12) %1) unnamed_addr #3 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca %"struct.std::__detail::_Node_iterator.364", align 8
  %6 = alloca %"struct.std::__detail::_Node_iterator.364", align 8
  %7 = alloca %"class.std::__cxx11::basic_string", align 8
  %8 = alloca %"class.std::__cxx11::basic_string", align 8
  %9 = alloca %"class.std::__cxx11::basic_string", align 8
  %10 = alloca %"class.std::__cxx11::basic_string", align 8
  %11 = alloca %"class.std::__cxx11::basic_string", align 8
  %12 = alloca %"class.spirv_cross::TypedID.280", align 4
  %13 = alloca i32, align 4
  %14 = alloca %"class.spirv_cross::TypedID.281", align 4
  %15 = alloca %"class.spirv_cross::TypedID.280", align 4
  %16 = alloca %"struct.spirv_cross::AccessChainMeta", align 4
  %17 = alloca %"class.std::__cxx11::basic_string", align 8
  %18 = alloca i8, align 1
  %19 = alloca %"class.spirv_cross::TypedID.280", align 4
  %20 = alloca %"class.spirv_cross::TypedID.280", align 4
  %21 = alloca %"class.spirv_cross::TypedID.280", align 4
  %22 = alloca %"class.spirv_cross::TypedID.280", align 4
  %23 = alloca %"class.spirv_cross::TypedID.280", align 4
  %24 = alloca %"class.spirv_cross::TypedID.280", align 4
  %25 = alloca i32, align 4
  %26 = alloca %"class.std::__cxx11::basic_string", align 8
  %27 = alloca %"class.spirv_cross::TypedID.280", align 4
  %28 = alloca %"class.std::__cxx11::basic_string", align 8
  %29 = alloca %"class.std::__cxx11::basic_string", align 8
  %30 = alloca i8, align 1
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca %"class.std::__cxx11::basic_string", align 8
  %34 = alloca %"class.spirv_cross::SmallVector.27", 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.spirv_cross::TypedID.282", align 4
  %43 = alloca %"class.spirv_cross::TypedID.282", align 4
  %44 = alloca %"class.std::__cxx11::basic_string", align 8
  %45 = alloca %"class.std::__cxx11::basic_string", align 8
  %46 = alloca %"struct.std::__detail::_Node_iterator.364", align 8
  %47 = alloca %"struct.std::__detail::_Node_iterator.364", align 8
  %48 = alloca %"class.std::__cxx11::basic_string", align 8
  %49 = alloca i8, align 1
  %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 i32, align 4
  %63 = alloca i32, align 4
  %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 i8, align 1
  %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 i32, align 4
  %72 = alloca %"struct.std::__detail::_Node_iterator.364", align 8
  %73 = alloca %"struct.std::__detail::_Node_iterator.364", align 8
  %74 = alloca %"struct.spirv_cross::AccessChainMeta", align 4
  %75 = alloca %"class.std::__cxx11::basic_string", align 8
  %76 = alloca %"class.std::__cxx11::basic_string", align 8
  %77 = alloca %"class.spirv_cross::TypedID.280", align 4
  %78 = alloca %"class.spirv_cross::TypedID.280", align 4
  %79 = alloca %"class.std::__cxx11::basic_string", align 8
  %80 = alloca %"class.spirv_cross::TypedID.280", align 4
  %81 = alloca i32, align 4
  %82 = alloca i32, align 4
  %83 = alloca i32, align 4
  %84 = alloca %"class.spirv_cross::TypedID.280", align 4
  %85 = alloca %"class.spirv_cross::TypedID.280", align 4
  %86 = alloca %"class.std::__cxx11::basic_string", align 8
  %87 = alloca %"class.std::__cxx11::basic_string", align 8
  %88 = alloca %"class.std::__cxx11::basic_string", align 8
  %89 = alloca i8, align 1
  %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 i8, align 1
  %94 = alloca %"class.std::__cxx11::basic_string", align 8
  %95 = alloca %"class.std::__cxx11::basic_string", align 8
  %96 = alloca i32, align 4
  %97 = alloca i32, align 4
  %98 = alloca i32, align 4
  %99 = alloca i32, align 4
  %100 = alloca %"struct.spirv_cross::EmbeddedInstruction", align 8
  %101 = alloca %"struct.spirv_cross::EmbeddedInstruction", align 8
  %102 = alloca %"class.spirv_cross::SmallVector.92", align 8
  %103 = alloca %"class.spirv_cross::TypedID.280", align 4
  %104 = alloca %"class.spirv_cross::TypedID.280", align 4
  %105 = alloca %"class.std::__cxx11::basic_string", align 8
  %106 = alloca %"class.std::__cxx11::basic_string", align 8
  %107 = alloca %"class.spirv_cross::TypedID.280", align 4
  %108 = alloca %"class.std::__cxx11::basic_string", align 8
  %109 = alloca %"class.spirv_cross::SmallVector.27", align 8
  %110 = alloca %"struct.spirv_cross::SPIRConstant", align 8
  %111 = alloca %"class.spirv_cross::TypedID.280", align 4
  %112 = alloca %"class.std::__cxx11::basic_string", align 8
  %113 = alloca %"class.std::__cxx11::basic_string", align 8
  %114 = alloca %"class.std::__cxx11::basic_string", align 8
  %115 = alloca %"class.std::__cxx11::basic_string", align 8
  %116 = alloca %"class.std::__cxx11::basic_string", align 8
  %117 = alloca %"class.std::__cxx11::basic_string", align 8
  %118 = alloca %"class.std::__cxx11::basic_string", align 8
  %119 = alloca %"class.std::__cxx11::basic_string", align 8
  %120 = alloca %"class.std::__cxx11::basic_string", align 8
  %121 = alloca %"class.std::__cxx11::basic_string", align 8
  %122 = alloca %"class.std::__cxx11::basic_string", align 8
  %123 = alloca %"class.std::__cxx11::basic_string", align 8
  %124 = alloca %"class.std::__cxx11::basic_string", align 8
  %125 = alloca %"class.std::__cxx11::basic_string", align 8
  %126 = alloca %"class.std::__cxx11::basic_string", align 8
  %127 = alloca %"class.std::__cxx11::basic_string", align 8
  %128 = alloca %"class.std::__cxx11::basic_string", align 8
  %129 = alloca %"class.std::__cxx11::basic_string", align 8
  %130 = alloca %"class.std::__cxx11::basic_string", align 8
  %131 = alloca %"class.std::__cxx11::basic_string", align 8
  %132 = alloca %"class.std::__cxx11::basic_string", align 8
  %133 = alloca %"class.std::__cxx11::basic_string", align 8
  %134 = alloca %"class.std::__cxx11::basic_string", align 8
  %135 = alloca %"class.std::__cxx11::basic_string", align 8
  %136 = alloca %"class.std::__cxx11::basic_string", align 8
  %137 = alloca %"class.std::__cxx11::basic_string", align 8
  %138 = alloca %"class.std::__cxx11::basic_string", align 8
  %139 = alloca %"class.std::__cxx11::basic_string", align 8
  %140 = alloca %"class.std::__cxx11::basic_string", align 8
  %141 = alloca %"class.std::__cxx11::basic_string", align 8
  %142 = alloca %"class.std::__cxx11::basic_string", align 8
  %143 = alloca %"class.std::__cxx11::basic_string", align 8
  %144 = alloca %"class.std::__cxx11::basic_string", align 8
  %145 = alloca %"class.std::__cxx11::basic_string", align 8
  %146 = alloca i8, align 1
  %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 %"struct.spirv_cross::SPIRType", 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 i8, align 1
  %155 = alloca i8, align 1
  %156 = alloca %"class.std::__cxx11::basic_string", align 8
  %157 = alloca %"class.std::__cxx11::basic_string", align 8
  %158 = alloca i8, align 1
  %159 = alloca i8, align 1
  %160 = alloca ptr, 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 ptr, 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 %"struct.spirv_cross::SPIRType", 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 %"struct.spirv_cross::SPIRType", 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::allocator.71", align 1
  %210 = alloca %"class.std::__cxx11::basic_string", align 8
  %211 = alloca %"class.std::allocator.71", align 1
  %212 = alloca %"class.std::__cxx11::basic_string", align 8
  %213 = alloca %"class.std::allocator.71", align 1
  %214 = alloca %"class.std::__cxx11::basic_string", align 8
  %215 = alloca %"class.std::allocator.71", align 1
  %216 = alloca %"class.std::__cxx11::basic_string", align 8
  %217 = alloca %"class.std::allocator.71", align 1
  %218 = alloca %"class.std::__cxx11::basic_string", align 8
  %219 = alloca %"class.std::allocator.71", align 1
  %220 = alloca %"class.std::__cxx11::basic_string", align 8
  %221 = alloca %"class.std::allocator.71", align 1
  %222 = alloca %"class.std::__cxx11::basic_string", align 8
  %223 = alloca %"class.std::allocator.71", align 1
  %224 = alloca %"class.std::__cxx11::basic_string", align 8
  %225 = alloca %"class.std::allocator.71", align 1
  %226 = alloca ptr, align 8
  %227 = alloca ptr, align 8
  %228 = alloca %"class.std::__cxx11::basic_string", align 8
  %229 = alloca %"class.std::__cxx11::basic_string", align 8
  %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 ptr, align 8
  %234 = alloca ptr, align 8
  %235 = alloca %"class.std::__cxx11::basic_string", align 8
  %236 = alloca %"class.std::__cxx11::basic_string", align 8
  %237 = alloca ptr, align 8
  %238 = alloca %"class.std::__cxx11::basic_string", 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::__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::allocator.71", align 1
  %247 = alloca %"class.std::__cxx11::basic_string", align 8
  %248 = alloca %"class.spirv_cross::TypedID.280", align 4
  %249 = alloca ptr, align 8
  %250 = alloca %"class.std::__cxx11::basic_string", align 8
  %251 = alloca %"class.std::allocator.71", align 1
  %252 = alloca %"class.std::__cxx11::basic_string", align 8
  %253 = alloca %"class.std::allocator.71", align 1
  %254 = alloca %"class.std::__cxx11::basic_string", align 8
  %255 = alloca %"class.spirv_cross::TypedID.280", align 4
  %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::allocator.71", align 1
  %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::allocator.71", align 1
  %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::allocator.71", align 1
  %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 %"class.std::__cxx11::basic_string", align 8
  %278 = alloca %"class.std::__cxx11::basic_string", align 8
  %279 = alloca %"class.std::__cxx11::basic_string", align 8
  %280 = alloca i32, align 4
  %281 = alloca %"class.std::__cxx11::basic_string", align 8
  %282 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %283 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %284 = alloca %"class.std::__cxx11::basic_string", align 8
  %285 = alloca %"class.std::__cxx11::basic_string", align 8
  %286 = alloca %"class.std::__cxx11::basic_string", 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 %"class.std::__cxx11::basic_string", align 8
  %291 = alloca %"class.std::__cxx11::basic_string", align 8
  %292 = alloca %"class.std::__cxx11::basic_string", align 8
  %293 = alloca %"class.std::__cxx11::basic_string", align 8
  %294 = alloca %"class.std::__cxx11::basic_string", align 8
  %295 = alloca %"class.std::__cxx11::basic_string", align 8
  %296 = alloca %"class.std::__cxx11::basic_string", align 8
  %297 = alloca %"class.std::__cxx11::basic_string", align 8
  %298 = alloca %"class.std::__cxx11::basic_string", align 8
  %299 = alloca %"class.std::__cxx11::basic_string", align 8
  %300 = alloca i32, align 4
  %301 = alloca i32, align 4
  %302 = alloca %"class.std::__cxx11::basic_string", align 8
  %303 = alloca %"struct.spirv_cross::SPIRType", align 8
  %304 = alloca %"class.std::__cxx11::basic_string", align 8
  %305 = alloca %"class.std::__cxx11::basic_string", align 8
  %306 = alloca %"class.std::__cxx11::basic_string", align 8
  %307 = alloca %"class.std::__cxx11::basic_string", align 8
  %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::__cxx11::basic_string", align 8
  %313 = alloca %"class.std::__cxx11::basic_string", align 8
  %314 = alloca %"class.std::__cxx11::basic_string", align 8
  %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 %"struct.std::__detail::_Node_iterator.364", align 8
  %324 = alloca %"struct.std::__detail::_Node_iterator.364", align 8
  %325 = alloca %"class.spirv_cross::TypedID.280", align 4
  %326 = alloca i32, align 4
  %327 = alloca %"class.std::__cxx11::basic_string", align 8
  %328 = alloca %"struct.spirv_cross::SPIRType", 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 i8, align 1
  %333 = alloca %"class.spirv_cross::TypedID.280", align 4
  %334 = alloca %"struct.spirv_cross::SPIRType", align 8
  %335 = alloca %"class.std::__cxx11::basic_string", align 8
  %336 = alloca %"struct.spirv_cross::SPIRType", 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::allocator.71", align 1
  %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::allocator.71", align 1
  %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::allocator.71", align 1
  %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::allocator.71", align 1
  %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 %"class.std::__cxx11::basic_string", align 8
  %386 = alloca %"class.std::allocator.71", align 1
  %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::allocator.71", align 1
  %396 = alloca %"class.std::__cxx11::basic_string", align 8
  %397 = alloca %"class.std::allocator.71", align 1
  %398 = alloca %"class.std::__cxx11::basic_string", align 8
  %399 = alloca %"class.std::allocator.71", align 1
  %400 = alloca %"class.std::__cxx11::basic_string", align 8
  %401 = alloca %"class.std::allocator.71", align 1
  %402 = alloca %"class.std::__cxx11::basic_string", align 8
  %403 = alloca %"class.std::allocator.71", align 1
  %404 = alloca %"class.std::__cxx11::basic_string", align 8
  %405 = alloca %"class.std::allocator.71", align 1
  %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::allocator.71", align 1
  %410 = alloca %"class.std::__cxx11::basic_string", align 8
  %411 = alloca %"class.std::allocator.71", align 1
  %412 = alloca %"class.std::__cxx11::basic_string", align 8
  %413 = alloca %"class.std::allocator.71", align 1
  %414 = alloca %"class.std::__cxx11::basic_string", align 8
  %415 = alloca %"class.std::allocator.71", align 1
  %416 = alloca %"class.std::__cxx11::basic_string", align 8
  %417 = alloca ptr, align 8
  %418 = alloca %"class.std::__cxx11::basic_string", align 8
  %419 = alloca %"class.std::__cxx11::basic_string", align 8
  %420 = alloca %"class.std::__cxx11::basic_string", align 8
  %421 = alloca ptr, align 8
  %422 = alloca %"class.std::__cxx11::basic_string", align 8
  %423 = alloca %"class.std::__cxx11::basic_string", align 8
  %424 = alloca %"class.std::__cxx11::basic_string", align 8
  %425 = alloca %"class.std::__cxx11::basic_string", align 8
  %426 = alloca %"class.std::__cxx11::basic_string", 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::__cxx11::basic_string", align 8
  %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 %"class.std::__cxx11::basic_string", align 8
  %436 = alloca %"class.spirv_cross::TypedID.280", align 4
  %437 = alloca %"class.std::__cxx11::basic_string", align 8
  %438 = alloca %"class.std::__cxx11::basic_string", align 8
  %439 = alloca %"class.std::__cxx11::basic_string", align 8
  %440 = alloca %"class.std::__cxx11::basic_string", align 8
  %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 i32, align 4
  %448 = alloca %"class.spirv_cross::TypedID.280", align 4
  %449 = alloca %"class.std::__cxx11::basic_string", align 8
  %450 = alloca %"class.std::__cxx11::basic_string", align 8
  %451 = alloca %"class.spirv_cross::TypedID.280", align 4
  %452 = alloca %"class.std::__cxx11::basic_string", align 8
  %453 = alloca i32, align 4
  %454 = alloca %"class.spirv_cross::TypedID.280", align 4
  %455 = alloca %"class.std::__cxx11::basic_string", align 8
  %456 = alloca %"class.std::__cxx11::basic_string", align 8
  %457 = alloca %"class.std::__cxx11::basic_string", align 8
  %458 = alloca %"class.std::__cxx11::basic_string", align 8
  %459 = alloca %"class.std::__cxx11::basic_string", align 8
  %460 = alloca %"class.std::__cxx11::basic_string", align 8
  %461 = alloca %"class.std::__cxx11::basic_string", align 8
  %462 = alloca %"class.std::__cxx11::basic_string", align 8
  %463 = alloca %"class.std::__cxx11::basic_string", align 8
  %464 = alloca %"class.std::__cxx11::basic_string", align 8
  %465 = alloca %"class.std::__cxx11::basic_string", align 8
  %466 = alloca %"class.std::__cxx11::basic_string", align 8
  %467 = alloca %"class.std::__cxx11::basic_string", align 8
  %468 = alloca %"class.std::__cxx11::basic_string", align 8
  %469 = alloca %"class.std::__cxx11::basic_string", align 8
  %470 = alloca %"class.std::__cxx11::basic_string", align 8
  %471 = alloca %"class.std::__cxx11::basic_string", align 8
  %472 = alloca %"class.std::__cxx11::basic_string", align 8
  %473 = alloca %"class.std::__cxx11::basic_string", align 8
  %474 = alloca %"class.std::__cxx11::basic_string", align 8
  %475 = alloca %"class.std::__cxx11::basic_string", align 8
  %476 = alloca %"class.std::__cxx11::basic_string", align 8
  %477 = alloca %"class.std::__cxx11::basic_string", align 8
  %478 = alloca %"class.std::__cxx11::basic_string", align 8
  %479 = alloca %"class.std::__cxx11::basic_string", align 8
  %480 = alloca %"class.std::__cxx11::basic_string", align 8
  %481 = alloca %"class.std::__cxx11::basic_string", align 8
  %482 = alloca %"class.std::__cxx11::basic_string", align 8
  %483 = alloca %"class.std::__cxx11::basic_string", align 8
  %484 = alloca %"class.std::__cxx11::basic_string", align 8
  %485 = alloca %"class.std::__cxx11::basic_string", align 8
  %486 = alloca %"class.std::__cxx11::basic_string", align 8
  %487 = alloca %"class.std::__cxx11::basic_string", align 8
  %488 = alloca %"class.std::__cxx11::basic_string", align 8
  %489 = alloca %"class.std::__cxx11::basic_string", align 8
  %490 = alloca %"class.std::__cxx11::basic_string", align 8
  %491 = alloca %"class.std::__cxx11::basic_string", align 8
  %492 = alloca %"class.std::__cxx11::basic_string", align 8
  %493 = alloca %"class.std::__cxx11::basic_string", align 8
  %494 = alloca %"class.std::__cxx11::basic_string", align 8
  %495 = alloca %"class.std::__cxx11::basic_string", align 8
  %496 = alloca %"class.std::__cxx11::basic_string", align 8
  %497 = alloca %"class.std::__cxx11::basic_string", align 8
  %498 = alloca %"class.std::__cxx11::basic_string", align 8
  %499 = alloca %"class.std::__cxx11::basic_string", align 8
  %500 = alloca %"class.std::__cxx11::basic_string", align 8
  %501 = alloca %"class.std::__cxx11::basic_string", align 8
  %502 = alloca %"class.std::__cxx11::basic_string", align 8
  %503 = alloca %"class.std::__cxx11::basic_string", align 8
  %504 = alloca %"class.std::__cxx11::basic_string", align 8
  %505 = alloca %"class.std::__cxx11::basic_string", align 8
  %506 = alloca %"class.std::__cxx11::basic_string", align 8
  %507 = alloca %"class.std::__cxx11::basic_string", align 8
  %508 = alloca %"class.std::__cxx11::basic_string", align 8
  %509 = alloca %"class.std::__cxx11::basic_string", align 8
  %510 = alloca %"class.std::__cxx11::basic_string", align 8
  %511 = alloca %"class.std::__cxx11::basic_string", align 8
  %512 = alloca %"class.std::__cxx11::basic_string", align 8
  %513 = alloca %"class.std::__cxx11::basic_string", align 8
  %514 = alloca %"class.std::__cxx11::basic_string", align 8
  %515 = alloca %"class.std::__cxx11::basic_string", align 8
  %516 = alloca %"class.std::__cxx11::basic_string", align 8
  %517 = alloca %"class.std::__cxx11::basic_string", align 8
  %518 = alloca %"class.std::__cxx11::basic_string", align 8
  %519 = alloca %"class.std::allocator.71", align 1
  %520 = alloca %"class.std::__cxx11::basic_string", align 8
  %521 = alloca %"class.std::__cxx11::basic_string", align 8
  %522 = alloca %"class.std::__cxx11::basic_string", align 8
  %523 = alloca %"class.std::__cxx11::basic_string", align 8
  %524 = alloca i8, align 1
  %525 = alloca %"class.std::__cxx11::basic_string", align 8
  %526 = alloca %"class.std::allocator.71", align 1
  %527 = alloca %"class.std::__cxx11::basic_string", align 8
  %528 = alloca %"class.std::__cxx11::basic_string", align 8
  %529 = alloca %"class.std::allocator.71", align 1
  %530 = alloca %"class.std::__cxx11::basic_string", align 8
  %531 = alloca %"class.std::__cxx11::basic_string", align 8
  %532 = alloca %"class.std::allocator.71", align 1
  %533 = alloca %"class.std::__cxx11::basic_string", align 8
  %534 = alloca %"class.std::allocator.71", align 1
  %535 = alloca %"class.std::__cxx11::basic_string", align 8
  %536 = alloca %"class.std::allocator.71", align 1
  %537 = alloca %"class.std::__cxx11::basic_string", align 8
  %538 = alloca %"class.std::__cxx11::basic_string", align 8
  %539 = alloca %"class.std::__cxx11::basic_string", align 8
  %540 = alloca %"class.std::allocator.71", align 1
  %541 = alloca %"class.std::__cxx11::basic_string", align 8
  %542 = alloca %"class.std::allocator.71", align 1
  %543 = alloca %"class.std::__cxx11::basic_string", align 8
  %544 = alloca %"class.std::allocator.71", align 1
  %545 = tail call noundef ptr @_ZNK11spirv_cross8Compiler6streamERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 4 dereferenceable(12) %1)
  %546 = load i16, ptr %1, align 4, !tbaa !5
  %547 = zext i16 %546 to i32
  %548 = getelementptr inbounds i8, ptr %1, i64 8
  %549 = load i32, ptr %548, align 4, !tbaa !11
  %550 = 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)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #8
  %551 = tail call noundef i32 @_ZN11spirv_crossL18to_signed_basetypeEj(i32 noundef %550)
  store i32 %551, ptr %3, align 4, !tbaa !12
  %552 = tail call noundef i32 @_ZN11spirv_crossL20to_unsigned_basetypeEj(i32 noundef %550)
  %553 = icmp ult i32 %550, 32
  br i1 %553, label %554, label %566

554:                                              ; preds = %2
  %555 = getelementptr inbounds i8, ptr %0, i64 8411
  %556 = load i8, ptr %555, align 1, !tbaa !14, !range !123, !noundef !124
  %557 = trunc nuw i8 %556 to i1
  br i1 %557, label %558, label %566

558:                                              ; preds = %554
  %559 = tail call noundef zeroext i1 @_ZN11spirv_crossL37opcode_can_promote_integer_implicitlyEN3spv2OpE(i32 noundef %547)
  br i1 %559, label %560, label %566

560:                                              ; preds = %558
  %561 = load i32, ptr %545, align 4, !tbaa !125
  %562 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %561)
  %563 = getelementptr inbounds i8, ptr %562, i64 24
  %564 = load i32, ptr %563, align 8, !tbaa !126
  %565 = icmp eq i32 %564, 1
  br label %566

566:                                              ; preds = %560, %558, %554, %2
  %567 = phi i1 [ false, %558 ], [ false, %554 ], [ false, %2 ], [ %565, %560 ]
  %568 = tail call noundef i32 @_ZNK11spirv_cross12CompilerGLSL21get_remapped_spirv_opEN3spv2OpE(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %547)
  switch i32 %568, label %6423 [
    i32 61, label %569
    i32 66, label %744
    i32 65, label %744
    i32 67, label %744
    i32 62, label %879
    i32 68, label %930
    i32 57, label %965
    i32 80, label %1162
    i32 78, label %1400
    i32 77, label %1432
    i32 81, label %1450
    i32 82, label %1576
    i32 63, label %1685
    i32 400, label %1718
    i32 83, label %1729
    i32 79, label %1779
    i32 156, label %1907
    i32 157, label %1927
    i32 126, label %1997
    i32 127, label %2013
    i32 128, label %2019
    i32 129, label %2032
    i32 130, label %2040
    i32 131, label %2053
    i32 132, label %2061
    i32 144, label %2074
    i32 145, label %2074
    i32 146, label %2161
    i32 143, label %2228
    i32 133, label %2284
    i32 142, label %2284
    i32 147, label %2292
    i32 148, label %2352
    i32 84, label %2360
    i32 138, label %2386
    i32 135, label %2447
    i32 134, label %2456
    i32 149, label %2465
    i32 150, label %2465
    i32 151, label %2519
    i32 152, label %2519
    i32 136, label %2572
    i32 194, label %2580
    i32 195, label %2589
    i32 196, label %2598
    i32 197, label %2611
    i32 198, label %2624
    i32 199, label %2637
    i32 200, label %2650
    i32 137, label %2666
    i32 139, label %2675
    i32 141, label %2684
    i32 140, label %2692
    i32 154, label %2779
    i32 155, label %2785
    i32 169, label %2791
    i32 166, label %2801
    i32 167, label %2821
    i32 168, label %2841
    i32 170, label %2854
    i32 164, label %2870
    i32 180, label %2870
    i32 171, label %2885
    i32 165, label %2901
    i32 182, label %2901
    i32 183, label %2901
    i32 172, label %2916
    i32 173, label %2916
    i32 186, label %2934
    i32 174, label %2949
    i32 175, label %2949
    i32 190, label %2967
    i32 176, label %2982
    i32 177, label %2982
    i32 184, label %3000
    i32 178, label %3015
    i32 179, label %3015
    i32 188, label %3033
    i32 114, label %3048
    i32 111, label %3048
    i32 113, label %3048
    i32 112, label %3048
    i32 109, label %3077
    i32 110, label %3077
    i32 115, label %3111
    i32 124, label %3122
    i32 116, label %3142
    i32 207, label %3226
    i32 208, label %3243
    i32 210, label %3260
    i32 211, label %3288
    i32 213, label %3316
    i32 214, label %3344
    i32 209, label %3372
    i32 215, label %3389
    i32 212, label %3417
    i32 201, label %3445
    i32 202, label %3457
    i32 203, label %3467
    i32 204, label %3477
    i32 205, label %3483
    i32 229, label %3493
    i32 230, label %3503
    i32 227, label %3515
    i32 228, label %3549
    i32 232, label %3562
    i32 233, label %3562
    i32 234, label %3615
    i32 6035, label %3615
    i32 235, label %3626
    i32 236, label %3660
    i32 237, label %3660
    i32 238, label %3671
    i32 239, label %3671
    i32 240, label %3682
    i32 241, label %3693
    i32 242, label %3704
    i32 218, label %3715
    i32 219, label %3716
    i32 220, label %3717
    i32 221, label %3752
    i32 88, label %3787
    i32 92, label %3787
    i32 90, label %3787
    i32 94, label %3787
    i32 87, label %3787
    i32 91, label %3787
    i32 89, label %3787
    i32 93, label %3787
    i32 95, label %3787
    i32 96, label %3787
    i32 97, label %3787
    i32 306, label %3791
    i32 310, label %3791
    i32 308, label %3791
    i32 312, label %3791
    i32 305, label %3791
    i32 309, label %3791
    i32 307, label %3791
    i32 311, label %3791
    i32 313, label %3791
    i32 314, label %3791
    i32 315, label %3791
    i32 316, label %3795
    i32 100, label %3817
    i32 105, label %3835
    i32 106, label %3924
    i32 107, label %3969
    i32 86, label %4033
    i32 103, label %4046
    i32 98, label %4116
    i32 320, label %4116
    i32 60, label %4524
    i32 99, label %4576
    i32 104, label %4696
    i32 4480, label %4791
    i32 4481, label %4791
    i32 4482, label %4791
    i32 4483, label %4791
    i32 4500, label %4920
    i32 4501, label %4920
    i32 4502, label %4920
    i32 4503, label %4920
    i32 224, label %5014
    i32 225, label %5014
    i32 12, label %5138
    i32 4421, label %5244
    i32 4422, label %5285
    i32 4432, label %5299
    i32 4428, label %5315
    i32 4429, label %5329
    i32 4430, label %5343
    i32 5000, label %5357
    i32 5001, label %5357
    i32 5002, label %5371
    i32 5003, label %5371
    i32 5004, label %5371
    i32 5005, label %5385
    i32 5006, label %5385
    i32 5007, label %5385
    i32 5011, label %5399
    i32 5012, label %5422
    i32 333, label %5449
    i32 337, label %5449
    i32 338, label %5449
    i32 339, label %5449
    i32 340, label %5449
    i32 341, label %5449
    i32 342, label %5449
    i32 343, label %5449
    i32 344, label %5449
    i32 345, label %5449
    i32 346, label %5449
    i32 347, label %5449
    i32 348, label %5449
    i32 334, label %5449
    i32 335, label %5449
    i32 336, label %5449
    i32 350, label %5449
    i32 349, label %5449
    i32 352, label %5449
    i32 351, label %5449
    i32 355, label %5449
    i32 358, label %5449
    i32 353, label %5449
    i32 356, label %5449
    i32 354, label %5449
    i32 357, label %5449
    i32 359, label %5449
    i32 360, label %5449
    i32 361, label %5449
    i32 362, label %5449
    i32 363, label %5449
    i32 364, label %5449
    i32 366, label %5449
    i32 365, label %5449
    i32 181, label %5453
    i32 185, label %5453
    i32 187, label %5453
    i32 189, label %5453
    i32 191, label %5453
    i32 5334, label %5522
    i32 5335, label %5539
    i32 5336, label %5544
    i32 5337, label %5549
    i32 4445, label %5618
    i32 5344, label %5695
    i32 4446, label %5710
    i32 4473, label %5733
    i32 4477, label %5781
    i32 4474, label %5796
    i32 4475, label %5802
    i32 4476, label %5814
    i32 6016, label %5820
    i32 6017, label %5835
    i32 6030, label %5850
    i32 6029, label %5865
    i32 6026, label %5880
    i32 4479, label %5895
    i32 6018, label %5916
    i32 6019, label %5937
    i32 6020, label %5958
    i32 6021, label %5979
    i32 6022, label %6000
    i32 6023, label %6021
    i32 6024, label %6042
    i32 6025, label %6063
    i32 6027, label %6084
    i32 6028, label %6105
    i32 6031, label %6126
    i32 6032, label %6147
    i32 4447, label %6168
    i32 120, label %6217
    i32 117, label %6254
    i32 1, label %.thread3374
    i32 8, label %6291
    i32 317, label %.thread3374
    i32 5380, label %6295
    i32 5381, label %6313
    i32 5364, label %6341
    i32 5365, label %6346
    i32 5295, label %6351
    i32 5056, label %6362
  ]

569:                                              ; preds = %566
  %570 = load i32, ptr %545, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #8
  %571 = getelementptr inbounds i8, ptr %545, i64 4
  %572 = load i32, ptr %571, align 4, !tbaa !125
  store i32 %572, ptr %4, align 4, !tbaa !125
  %573 = getelementptr inbounds i8, ptr %545, i64 8
  %574 = load i32, ptr %573, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %574)
  %575 = tail call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %574)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #8
  br i1 %575, label %577, label %.thread

.thread:                                          ; preds = %569
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #8
  %576 = tail call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_14SPIRExpressionEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %574)
  br label %594

577:                                              ; preds = %569
  %578 = getelementptr inbounds i8, ptr %0, i64 2400
  %579 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE4findERKj(ptr noundef nonnull align 8 dereferenceable(56) %578, ptr noundef nonnull align 4 dereferenceable(4) %4)
  store ptr %579, ptr %5, align 8
  %580 = call ptr @_ZSt3endISt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(56) %578)
  store ptr %580, ptr %6, align 8
  %581 = call noundef zeroext i1 @_ZNSt8__detaileqERKNS_19_Node_iterator_baseIjLb0EEES3_(ptr noundef nonnull align 8 dereferenceable(8) %5, ptr noundef nonnull align 8 dereferenceable(8) %6) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #8
  %582 = call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_14SPIRExpressionEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %574)
  br i1 %581, label %583, label %594

583:                                              ; preds = %577
  %.not3036 = icmp eq ptr %582, null
  br i1 %.not3036, label %589, label %584

584:                                              ; preds = %583
  %585 = getelementptr inbounds i8, ptr %582, i64 57
  %586 = load i8, ptr %585, align 1, !tbaa !140, !range !123, !noundef !124
  %587 = trunc nuw i8 %586 to i1
  br i1 %587, label %588, label %589

588:                                              ; preds = %584
  store i8 0, ptr %585, align 1, !tbaa !140
  br label %594

589:                                              ; preds = %584, %583
  %590 = load ptr, ptr %0, align 8, !tbaa !142
  %591 = getelementptr inbounds i8, ptr %590, i64 320
  %592 = load ptr, ptr %591, align 8
  %593 = call noundef zeroext i1 %592(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %574)
  %spec.select = zext i1 %593 to i8
  br label %594

594:                                              ; preds = %.thread, %589, %588, %577
  %595 = phi ptr [ %582, %588 ], [ %582, %577 ], [ %582, %589 ], [ %576, %.thread ]
  %596 = phi i1 [ true, %588 ], [ false, %577 ], [ true, %589 ], [ false, %.thread ]
  %.01965 = phi i8 [ 1, %588 ], [ 0, %577 ], [ 0, %589 ], [ 0, %.thread ]
  %.01964 = phi i8 [ 1, %588 ], [ 0, %577 ], [ %spec.select, %589 ], [ 0, %.thread ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %7) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #8
  %597 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler23has_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %574, i32 noundef 2)
          to label %598 unwind label %604

598:                                              ; preds = %594
  %599 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler23has_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %574, i32 noundef 1)
          to label %600 unwind label %606

600:                                              ; preds = %598
  %.not3123 = xor i1 %596, true
  %brmerge = or i1 %597, %599
  %or.cond3124 = and i1 %brmerge, %.not3123
  br i1 %or.cond3124, label %610, label %601

601:                                              ; preds = %600
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %8) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL26to_dereferenced_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 %574, i1 noundef zeroext false)
          to label %602 unwind label %608

602:                                              ; preds = %601
  %603 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull align 8 dereferenceable(32) %8) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #8
  br label %615

604:                                              ; preds = %594
  %605 = landingpad { ptr, i32 }
          cleanup
  br label %743

606:                                              ; preds = %598
  %607 = landingpad { ptr, i32 }
          cleanup
  br label %743

608:                                              ; preds = %601
  %609 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #8
  br label %743

610:                                              ; preds = %600
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %9) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %9, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %574, i1 noundef zeroext true)
          to label %611 unwind label %613

611:                                              ; preds = %610
  %612 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull align 8 dereferenceable(32) %9) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #8
  br label %615

613:                                              ; preds = %610
  %614 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #8
  br label %743

615:                                              ; preds = %611, %602
  %616 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %570)
          to label %617 unwind label %630

617:                                              ; preds = %615
  %618 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %574)
          to label %619 unwind label %632

619:                                              ; preds = %617
  %620 = getelementptr inbounds i8, ptr %618, i64 24
  %621 = load i32, ptr %620, align 8, !tbaa !126
  %622 = getelementptr inbounds i8, ptr %616, i64 24
  %623 = load i32, ptr %622, align 8, !tbaa !126
  %624 = icmp ugt i32 %621, %623
  br i1 %624, label %625, label %639

625:                                              ; preds = %619
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %11) #8
  %626 = call noundef ptr @_ZN11spirv_cross12CompilerGLSL14vector_swizzleEii(i32 noundef %623, i32 noundef 0)
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EERKS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %11, ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef %626)
          to label %627 unwind label %634

627:                                              ; preds = %625
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %10, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %11)
          to label %628 unwind label %636

628:                                              ; preds = %627
  %629 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull align 8 dereferenceable(32) %10) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #8
  br label %639

630:                                              ; preds = %615
  %631 = landingpad { ptr, i32 }
          cleanup
  br label %743

632:                                              ; preds = %659, %655, %652, %650, %643, %617
  %633 = landingpad { ptr, i32 }
          cleanup
  br label %743

634:                                              ; preds = %625
  %635 = landingpad { ptr, i32 }
          cleanup
  br label %638

636:                                              ; preds = %627
  %637 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #8
  br label %638

638:                                              ; preds = %636, %634
  %.pn3037 = phi { ptr, i32 } [ %637, %636 ], [ %635, %634 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #8
  br label %743

639:                                              ; preds = %628, %619
  %640 = icmp ne ptr %595, null
  %or.cond = and i1 %596, %640
  br i1 %or.cond, label %641, label %643

641:                                              ; preds = %639
  %642 = getelementptr inbounds i8, ptr %595, i64 57
  store i8 %.01965, ptr %642, align 1, !tbaa !140
  br label %643

643:                                              ; preds = %641, %639
  %644 = load ptr, ptr %0, align 8, !tbaa !142
  %645 = getelementptr inbounds i8, ptr %644, i64 512
  %646 = load ptr, ptr %645, align 8
  invoke void %646(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %574, ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull align 8 dereferenceable(336) %616)
          to label %647 unwind label %632

647:                                              ; preds = %643
  br i1 %or.cond, label %648, label %650

648:                                              ; preds = %647
  %649 = getelementptr inbounds i8, ptr %595, i64 57
  store i8 0, ptr %649, align 1, !tbaa !140
  br label %650

650:                                              ; preds = %648, %647
  %651 = load i32, ptr %4, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL30unroll_array_from_complex_loadEjjRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %651, i32 noundef %574, ptr noundef nonnull align 8 dereferenceable(32) %7)
          to label %652 unwind label %632

652:                                              ; preds = %650
  %653 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler20type_is_opaque_valueERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %616)
          to label %654 unwind label %632

654:                                              ; preds = %652
  br i1 %653, label %660, label %655

655:                                              ; preds = %654
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %12, i32 noundef %574)
  %656 = load i32, ptr %12, align 4
  %657 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %656, i32 noundef 5300)
          to label %658 unwind label %632

658:                                              ; preds = %655
  br i1 %657, label %659, label %660

659:                                              ; preds = %658
  invoke void @_ZN11spirv_cross12CompilerGLSL30convert_non_uniform_expressionERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %7, i32 noundef %574)
          to label %660 unwind label %632

660:                                              ; preds = %659, %658, %654
  br i1 %or.cond, label %.thread3129, label %662

.thread3129:                                      ; preds = %660
  %661 = getelementptr inbounds i8, ptr %595, i64 57
  store i8 %.01965, ptr %661, align 1, !tbaa !140
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %13) #8
  br label %663

662:                                              ; preds = %660
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %13) #8
  br i1 %640, label %663, label %670

663:                                              ; preds = %.thread3129, %662
  %664 = getelementptr inbounds i8, ptr %0, i64 8536
  %665 = getelementptr inbounds i8, ptr %595, i64 52
  %666 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %665)
  store i32 %666, ptr %13, align 4, !tbaa !125
  %667 = invoke noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %664, ptr noundef nonnull align 4 dereferenceable(4) %13)
          to label %668 unwind label %684

668:                                              ; preds = %663
  %669 = icmp ne i64 %667, 0
  br label %670

670:                                              ; preds = %668, %662
  %671 = phi i1 [ false, %662 ], [ %669, %668 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #8
  %672 = getelementptr inbounds i8, ptr %0, i64 8405
  %673 = load i8, ptr %672, align 1, !tbaa !144, !range !123, !noundef !124
  %674 = trunc nuw i8 %673 to i1
  br i1 %674, label %675, label %688

675:                                              ; preds = %670
  %676 = load ptr, ptr %0, align 8, !tbaa !142
  %677 = getelementptr inbounds i8, ptr %676, i64 320
  %678 = load ptr, ptr %677, align 8
  %679 = invoke noundef zeroext i1 %678(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %574)
          to label %680 unwind label %686

680:                                              ; preds = %675
  %brmerge3046 = or i1 %671, %679
  br i1 %brmerge3046, label %688, label %681

681:                                              ; preds = %680
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE1EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %14, i32 noundef %570)
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %15, i32 noundef %574)
  %682 = load i32, ptr %14, align 4
  %683 = load i32, ptr %15, align 4
  invoke void @_ZN11spirv_cross12CompilerGLSL34rewrite_load_for_wrapped_row_majorERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_7TypedIDILNS_5TypesE1EEENS8_ILS9_0EEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %7, i32 %682, i32 %683)
          to label %688 unwind label %686

684:                                              ; preds = %663
  %685 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #8
  br label %743

686:                                              ; preds = %681, %675
  %687 = landingpad { ptr, i32 }
          cleanup
  br label %743

688:                                              ; preds = %680, %681, %670
  br i1 %671, label %689, label %697

689:                                              ; preds = %688
  %690 = getelementptr inbounds i8, ptr %616, i64 16
  %691 = load i32, ptr %690, align 8, !tbaa !145
  %692 = icmp eq i32 %691, 15
  br i1 %692, label %697, label %693

693:                                              ; preds = %689
  %694 = getelementptr inbounds i8, ptr %616, i64 28
  %695 = load i32, ptr %694, align 4, !tbaa !146
  %696 = icmp ult i32 %695, 2
  br label %697

697:                                              ; preds = %689, %693, %688
  %698 = phi i1 [ true, %688 ], [ false, %689 ], [ %696, %693 ]
  br i1 %596, label %715, label %699

699:                                              ; preds = %697
  %700 = invoke noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL34expression_is_non_value_type_arrayEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %574)
          to label %701 unwind label %713

701:                                              ; preds = %699
  br i1 %700, label %702, label %715

702:                                              ; preds = %701
  %703 = load i32, ptr %4, align 4, !tbaa !125
  %704 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL39emit_uninitialized_temporary_expressionEjj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %570, i32 noundef %703)
          to label %705 unwind label %713

705:                                              ; preds = %702
  %706 = load i32, ptr %4, align 4, !tbaa !125
  %707 = invoke noundef i32 @_ZN11spirv_cross12CompilerGLSL38get_expression_effective_storage_classEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %574)
          to label %708 unwind label %713

708:                                              ; preds = %705
  %709 = load ptr, ptr %0, align 8, !tbaa !142
  %710 = getelementptr inbounds i8, ptr %709, i64 440
  %711 = load ptr, ptr %710, align 8
  %712 = invoke noundef zeroext i1 %711(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef null, i32 noundef %706, i32 noundef %574, i32 noundef 7, i32 noundef %707)
          to label %718 unwind label %713

713:                                              ; preds = %741, %738, %736, %734, %733, %730, %727, %725, %722, %718, %715, %708, %705, %702, %699
  %714 = landingpad { ptr, i32 }
          cleanup
  br label %743

715:                                              ; preds = %701, %697
  %716 = load i32, ptr %4, align 4, !tbaa !125
  %717 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %570, i32 noundef %716, ptr noundef nonnull align 8 dereferenceable(32) %7, i1 noundef zeroext %596, i1 noundef zeroext %698)
          to label %718 unwind label %713

718:                                              ; preds = %715, %708
  %.02319 = phi ptr [ %704, %708 ], [ %717, %715 ]
  %719 = getelementptr inbounds i8, ptr %.02319, i64 57
  store i8 %.01964, ptr %719, align 1, !tbaa !140
  %720 = load i32, ptr %4, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross8Compiler13register_readEjjb(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %720, i32 noundef %574, i1 noundef zeroext %596)
          to label %721 unwind label %713

721:                                              ; preds = %718
  br i1 %596, label %722, label %734

722:                                              ; preds = %721
  %723 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler23has_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %574, i32 noundef 2)
          to label %724 unwind label %713

724:                                              ; preds = %722
  br i1 %723, label %725, label %727

725:                                              ; preds = %724
  %726 = load i32, ptr %4, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross8Compiler23set_extended_decorationEjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %726, i32 noundef 2, i32 noundef 0)
          to label %727 unwind label %713

727:                                              ; preds = %725, %724
  %728 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler23has_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %574, i32 noundef 1)
          to label %729 unwind label %713

729:                                              ; preds = %727
  br i1 %728, label %730, label %738

730:                                              ; preds = %729
  %731 = load i32, ptr %4, align 4, !tbaa !125
  %732 = invoke noundef i32 @_ZNK11spirv_cross8Compiler23get_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %574, i32 noundef 1)
          to label %733 unwind label %713

733:                                              ; preds = %730
  invoke void @_ZN11spirv_cross8Compiler23set_extended_decorationEjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %731, i32 noundef 1, i32 noundef %732)
          to label %738 unwind label %713

734:                                              ; preds = %721
  %735 = load i32, ptr %4, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross8Compiler25unset_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %735, i32 noundef 2)
          to label %736 unwind label %713

736:                                              ; preds = %734
  %737 = load i32, ptr %4, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross8Compiler25unset_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %737, i32 noundef 1)
          to label %738 unwind label %713

738:                                              ; preds = %736, %729, %733
  %739 = load i32, ptr %4, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %739, i32 noundef %574)
          to label %740 unwind label %713

740:                                              ; preds = %738
  br i1 %596, label %741, label %742

741:                                              ; preds = %740
  invoke void @_ZN11spirv_cross8Compiler27add_implied_read_expressionERNS_14SPIRExpressionEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(236) %.02319, i32 noundef %574)
          to label %742 unwind label %713

742:                                              ; preds = %741, %740
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #8
  br label %.thread3374

743:                                              ; preds = %606, %608, %613, %632, %638, %713, %686, %684, %630, %604
  %.pn3039.pn.pn.pn.pn = phi { ptr, i32 } [ %605, %604 ], [ %609, %608 ], [ %614, %613 ], [ %607, %606 ], [ %631, %630 ], [ %633, %632 ], [ %.pn3037, %638 ], [ %714, %713 ], [ %687, %686 ], [ %685, %684 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #8
  br label %6424

744:                                              ; preds = %566, %566, %566
  %745 = getelementptr inbounds i8, ptr %545, i64 8
  %746 = load i32, ptr %745, align 4, !tbaa !125
  %747 = tail call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_12SPIRVariableEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %746)
  %.not3028 = icmp eq ptr %747, null
  br i1 %.not3028, label %751, label %748

748:                                              ; preds = %744
  %749 = getelementptr inbounds i8, ptr %747, i64 8
  %750 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %749)
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %750)
  br label %751

751:                                              ; preds = %748, %744
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %16) #8
  call void @_ZN11spirv_cross15AccessChainMetaC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %16) #8
  %752 = icmp eq i32 %568, 67
  %753 = load i32, ptr %545, align 4, !tbaa !125
  %754 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %753)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %17) #8
  %755 = load i32, ptr %745, align 4, !tbaa !125
  %756 = getelementptr inbounds i8, ptr %545, i64 12
  %757 = add i32 %549, -3
  call void @_ZN11spirv_cross12CompilerGLSL12access_chainB5cxx11EjPKjjRKNS_8SPIRTypeEPNS_15AccessChainMetaEb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %17, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %755, ptr noundef nonnull %756, i32 noundef %757, ptr noundef nonnull align 8 dereferenceable(336) %754, ptr noundef nonnull %16, i1 noundef zeroext %752)
  %758 = getelementptr inbounds i8, ptr %0, i64 8536
  %759 = invoke noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %758, ptr noundef nonnull align 4 dereferenceable(4) %745)
          to label %760 unwind label %767

760:                                              ; preds = %751
  %.not3029 = icmp eq i64 %759, 0
  %761 = getelementptr inbounds i8, ptr %754, i64 16
  %762 = load i32, ptr %761, align 8
  %763 = icmp ne i32 %762, 15
  %or.cond3049.not3225 = select i1 %.not3029, i1 true, i1 %763
  %764 = getelementptr inbounds i8, ptr %0, i64 8386
  %765 = load i8, ptr %764, align 2, !range !123
  %766 = trunc nuw i8 %765 to i1
  %.not3223 = select i1 %or.cond3049.not3225, i1 true, i1 %766
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %18) #8
  br i1 %.not3223, label %774, label %769

767:                                              ; preds = %751
  %768 = landingpad { ptr, i32 }
          cleanup
  br label %878

769:                                              ; preds = %760
  %770 = load i32, ptr %545, align 4, !tbaa !125
  %771 = getelementptr inbounds i8, ptr %545, i64 4
  %772 = load i32, ptr %771, align 4, !tbaa !125
  %773 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %770, i32 noundef %772, ptr noundef nonnull align 8 dereferenceable(32) %17, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %782 unwind label %807

774:                                              ; preds = %760
  %775 = getelementptr inbounds i8, ptr %545, i64 4
  %776 = load i32, ptr %775, align 4, !tbaa !125
  %777 = load i32, ptr %745, align 4, !tbaa !125
  %778 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %777)
          to label %779 unwind label %809

779:                                              ; preds = %774
  %780 = zext i1 %778 to i8
  store i8 %780, ptr %18, align 1, !tbaa !147
  %781 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross8Compiler3setINS_14SPIRExpressionEJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKjbEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %776, ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 4 dereferenceable(4) %545, ptr noundef nonnull align 1 dereferenceable(1) %18)
          to label %782 unwind label %809

782:                                              ; preds = %779, %769
  %783 = phi ptr [ %773, %769 ], [ %781, %779 ]
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %18) #8
  %784 = load i32, ptr %745, align 4, !tbaa !125
  %785 = invoke noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %784)
          to label %786 unwind label %811

786:                                              ; preds = %782
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %19) #8
  %.not3030 = icmp eq ptr %785, null
  br i1 %.not3030, label %789, label %787

787:                                              ; preds = %786
  %788 = getelementptr inbounds i8, ptr %785, i64 8
  br label %791

789:                                              ; preds = %786
  %790 = load i32, ptr %745, align 4, !tbaa !125
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %19, i32 noundef %790)
  br label %791

791:                                              ; preds = %789, %787
  %.in3378 = phi ptr [ %19, %789 ], [ %788, %787 ]
  %792 = load i32, ptr %.in3378, align 4, !tbaa !125
  %793 = getelementptr inbounds i8, ptr %783, i64 52
  store i32 %792, ptr %793, align 4, !tbaa !125
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #8
  %794 = getelementptr inbounds i8, ptr %16, i64 4
  %795 = load i8, ptr %794, align 4, !tbaa !148, !range !123, !noundef !124
  %796 = getelementptr inbounds i8, ptr %783, i64 57
  store i8 %795, ptr %796, align 1, !tbaa !140
  %797 = getelementptr inbounds i8, ptr %783, i64 58
  store i8 1, ptr %797, align 2, !tbaa !151
  %798 = getelementptr inbounds i8, ptr %16, i64 9
  %799 = load i8, ptr %798, align 1, !tbaa !152, !range !123, !noundef !124
  %800 = getelementptr inbounds i8, ptr %783, i64 59
  store i8 %799, ptr %800, align 1, !tbaa !153
  %801 = getelementptr inbounds i8, ptr %16, i64 5
  %802 = load i8, ptr %801, align 1, !tbaa !154, !range !123, !noundef !124
  %803 = trunc nuw i8 %802 to i1
  br i1 %803, label %804, label %813

804:                                              ; preds = %791
  %805 = getelementptr inbounds i8, ptr %545, i64 4
  %806 = load i32, ptr %805, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross8Compiler23set_extended_decorationEjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %806, i32 noundef 2, i32 noundef 0)
          to label %813 unwind label %811

807:                                              ; preds = %769
  %808 = landingpad { ptr, i32 }
          cleanup
  br label %878

809:                                              ; preds = %779, %774
  %810 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %18) #8
  br label %878

811:                                              ; preds = %875, %861, %857, %851, %843, %830, %822, %815, %804, %782
  %812 = landingpad { ptr, i32 }
          cleanup
  br label %878

813:                                              ; preds = %804, %791
  %814 = load i32, ptr %16, align 4, !tbaa !155
  %.not3031 = icmp eq i32 %814, 0
  br i1 %.not3031, label %818, label %815

815:                                              ; preds = %813
  %816 = getelementptr inbounds i8, ptr %545, i64 4
  %817 = load i32, ptr %816, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross8Compiler23set_extended_decorationEjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %817, i32 noundef 1, i32 noundef %814)
          to label %818 unwind label %811

818:                                              ; preds = %815, %813
  %819 = getelementptr inbounds i8, ptr %16, i64 6
  %820 = load i8, ptr %819, align 2, !tbaa !156, !range !123, !noundef !124
  %821 = trunc nuw i8 %820 to i1
  br i1 %821, label %822, label %826

822:                                              ; preds = %818
  %823 = getelementptr inbounds i8, ptr %545, i64 4
  %824 = load i32, ptr %823, align 4, !tbaa !125
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %20, i32 noundef %824)
  %825 = load i32, ptr %20, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %825, i32 noundef 18, i32 noundef 0)
          to label %826 unwind label %811

826:                                              ; preds = %822, %818
  %827 = getelementptr inbounds i8, ptr %16, i64 7
  %828 = load i8, ptr %827, align 1, !tbaa !157, !range !123, !noundef !124
  %829 = trunc nuw i8 %828 to i1
  br i1 %829, label %830, label %835

830:                                              ; preds = %826
  %831 = getelementptr inbounds i8, ptr %0, i64 8592
  %832 = getelementptr inbounds i8, ptr %545, i64 4
  %833 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt13unordered_mapIjbSt4hashIjESt8equal_toIjESaISt4pairIKjbEEEixERS5_(ptr noundef nonnull align 8 dereferenceable(56) %831, ptr noundef nonnull align 4 dereferenceable(4) %832)
          to label %834 unwind label %811

834:                                              ; preds = %830
  store i8 1, ptr %833, align 1, !tbaa !147
  br label %835

835:                                              ; preds = %834, %826
  %836 = getelementptr inbounds i8, ptr %16, i64 8
  %837 = load i8, ptr %836, align 4, !tbaa !158, !range !123, !noundef !124
  %838 = trunc nuw i8 %837 to i1
  br i1 %838, label %839, label %847

839:                                              ; preds = %835
  %840 = getelementptr inbounds i8, ptr %0, i64 8410
  %841 = load i8, ptr %840, align 2, !tbaa !159, !range !123, !noundef !124
  %842 = trunc nuw i8 %841 to i1
  br i1 %842, label %843, label %847

843:                                              ; preds = %839
  %844 = getelementptr inbounds i8, ptr %545, i64 4
  %845 = load i32, ptr %844, align 4, !tbaa !125
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %21, i32 noundef %845)
  %846 = load i32, ptr %21, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %846, i32 noundef 0, i32 noundef 0)
          to label %847 unwind label %811

847:                                              ; preds = %843, %839, %835
  %848 = getelementptr inbounds i8, ptr %16, i64 10
  %849 = load i8, ptr %848, align 2, !tbaa !160, !range !123, !noundef !124
  %850 = trunc nuw i8 %849 to i1
  br i1 %850, label %851, label %857

851:                                              ; preds = %847
  %852 = getelementptr inbounds i8, ptr %545, i64 4
  %853 = load i32, ptr %852, align 4, !tbaa !125
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %22, i32 noundef %853)
  %854 = getelementptr inbounds i8, ptr %16, i64 12
  %855 = load i32, ptr %854, align 4, !tbaa !161
  %856 = load i32, ptr %22, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %856, i32 noundef 11, i32 noundef %855)
          to label %857 unwind label %811

857:                                              ; preds = %851, %847
  %858 = getelementptr inbounds i8, ptr %0, i64 2456
  %859 = getelementptr inbounds i8, ptr %545, i64 4
  %860 = invoke { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %858, ptr noundef nonnull align 4 dereferenceable(4) %859)
          to label %861 unwind label %811

861:                                              ; preds = %857
  %862 = getelementptr inbounds i8, ptr %0, i64 2512
  %863 = invoke { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %862, ptr noundef nonnull align 4 dereferenceable(4) %859)
          to label %.preheader unwind label %811

.preheader:                                       ; preds = %861
  %864 = icmp ugt i32 %549, 2
  br i1 %864, label %.lr.ph3284.preheader, label %._crit_edge3285

.lr.ph3284.preheader:                             ; preds = %.preheader
  %wide.trip.count3344 = zext i32 %549 to i64
  br label %.lr.ph3284

._crit_edge3285:                                  ; preds = %872, %.preheader
  %865 = getelementptr inbounds i8, ptr %783, i64 64
  %866 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %865) #8
  br i1 %866, label %875, label %877

.lr.ph3284:                                       ; preds = %.lr.ph3284.preheader, %872
  %indvars.iv3341 = phi i64 [ 2, %.lr.ph3284.preheader ], [ %indvars.iv.next3342, %872 ]
  %867 = load i32, ptr %859, align 4, !tbaa !125
  %868 = getelementptr inbounds i32, ptr %545, i64 %indvars.iv3341
  %869 = load i32, ptr %868, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %867, i32 noundef %869)
          to label %870 unwind label %873

870:                                              ; preds = %.lr.ph3284
  %871 = load i32, ptr %868, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross8Compiler27add_implied_read_expressionERNS_14SPIRExpressionEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(236) %783, i32 noundef %871)
          to label %872 unwind label %873

872:                                              ; preds = %870
  %indvars.iv.next3342 = add nuw nsw i64 %indvars.iv3341, 1
  %exitcond3345.not = icmp eq i64 %indvars.iv.next3342, %wide.trip.count3344
  br i1 %exitcond3345.not, label %._crit_edge3285, label %.lr.ph3284, !llvm.loop !162

873:                                              ; preds = %870, %.lr.ph3284
  %874 = landingpad { ptr, i32 }
          cleanup
  br label %878

875:                                              ; preds = %._crit_edge3285
  %876 = invoke noundef i64 @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5eraseERKj(ptr noundef nonnull align 8 dereferenceable(56) %858, ptr noundef nonnull align 4 dereferenceable(4) %859)
          to label %877 unwind label %811

877:                                              ; preds = %875, %._crit_edge3285
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #8
  br label %.thread3374

878:                                              ; preds = %807, %809, %873, %811, %767
  %.pn3032.pn.pn = phi { ptr, i32 } [ %768, %767 ], [ %808, %807 ], [ %810, %809 ], [ %874, %873 ], [ %812, %811 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %16) #8
  br label %6424

879:                                              ; preds = %566
  %880 = load i32, ptr %545, align 4, !tbaa !125
  %881 = tail call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_12SPIRVariableEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %880)
  %.not3025 = icmp eq ptr %881, null
  br i1 %.not3025, label %.critedge3050, label %882

882:                                              ; preds = %879
  %883 = getelementptr inbounds i8, ptr %881, i64 89
  %884 = load i8, ptr %883, align 1, !tbaa !164, !range !123, !noundef !124
  %885 = trunc nuw i8 %884 to i1
  br i1 %885, label %886, label %891

886:                                              ; preds = %882
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %23) #8
  %887 = getelementptr inbounds i8, ptr %545, i64 4
  %888 = load i32, ptr %887, align 4, !tbaa !125
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %23, i32 noundef %888)
  %889 = getelementptr inbounds i8, ptr %881, i64 92
  %890 = load i32, ptr %23, align 4, !tbaa !125
  store i32 %890, ptr %889, align 4, !tbaa !125
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %23) #8
  br label %921

891:                                              ; preds = %882
  %892 = getelementptr inbounds i8, ptr %881, i64 164
  %893 = load i8, ptr %892, align 4, !tbaa !168, !range !123, !noundef !124
  %894 = trunc nuw i8 %893 to i1
  br i1 %894, label %895, label %.critedge

895:                                              ; preds = %891
  %896 = getelementptr inbounds i8, ptr %881, i64 165
  %897 = load i8, ptr %896, align 1, !tbaa !169, !range !123, !noundef !124
  %898 = trunc nuw i8 %897 to i1
  br i1 %898, label %.critedge, label %899

899:                                              ; preds = %895
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %24) #8
  %900 = getelementptr inbounds i8, ptr %545, i64 4
  %901 = load i32, ptr %900, align 4, !tbaa !125
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %24, i32 noundef %901)
  %902 = getelementptr inbounds i8, ptr %881, i64 92
  %903 = load i32, ptr %24, align 4, !tbaa !125
  store i32 %903, ptr %902, align 4, !tbaa !125
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %24) #8
  br label %921

.critedge:                                        ; preds = %891, %895
  %904 = getelementptr inbounds i8, ptr %881, i64 155
  %905 = load i8, ptr %904, align 1, !tbaa !170, !range !123, !noundef !124
  %906 = trunc nuw i8 %905 to i1
  br i1 %906, label %907, label %.critedge3050

907:                                              ; preds = %.critedge
  %908 = getelementptr inbounds i8, ptr %881, i64 92
  %909 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %908)
  %.not3026 = icmp eq i32 %909, 0
  br i1 %.not3026, label %.critedge3050, label %921

.critedge3050:                                    ; preds = %879, %907, %.critedge
  %910 = getelementptr inbounds i8, ptr %0, i64 8592
  %911 = tail call noundef i64 @_ZNKSt13unordered_mapIjbSt4hashIjESt8equal_toIjESaISt4pairIKjbEEE5countERS5_(ptr noundef nonnull align 8 dereferenceable(56) %910, ptr noundef nonnull align 4 dereferenceable(4) %545)
  %.not3027 = icmp eq i64 %911, 0
  %912 = load i32, ptr %545, align 4, !tbaa !125
  %913 = getelementptr inbounds i8, ptr %545, i64 4
  %914 = load i32, ptr %913, align 4, !tbaa !125
  br i1 %.not3027, label %917, label %915

915:                                              ; preds = %.critedge3050
  tail call void @_ZN11spirv_cross12CompilerGLSL22store_flattened_structEjj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %912, i32 noundef %914)
  %916 = load i32, ptr %545, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross8Compiler14register_writeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %916)
  br label %921

917:                                              ; preds = %.critedge3050
  %918 = load ptr, ptr %0, align 8, !tbaa !142
  %919 = getelementptr inbounds i8, ptr %918, i64 520
  %920 = load ptr, ptr %919, align 8
  tail call void %920(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %912, i32 noundef %914)
  br label %921

921:                                              ; preds = %899, %915, %917, %907, %886
  %922 = getelementptr inbounds i8, ptr %545, i64 4
  %923 = load i32, ptr %922, align 4, !tbaa !125
  %924 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %923)
  %925 = getelementptr inbounds i8, ptr %924, i64 124
  %926 = load i8, ptr %925, align 4, !tbaa !171, !range !123, !noundef !124
  %927 = trunc nuw i8 %926 to i1
  br i1 %927, label %928, label %.thread3374

928:                                              ; preds = %921
  %929 = load i32, ptr %922, align 4, !tbaa !125
  call void @_ZN11spirv_cross8Compiler14register_writeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %929)
  br label %.thread3374

930:                                              ; preds = %566
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %25) #8
  %931 = load i32, ptr %545, align 4, !tbaa !125
  store i32 %931, ptr %25, align 4, !tbaa !125
  %932 = getelementptr inbounds i8, ptr %545, i64 4
  %933 = load i32, ptr %932, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %26) #8
  %934 = getelementptr inbounds i8, ptr %545, i64 8
  %935 = load i32, ptr %934, align 4, !tbaa !125
  %936 = getelementptr inbounds i8, ptr %545, i64 12
  %937 = add i32 %549, -3
  call void @_ZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %26, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %935, ptr noundef nonnull %936, i32 noundef %937, i32 noundef 1, ptr noundef null)
  %938 = load i32, ptr %934, align 4, !tbaa !125
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %27, i32 noundef %938)
  %939 = load i32, ptr %27, align 4
  %940 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %939, i32 noundef 5300)
          to label %941 unwind label %944

941:                                              ; preds = %930
  br i1 %940, label %942, label %946

942:                                              ; preds = %941
  %943 = load i32, ptr %934, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL30convert_non_uniform_expressionERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %26, i32 noundef %943)
          to label %946 unwind label %944

944:                                              ; preds = %942, %930
  %945 = landingpad { ptr, i32 }
          cleanup
  br label %964

946:                                              ; preds = %942, %941
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %28) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %29) #8
  %947 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %931)
          to label %948 unwind label %956

948:                                              ; preds = %946
  %949 = load ptr, ptr %0, align 8, !tbaa !142
  %950 = getelementptr inbounds i8, ptr %949, i64 152
  %951 = load ptr, ptr %950, align 8
  invoke void %951(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %29, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %947, i32 noundef 0)
          to label %952 unwind label %956

952:                                              ; preds = %948
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRS6_RA11_S7_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %28, ptr noundef nonnull align 8 dereferenceable(32) %29, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef nonnull align 1 dereferenceable(11) @.str.1384)
          to label %953 unwind label %958

953:                                              ; preds = %952
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %30) #8
  store i8 1, ptr %30, align 1, !tbaa !147
  %954 = 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 %933, ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef nonnull align 4 dereferenceable(4) %25, ptr noundef nonnull align 1 dereferenceable(1) %30)
          to label %955 unwind label %960

955:                                              ; preds = %953
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %30) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %28) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %25) #8
  br label %.thread3374

956:                                              ; preds = %948, %946
  %957 = landingpad { ptr, i32 }
          cleanup
  br label %963

958:                                              ; preds = %952
  %959 = landingpad { ptr, i32 }
          cleanup
  br label %962

960:                                              ; preds = %953
  %961 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %30) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #8
  br label %962

962:                                              ; preds = %960, %958
  %.pn3021 = phi { ptr, i32 } [ %961, %960 ], [ %959, %958 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #8
  br label %963

963:                                              ; preds = %962, %956
  %.pn3021.pn = phi { ptr, i32 } [ %.pn3021, %962 ], [ %957, %956 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %28) #8
  br label %964

964:                                              ; preds = %963, %944
  %.pn3021.pn.pn = phi { ptr, i32 } [ %.pn3021.pn, %963 ], [ %945, %944 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %25) #8
  br label %6424

965:                                              ; preds = %566
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %31) #8
  %966 = load i32, ptr %545, align 4, !tbaa !125
  store i32 %966, ptr %31, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %32) #8
  %967 = getelementptr inbounds i8, ptr %545, i64 4
  %968 = load i32, ptr %967, align 4, !tbaa !125
  store i32 %968, ptr %32, align 4, !tbaa !125
  %969 = getelementptr inbounds i8, ptr %545, i64 8
  %970 = load i32, ptr %969, align 4, !tbaa !125
  %971 = getelementptr inbounds i8, ptr %545, i64 12
  %972 = add i32 %549, -3
  %973 = tail call noundef nonnull align 8 dereferenceable(795) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRFunctionEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %970)
  %974 = getelementptr inbounds i8, ptr %973, i64 12
  %975 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %974)
  %976 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %975)
  %977 = tail call noundef zeroext i1 @_ZN11spirv_cross8Compiler16function_is_pureERKNS_12SPIRFunctionE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(795) %973)
  %978 = tail call noundef zeroext i1 @_ZN11spirv_cross8Compiler29function_is_control_dependentERKNS_12SPIRFunctionE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(795) %973)
  %.not3294 = icmp eq i32 %972, 0
  br i1 %.not3294, label %._crit_edge3268, label %.lr.ph3267

.lr.ph3267:                                       ; preds = %965
  %979 = getelementptr inbounds i8, ptr %973, i64 24
  %wide.trip.count3329 = zext i32 %972 to i64
  br label %986

._crit_edge3268:                                  ; preds = %993, %965
  %.02322.lcssa = phi i1 [ false, %965 ], [ %.12323, %993 ]
  %980 = getelementptr inbounds i8, ptr %976, i64 32
  %981 = tail call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %980) #8
  %982 = getelementptr inbounds i8, ptr %0, i64 8394
  %983 = load i8, ptr %982, align 2, !range !123
  %984 = trunc nuw i8 %983 to i1
  %not.3295 = xor i1 %984, true
  %spec.select3052 = select i1 %not.3295, i1 true, i1 %.02322.lcssa
  %985 = select i1 %981, i1 true, i1 %984
  %.22324 = select i1 %981, i1 %.02322.lcssa, i1 %spec.select3052
  br i1 %977, label %997, label %996

986:                                              ; preds = %.lr.ph3267, %993
  %indvars.iv3327 = phi i64 [ 0, %.lr.ph3267 ], [ %indvars.iv.next3328, %993 ]
  %.023223265 = phi i1 [ false, %.lr.ph3267 ], [ %.12323, %993 ]
  %987 = tail call noundef nonnull align 4 dereferenceable(17) ptr @_ZN11spirv_cross10VectorViewINS_12SPIRFunction9ParameterEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %979, i64 noundef %indvars.iv3327) #8
  %988 = getelementptr inbounds i8, ptr %987, i64 12
  %989 = load i32, ptr %988, align 4, !tbaa !172
  %.not3020 = icmp eq i32 %989, 0
  br i1 %.not3020, label %993, label %990

990:                                              ; preds = %986
  %991 = getelementptr inbounds i32, ptr %971, i64 %indvars.iv3327
  %992 = load i32, ptr %991, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL26register_call_out_argumentEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %992)
  br label %993

993:                                              ; preds = %990, %986
  %.12323 = phi i1 [ true, %990 ], [ %.023223265, %986 ]
  %994 = getelementptr inbounds i32, ptr %971, i64 %indvars.iv3327
  %995 = load i32, ptr %994, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %995)
  %indvars.iv.next3328 = add nuw nsw i64 %indvars.iv3327, 1
  %exitcond3330.not = icmp eq i64 %indvars.iv.next3328, %wide.trip.count3329
  br i1 %exitcond3330.not, label %._crit_edge3268, label %986, !llvm.loop !174

996:                                              ; preds = %._crit_edge3268
  tail call void @_ZN11spirv_cross12CompilerGLSL29register_impure_function_callEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
  br label %997

997:                                              ; preds = %996, %._crit_edge3268
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %33) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #8
  call void @llvm.lifetime.start.p0(i64 280, ptr nonnull %34) #8
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEC2Ev(ptr noundef nonnull align 8 dereferenceable(280) %34) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %35) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %36) #8
  %998 = load ptr, ptr %0, align 8, !tbaa !142
  %999 = getelementptr inbounds i8, ptr %998, i64 48
  %1000 = load ptr, ptr %999, align 8
  invoke void %1000(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %36, ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %970, i1 noundef zeroext true)
          to label %1001 unwind label %1023

1001:                                             ; preds = %997
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %35, ptr noundef nonnull align 8 dereferenceable(32) %36, ptr noundef nonnull @.str.718)
          to label %1002 unwind label %1025

1002:                                             ; preds = %1001
  %1003 = 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) %35)
          to label %1004 unwind label %1027

1004:                                             ; preds = %1002
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #8
  br i1 %985, label %1044, label %1005

1005:                                             ; preds = %1004
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %37) #8
  %1006 = load ptr, ptr %0, align 8, !tbaa !142
  %1007 = getelementptr inbounds i8, ptr %1006, i64 152
  %1008 = load ptr, ptr %1007, align 8
  invoke void %1008(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %37, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %976, i32 noundef 0)
          to label %1009 unwind label %1031

1009:                                             ; preds = %1005
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %38) #8
  %1010 = load ptr, ptr %0, align 8, !tbaa !142
  %1011 = getelementptr inbounds i8, ptr %1010, i64 48
  %1012 = load ptr, ptr %1011, align 8
  invoke void %1012(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %38, ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %968, i1 noundef zeroext true)
          to label %1013 unwind label %1033

1013:                                             ; preds = %1009
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %39) #8
  %1014 = load ptr, ptr %0, align 8, !tbaa !142
  %1015 = getelementptr inbounds i8, ptr %1014, i64 304
  %1016 = load ptr, ptr %1015, align 8
  invoke void %1016(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %39, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %976, i32 noundef 0)
          to label %1017 unwind label %1035

1017:                                             ; preds = %1013
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_S7_SA_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %37, ptr noundef nonnull align 1 dereferenceable(2) @.str.307, ptr noundef nonnull align 8 dereferenceable(32) %38, ptr noundef nonnull align 8 dereferenceable(32) %39, ptr noundef nonnull align 1 dereferenceable(2) @.str.298)
          to label %1018 unwind label %1037

1018:                                             ; preds = %1017
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %37) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %40) #8
  %1019 = load ptr, ptr %0, align 8, !tbaa !142
  %1020 = getelementptr inbounds i8, ptr %1019, i64 48
  %1021 = load ptr, ptr %1020, align 8
  invoke void %1021(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %40, ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %968, i1 noundef zeroext true)
          to label %1022 unwind label %1042

1022:                                             ; preds = %1018
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %34, ptr noundef nonnull align 8 dereferenceable(32) %40) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %40) #8
  br label %1044

1023:                                             ; preds = %997
  %1024 = landingpad { ptr, i32 }
          cleanup
  br label %1030

1025:                                             ; preds = %1001
  %1026 = landingpad { ptr, i32 }
          cleanup
  br label %1029

1027:                                             ; preds = %1002
  %1028 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #8
  br label %1029

1029:                                             ; preds = %1027, %1025
  %.pn3002 = phi { ptr, i32 } [ %1028, %1027 ], [ %1026, %1025 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #8
  br label %1030

1030:                                             ; preds = %1029, %1023
  %.pn3002.pn = phi { ptr, i32 } [ %.pn3002, %1029 ], [ %1024, %1023 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #8
  br label %1161

1031:                                             ; preds = %1005
  %1032 = landingpad { ptr, i32 }
          cleanup
  br label %1041

1033:                                             ; preds = %1009
  %1034 = landingpad { ptr, i32 }
          cleanup
  br label %1040

1035:                                             ; preds = %1013
  %1036 = landingpad { ptr, i32 }
          cleanup
  br label %1039

1037:                                             ; preds = %1017
  %1038 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #8
  br label %1039

1039:                                             ; preds = %1037, %1035
  %.pn3005 = phi { ptr, i32 } [ %1038, %1037 ], [ %1036, %1035 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #8
  br label %1040

1040:                                             ; preds = %1039, %1033
  %.pn3005.pn = phi { ptr, i32 } [ %.pn3005, %1039 ], [ %1034, %1033 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #8
  br label %1041

1041:                                             ; preds = %1040, %1031
  %.pn3005.pn.pn = phi { ptr, i32 } [ %.pn3005.pn, %1040 ], [ %1032, %1031 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %37) #8
  br label %1161

1042:                                             ; preds = %1018
  %1043 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %40) #8
  br label %1161

1044:                                             ; preds = %1022, %1004
  br i1 %.not3294, label %._crit_edge3273, label %.lr.ph3272

.lr.ph3272:                                       ; preds = %1044
  %1045 = getelementptr inbounds i8, ptr %973, i64 24
  %wide.trip.count3334 = zext i32 %972 to i64
  br label %1049

._crit_edge3273:                                  ; preds = %1066, %1044
  %1046 = getelementptr inbounds i8, ptr %973, i64 512
  %1047 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_12SPIRFunction29CombinedImageSamplerParameterEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %1046) #8
  %1048 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_12SPIRFunction29CombinedImageSamplerParameterEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %1046) #8
  %.not30093274 = icmp eq ptr %1047, %1048
  br i1 %.not30093274, label %._crit_edge3278, label %.lr.ph3277

1049:                                             ; preds = %.lr.ph3272, %1066
  %indvars.iv3331 = phi i64 [ 0, %.lr.ph3272 ], [ %indvars.iv.next3332, %1066 ]
  %1050 = getelementptr inbounds i32, ptr %971, i64 %indvars.iv3331
  %1051 = load i32, ptr %1050, align 4, !tbaa !125
  %1052 = load ptr, ptr %0, align 8, !tbaa !142
  %1053 = getelementptr inbounds i8, ptr %1052, i64 432
  %1054 = load ptr, ptr %1053, align 8
  %1055 = invoke noundef zeroext i1 %1054(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1051)
          to label %1056 unwind label %1057

1056:                                             ; preds = %1049
  br i1 %1055, label %1066, label %1059

1057:                                             ; preds = %1049
  %1058 = landingpad { ptr, i32 }
          cleanup
  br label %1161

1059:                                             ; preds = %1056
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %41) #8
  %1060 = call noundef nonnull align 4 dereferenceable(17) ptr @_ZN11spirv_cross10VectorViewINS_12SPIRFunction9ParameterEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %1045, i64 noundef %indvars.iv3331) #8
  %1061 = load i32, ptr %1050, align 4, !tbaa !125
  %1062 = load ptr, ptr %0, align 8, !tbaa !142
  %1063 = getelementptr inbounds i8, ptr %1062, i64 232
  %1064 = load ptr, ptr %1063, align 8
  invoke void %1064(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %41, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 4 dereferenceable(17) %1060, i32 noundef %1061)
          to label %1065 unwind label %1067

1065:                                             ; preds = %1059
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %34, ptr noundef nonnull align 8 dereferenceable(32) %41) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %41) #8
  br label %1066

1066:                                             ; preds = %1056, %1065
  %indvars.iv.next3332 = add nuw nsw i64 %indvars.iv3331, 1
  %exitcond3335.not = icmp eq i64 %indvars.iv.next3332, %wide.trip.count3334
  br i1 %exitcond3335.not, label %._crit_edge3273, label %1049, !llvm.loop !175

1067:                                             ; preds = %1059
  %1068 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %41) #8
  br label %1161

._crit_edge3278:                                  ; preds = %1093, %._crit_edge3273
  invoke void @_ZN11spirv_cross12CompilerGLSL23append_global_func_argsERKNS_12SPIRFunctionEjRNS_11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(795) %973, i32 noundef %972, ptr noundef nonnull align 8 dereferenceable(280) %34)
          to label %1097 unwind label %1127

.lr.ph3277:                                       ; preds = %._crit_edge3273, %1093
  %.023283275 = phi ptr [ %1094, %1093 ], [ %1047, %._crit_edge3273 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %42) #8
  %1069 = getelementptr inbounds i8, ptr %.023283275, i64 12
  %1070 = load i8, ptr %1069, align 4, !tbaa !176, !range !123, !noundef !124
  %1071 = trunc nuw i8 %1070 to i1
  %1072 = getelementptr inbounds i8, ptr %.023283275, i64 4
  br i1 %1071, label %1073, label %1075

1073:                                             ; preds = %.lr.ph3277
  %1074 = load i32, ptr %1072, align 4, !tbaa !125
  store i32 %1074, ptr %42, align 4, !tbaa !125
  br label %1080

1075:                                             ; preds = %.lr.ph3277
  %1076 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1072)
  %1077 = zext i32 %1076 to i64
  %1078 = getelementptr inbounds i32, ptr %971, i64 %1077
  %1079 = load i32, ptr %1078, align 4, !tbaa !125
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %42, i32 noundef %1079)
  br label %1080

1080:                                             ; preds = %1075, %1073
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %43) #8
  %1081 = getelementptr inbounds i8, ptr %.023283275, i64 13
  %1082 = load i8, ptr %1081, align 1, !tbaa !178, !range !123, !noundef !124
  %1083 = trunc nuw i8 %1082 to i1
  %1084 = getelementptr inbounds i8, ptr %.023283275, i64 8
  br i1 %1083, label %1085, label %1087

1085:                                             ; preds = %1080
  %1086 = load i32, ptr %1084, align 4, !tbaa !125
  store i32 %1086, ptr %43, align 4, !tbaa !125
  br label %1092

1087:                                             ; preds = %1080
  %1088 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1084)
  %1089 = zext i32 %1088 to i64
  %1090 = getelementptr inbounds i32, ptr %971, i64 %1089
  %1091 = load i32, ptr %1090, align 4, !tbaa !125
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %43, i32 noundef %1091)
  %.sroa.0693.0.copyload.pre = load i32, ptr %43, align 4, !tbaa !125
  br label %1092

1092:                                             ; preds = %1087, %1085
  %.sroa.0693.0.copyload = phi i32 [ %.sroa.0693.0.copyload.pre, %1087 ], [ %1086, %1085 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %44) #8
  %.sroa.0694.0.copyload = load i32, ptr %42, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL25to_combined_image_samplerB5cxx11ENS_7TypedIDILNS_5TypesE2EEES3_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %44, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 %.sroa.0694.0.copyload, i32 %.sroa.0693.0.copyload)
          to label %1093 unwind label %1095

1093:                                             ; preds = %1092
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %34, ptr noundef nonnull align 8 dereferenceable(32) %44) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %44) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %43) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %42) #8
  %1094 = getelementptr inbounds i8, ptr %.023283275, i64 16
  %.not3009 = icmp eq ptr %1094, %1048
  br i1 %.not3009, label %._crit_edge3278, label %.lr.ph3277

1095:                                             ; preds = %1092
  %1096 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %44) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %43) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %42) #8
  br label %1161

1097:                                             ; preds = %._crit_edge3278
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %45) #8
  invoke void @_ZN11spirv_cross5mergeERKNS_11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEEPKc(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %45, ptr noundef nonnull align 8 dereferenceable(280) %34, ptr noundef nonnull @.str.177)
          to label %1098 unwind label %1129

1098:                                             ; preds = %1097
  %1099 = 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) %45)
          to label %1100 unwind label %1131

1100:                                             ; preds = %1098
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %45) #8
  %1101 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %33, ptr noundef nonnull @.str.135)
          to label %1102 unwind label %1127

1102:                                             ; preds = %1100
  invoke void @_ZN11spirv_cross12CompilerGLSL31check_function_call_constraintsEPKjj(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull %971, i32 noundef %972)
          to label %1103 unwind label %1127

1103:                                             ; preds = %1102
  %1104 = getelementptr inbounds i8, ptr %976, i64 16
  %1105 = load i32, ptr %1104, align 8, !tbaa !145
  %.not3012 = icmp eq i32 %1105, 1
  br i1 %.not3012, label %1156, label %1106

1106:                                             ; preds = %1103
  %1107 = load i32, ptr %32, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %46) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %47) #8
  %1108 = invoke noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL17args_will_forwardEjPKjjb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1107, ptr noundef nonnull %971, i32 noundef %972, i1 noundef zeroext %977)
          to label %1109 unwind label %1134

1109:                                             ; preds = %1106
  %.not3125 = xor i1 %1108, true
  %.not3053 = xor i1 %977, true
  %brmerge3054 = or i1 %.22324, %.not3053
  %or.cond3127 = select i1 %.not3125, i1 true, i1 %brmerge3054
  br i1 %or.cond3127, label %1116, label %1110

1110:                                             ; preds = %1109
  %1111 = getelementptr inbounds i8, ptr %0, i64 2400
  %1112 = invoke ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE4findERKj(ptr noundef nonnull align 8 dereferenceable(56) %1111, ptr noundef nonnull align 4 dereferenceable(4) %32)
          to label %1113 unwind label %1136

1113:                                             ; preds = %1110
  store ptr %1112, ptr %46, align 8
  %1114 = call ptr @_ZSt3endISt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(56) %1111)
  store ptr %1114, ptr %47, align 8
  %1115 = call noundef zeroext i1 @_ZNSt8__detaileqERKNS_19_Node_iterator_baseIjLb0EEES3_(ptr noundef nonnull align 8 dereferenceable(8) %46, ptr noundef nonnull align 8 dereferenceable(8) %47) #8
  br label %1116

1116:                                             ; preds = %1113, %1109
  %1117 = phi i1 [ false, %1109 ], [ %1115, %1113 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %47) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %46) #8
  br i1 %985, label %1143, label %1118

1118:                                             ; preds = %1116
  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.298)
          to label %1119 unwind label %1134

1119:                                             ; preds = %1118
  %1120 = load i32, ptr %32, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %48) #8
  %1121 = load ptr, ptr %0, align 8, !tbaa !142
  %1122 = getelementptr inbounds i8, ptr %1121, i64 48
  %1123 = load ptr, ptr %1122, align 8
  invoke void %1123(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %48, ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1120, i1 noundef zeroext true)
          to label %1124 unwind label %1138

1124:                                             ; preds = %1119
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %49) #8
  store i8 1, ptr %49, align 1, !tbaa !147
  %1125 = 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 %1120, ptr noundef nonnull align 8 dereferenceable(32) %48, ptr noundef nonnull align 4 dereferenceable(4) %31, ptr noundef nonnull align 1 dereferenceable(1) %49)
          to label %1126 unwind label %1140

1126:                                             ; preds = %1124
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %49) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %48) #8
  br label %1147

1127:                                             ; preds = %1158, %1156, %1102, %1100, %._crit_edge3278
  %1128 = landingpad { ptr, i32 }
          cleanup
  br label %1161

1129:                                             ; preds = %1097
  %1130 = landingpad { ptr, i32 }
          cleanup
  br label %1133

1131:                                             ; preds = %1098
  %1132 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #8
  br label %1133

1133:                                             ; preds = %1131, %1129
  %.pn3010 = phi { ptr, i32 } [ %1132, %1131 ], [ %1130, %1129 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %45) #8
  br label %1161

1134:                                             ; preds = %1154, %1143, %1118, %1106
  %1135 = landingpad { ptr, i32 }
          cleanup
  br label %1161

1136:                                             ; preds = %1110
  %1137 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %46) #8
  br label %1161

1138:                                             ; preds = %1119
  %1139 = landingpad { ptr, i32 }
          cleanup
  br label %1142

1140:                                             ; preds = %1124
  %1141 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %49) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #8
  br label %1142

1142:                                             ; preds = %1140, %1138
  %.pn3013 = phi { ptr, i32 } [ %1141, %1140 ], [ %1139, %1138 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %48) #8
  br label %1161

1143:                                             ; preds = %1116
  %1144 = load i32, ptr %31, align 4, !tbaa !125
  %1145 = load i32, ptr %32, align 4, !tbaa !125
  %1146 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1144, i32 noundef %1145, ptr noundef nonnull align 8 dereferenceable(32) %33, i1 noundef zeroext %1117, i1 noundef zeroext false)
          to label %1147 unwind label %1134

1147:                                             ; preds = %1143, %1126
  br i1 %.not3294, label %._crit_edge3282, label %.lr.ph3281.preheader

.lr.ph3281.preheader:                             ; preds = %1147
  %wide.trip.count3339 = zext i32 %972 to i64
  br label %.lr.ph3281

._crit_edge3282:                                  ; preds = %1151, %1147
  br i1 %1117, label %1154, label %1157

.lr.ph3281:                                       ; preds = %.lr.ph3281.preheader, %1151
  %indvars.iv3336 = phi i64 [ 0, %.lr.ph3281.preheader ], [ %indvars.iv.next3337, %1151 ]
  %1148 = load i32, ptr %32, align 4, !tbaa !125
  %1149 = getelementptr inbounds i32, ptr %971, i64 %indvars.iv3336
  %1150 = load i32, ptr %1149, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross8Compiler13register_readEjjb(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1148, i32 noundef %1150, i1 noundef zeroext %1117)
          to label %1151 unwind label %1152

1151:                                             ; preds = %.lr.ph3281
  %indvars.iv.next3337 = add nuw nsw i64 %indvars.iv3336, 1
  %exitcond3340.not = icmp eq i64 %indvars.iv.next3337, %wide.trip.count3339
  br i1 %exitcond3340.not, label %._crit_edge3282, label %.lr.ph3281, !llvm.loop !179

1152:                                             ; preds = %.lr.ph3281
  %1153 = landingpad { ptr, i32 }
          cleanup
  br label %1161

1154:                                             ; preds = %._crit_edge3282
  %1155 = load i32, ptr %32, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross8Compiler33register_global_read_dependenciesERKNS_12SPIRFunctionEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(795) %973, i32 noundef %1155)
          to label %1157 unwind label %1134

1156:                                             ; preds = %1103
  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.298)
          to label %1157 unwind label %1127

1157:                                             ; preds = %._crit_edge3282, %1154, %1156
  br i1 %978, label %1158, label %1160

1158:                                             ; preds = %1157
  %1159 = load i32, ptr %32, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1159)
          to label %1160 unwind label %1127

1160:                                             ; preds = %1158, %1157
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(280) %34) #8
  call void @llvm.lifetime.end.p0(i64 280, ptr nonnull %34) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %33) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %32) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %31) #8
  br label %.thread3374

1161:                                             ; preds = %1134, %1136, %1142, %1152, %1057, %1067, %1133, %1127, %1095, %1042, %1041, %1030
  %.pn3017.pn = phi { ptr, i32 } [ %1096, %1095 ], [ %1128, %1127 ], [ %.pn3010, %1133 ], [ %1043, %1042 ], [ %.pn3005.pn.pn, %1041 ], [ %.pn3002.pn, %1030 ], [ %1068, %1067 ], [ %1058, %1057 ], [ %1153, %1152 ], [ %1135, %1134 ], [ %.pn3013, %1142 ], [ %1137, %1136 ]
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(280) %34) #8
  call void @llvm.lifetime.end.p0(i64 280, ptr nonnull %34) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %33) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %32) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %31) #8
  br label %6424

1162:                                             ; preds = %566
  %1163 = load i32, ptr %545, align 4, !tbaa !125
  %1164 = getelementptr inbounds i8, ptr %545, i64 4
  %1165 = load i32, ptr %1164, align 4, !tbaa !125
  %1166 = getelementptr inbounds i8, ptr %545, i64 8
  %1167 = add i32 %549, -2
  %.not3291 = icmp eq i32 %1167, 0
  br i1 %.not3291, label %._crit_edge3253.thread, label %.lr.ph3252.preheader

._crit_edge3253.thread:                           ; preds = %1162
  %1168 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1163)
  br label %1179

.lr.ph3252.preheader:                             ; preds = %1162
  %wide.trip.count3316 = zext i32 %1167 to i64
  br label %.lr.ph3252

._crit_edge3253:                                  ; preds = %1174
  %1169 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1163)
  br i1 %.not3291, label %1179, label %1176

.lr.ph3252:                                       ; preds = %.lr.ph3252.preheader, %1174
  %indvars.iv3314 = phi i64 [ 0, %.lr.ph3252.preheader ], [ %indvars.iv.next3315, %1174 ]
  %.023303250 = phi i1 [ true, %.lr.ph3252.preheader ], [ %1175, %1174 ]
  br i1 %.023303250, label %1170, label %1174

1170:                                             ; preds = %.lr.ph3252
  %1171 = getelementptr inbounds i32, ptr %1166, i64 %indvars.iv3314
  %1172 = load i32, ptr %1171, align 4, !tbaa !125
  %1173 = tail call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1172)
  br label %1174

1174:                                             ; preds = %1170, %.lr.ph3252
  %1175 = phi i1 [ false, %.lr.ph3252 ], [ %1173, %1170 ]
  %indvars.iv.next3315 = add nuw nsw i64 %indvars.iv3314, 1
  %exitcond3317.not = icmp eq i64 %indvars.iv.next3315, %wide.trip.count3316
  br i1 %exitcond3317.not, label %._crit_edge3253, label %.lr.ph3252, !llvm.loop !180

1176:                                             ; preds = %._crit_edge3253
  %1177 = load i32, ptr %1166, align 4, !tbaa !125
  %1178 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1177)
  br label %1179

1179:                                             ; preds = %._crit_edge3253.thread, %._crit_edge3253, %1176
  %1180 = phi ptr [ %1169, %1176 ], [ %1169, %._crit_edge3253 ], [ %1168, %._crit_edge3253.thread ]
  %.02330.lcssa3360.shrunk = phi i1 [ %1175, %1176 ], [ %1175, %._crit_edge3253 ], [ true, %._crit_edge3253.thread ]
  %1181 = phi ptr [ %1178, %1176 ], [ null, %._crit_edge3253 ], [ null, %._crit_edge3253.thread ]
  %.02330.lcssa3360 = zext i1 %.02330.lcssa3360.shrunk to i8
  %1182 = getelementptr inbounds i8, ptr %1180, i64 32
  %1183 = tail call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %1182) #8
  %1184 = getelementptr inbounds i8, ptr %1180, i64 16
  %1185 = load i32, ptr %1184, align 8
  %1186 = icmp eq i32 %1185, 15
  %not.3221 = xor i1 %1183, true
  %1187 = select i1 %not.3221, i1 true, i1 %1186
  %.not2978 = icmp eq ptr %1181, null
  br i1 %.not2978, label %.thread3138, label %1188

1188:                                             ; preds = %1179
  %1189 = getelementptr inbounds i8, ptr %1181, i64 24
  %1190 = load i32, ptr %1189, align 8, !tbaa !126
  %1191 = icmp eq i32 %1190, 1
  br i1 %1191, label %1192, label %1202

1192:                                             ; preds = %1188
  %1193 = getelementptr inbounds i8, ptr %1181, i64 28
  %1194 = load i32, ptr %1193, align 4, !tbaa !146
  %1195 = icmp ne i32 %1194, 1
  %brmerge3056 = select i1 %1195, i1 true, i1 %1187
  %1196 = getelementptr inbounds i8, ptr %0, i64 8389
  %1197 = load i8, ptr %1196, align 1, !range !123
  %.ph = select i1 %brmerge3056, i8 0, i8 %1197
  %1198 = icmp eq i32 %1194, 1
  br i1 %1198, label %1199, label %1202

1199:                                             ; preds = %1192
  %1200 = getelementptr inbounds i8, ptr %0, i64 8391
  %1201 = load i8, ptr %1200, align 1, !tbaa !181, !range !123, !noundef !124
  br label %1202

1202:                                             ; preds = %1188, %1199, %1192
  %1203 = phi i8 [ %.ph, %1192 ], [ %.ph, %1199 ], [ 0, %1188 ]
  %1204 = phi i8 [ 0, %1192 ], [ %1201, %1199 ], [ 0, %1188 ]
  %1205 = getelementptr inbounds i8, ptr %0, i64 40
  %1206 = load i32, ptr %1166, align 4, !tbaa !125
  %1207 = zext i32 %1206 to i64
  %1208 = tail call noundef nonnull align 8 dereferenceable(21) ptr @_ZN11spirv_cross10VectorViewINS_7VariantEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %1205, i64 noundef %1207) #8
  %1209 = tail call noundef i32 @_ZNK11spirv_cross7Variant8get_typeEv(ptr noundef nonnull align 8 dereferenceable(21) %1208)
  %1210 = icmp eq i32 %1209, 3
  br i1 %1210, label %1211, label %1213

1211:                                             ; preds = %1202
  %1212 = tail call noundef zeroext i1 @_ZN11spirv_crossL22type_is_floating_pointERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(336) %1181)
  %spec.select3057 = select i1 %1212, i8 %1204, i8 0
  br label %1213

1213:                                             ; preds = %1211, %1202
  %.02339 = phi i8 [ %1204, %1202 ], [ %spec.select3057, %1211 ]
  %1214 = trunc nuw i8 %1203 to i1
  br i1 %1214, label %1217, label %1215

1215:                                             ; preds = %1213
  %1216 = trunc nuw i8 %.02339 to i1
  br i1 %1216, label %1217, label %.thread3138

1217:                                             ; preds = %1215, %1213
  %1218 = load i32, ptr %1166, align 4, !tbaa !125
  br i1 %.not3291, label %.thread3138, label %.lr.ph3259.preheader

.lr.ph3259.preheader:                             ; preds = %1217
  %wide.trip.count3320 = zext i32 %1167 to i64
  %min.iters.check3383 = icmp ult i32 %1167, 8
  br i1 %min.iters.check3383, label %.lr.ph3259.preheader3413, label %vector.ph3384

vector.ph3384:                                    ; preds = %.lr.ph3259.preheader
  %n.vec3386 = and i64 %wide.trip.count3320, 4294967288
  %broadcast.splatinsert3396 = insertelement <4 x i32> poison, i32 %1218, i64 0
  %broadcast.splat3397 = shufflevector <4 x i32> %broadcast.splatinsert3396, <4 x i32> poison, <4 x i32> zeroinitializer
  br label %vector.body3388

vector.body3388:                                  ; preds = %vector.body3388, %vector.ph3384
  %index3389 = phi i64 [ 0, %vector.ph3384 ], [ %index.next3398, %vector.body3388 ]
  %vec.phi3390 = phi <4 x i1> [ zeroinitializer, %vector.ph3384 ], [ %1225, %vector.body3388 ]
  %vec.phi3391 = phi <4 x i1> [ zeroinitializer, %vector.ph3384 ], [ %1226, %vector.body3388 ]
  %vec.phi3392 = phi <4 x i1> [ zeroinitializer, %vector.ph3384 ], [ %1223, %vector.body3388 ]
  %vec.phi3393 = phi <4 x i1> [ zeroinitializer, %vector.ph3384 ], [ %1224, %vector.body3388 ]
  %1219 = getelementptr inbounds i32, ptr %1166, i64 %index3389
  %1220 = getelementptr inbounds i8, ptr %1219, i64 16
  %wide.load3394 = load <4 x i32>, ptr %1219, align 4, !tbaa !125
  %wide.load3395 = load <4 x i32>, ptr %1220, align 4, !tbaa !125
  %1221 = icmp ne <4 x i32> %broadcast.splat3397, %wide.load3394
  %1222 = icmp ne <4 x i32> %broadcast.splat3397, %wide.load3395
  %1223 = or <4 x i1> %vec.phi3392, %1221
  %1224 = or <4 x i1> %vec.phi3393, %1222
  %1225 = or <4 x i1> %vec.phi3390, %1221
  %1226 = or <4 x i1> %vec.phi3391, %1222
  %index.next3398 = add nuw i64 %index3389, 8
  %1227 = icmp eq i64 %index.next3398, %n.vec3386
  br i1 %1227, label %middle.block3381, label %vector.body3388, !llvm.loop !182

middle.block3381:                                 ; preds = %vector.body3388
  %bin.rdx3399 = or <4 x i1> %1226, %1225
  %bin.rdx3399.fr = freeze <4 x i1> %bin.rdx3399
  %1228 = bitcast <4 x i1> %bin.rdx3399.fr to i4
  %.not3407 = icmp eq i4 %1228, 0
  %rdx.select3400 = select i1 %.not3407, i8 %1203, i8 0
  %bin.rdx3401 = or <4 x i1> %1224, %1223
  %bin.rdx3401.fr = freeze <4 x i1> %bin.rdx3401
  %1229 = bitcast <4 x i1> %bin.rdx3401.fr to i4
  %.not3408 = icmp eq i4 %1229, 0
  %rdx.select3402 = select i1 %.not3408, i8 %.02339, i8 0
  %cmp.n3403 = icmp eq i64 %n.vec3386, %wide.trip.count3320
  br i1 %cmp.n3403, label %.thread3138, label %.lr.ph3259.preheader3413

.lr.ph3259.preheader3413:                         ; preds = %middle.block3381, %.lr.ph3259.preheader
  %indvars.iv3318.ph = phi i64 [ 0, %.lr.ph3259.preheader ], [ %n.vec3386, %middle.block3381 ]
  %.123363257.ph = phi i8 [ %1203, %.lr.ph3259.preheader ], [ %rdx.select3400, %middle.block3381 ]
  %.123403256.ph = phi i8 [ %.02339, %.lr.ph3259.preheader ], [ %rdx.select3402, %middle.block3381 ]
  br label %.lr.ph3259

.lr.ph3259:                                       ; preds = %.lr.ph3259.preheader3413, %.lr.ph3259
  %indvars.iv3318 = phi i64 [ %indvars.iv.next3319, %.lr.ph3259 ], [ %indvars.iv3318.ph, %.lr.ph3259.preheader3413 ]
  %.123363257 = phi i8 [ %spec.select3059, %.lr.ph3259 ], [ %.123363257.ph, %.lr.ph3259.preheader3413 ]
  %.123403256 = phi i8 [ %spec.select3058, %.lr.ph3259 ], [ %.123403256.ph, %.lr.ph3259.preheader3413 ]
  %1230 = getelementptr inbounds i32, ptr %1166, i64 %indvars.iv3318
  %1231 = load i32, ptr %1230, align 4, !tbaa !125
  %.not3001 = icmp eq i32 %1218, %1231
  %spec.select3058 = select i1 %.not3001, i8 %.123403256, i8 0
  %spec.select3059 = select i1 %.not3001, i8 %.123363257, i8 0
  %indvars.iv.next3319 = add nuw nsw i64 %indvars.iv3318, 1
  %exitcond3321.not = icmp eq i64 %indvars.iv.next3319, %wide.trip.count3320
  br i1 %exitcond3321.not, label %.thread3138, label %.lr.ph3259, !llvm.loop !185

.thread3138:                                      ; preds = %.lr.ph3259, %middle.block3381, %1217, %1179, %1215
  %.32342 = phi i8 [ %.02339, %1215 ], [ 0, %1179 ], [ %.02339, %1217 ], [ %rdx.select3402, %middle.block3381 ], [ %spec.select3058, %.lr.ph3259 ]
  %.32338 = phi i8 [ %1203, %1215 ], [ 0, %1179 ], [ %1203, %1217 ], [ %rdx.select3400, %middle.block3381 ], [ %spec.select3059, %.lr.ph3259 ]
  %1232 = load i32, ptr %1184, align 8, !tbaa !145
  %1233 = icmp eq i32 %1232, 15
  %1234 = getelementptr inbounds i8, ptr %0, i64 8386
  %1235 = load i8, ptr %1234, align 2, !range !123
  %1236 = trunc nuw i8 %1235 to i1
  %spec.select3060 = select i1 %1236, i8 %.02330.lcssa3360, i8 0
  %.12331 = select i1 %1233, i8 %spec.select3060, i8 %.02330.lcssa3360
  %1237 = tail call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %1182) #8
  %1238 = getelementptr inbounds i8, ptr %0, i64 8387
  %1239 = load i8, ptr %1238, align 1, !range !123
  %1240 = trunc nuw i8 %1239 to i1
  %1241 = select i1 %1237, i1 true, i1 %1240
  %.22332 = select i1 %1241, i8 %.12331, i8 0
  %1242 = tail call noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL13type_is_emptyERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %1180)
  %1243 = getelementptr inbounds i8, ptr %0, i64 8397
  %1244 = load i8, ptr %1243, align 1, !range !123
  %1245 = trunc nuw i8 %1244 to i1
  %spec.select3062 = select i1 %1245, i8 %.22332, i8 0
  %.32333 = select i1 %1242, i8 %spec.select3062, i8 %.22332
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %50) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #8
  %1246 = getelementptr inbounds i8, ptr %0, i64 8384
  %1247 = load i8, ptr %1246, align 8, !tbaa !186, !range !123, !noundef !124
  %1248 = trunc nuw i8 %1247 to i1
  %1249 = select i1 %1248, i1 %1187, i1 false
  br i1 %1249, label %1250, label %1330

1250:                                             ; preds = %.thread3138
  %1251 = getelementptr inbounds i8, ptr %0, i64 8385
  %1252 = load i8, ptr %1251, align 1, !tbaa !187, !range !123, !noundef !124
  %1253 = trunc nuw i8 %1252 to i1
  %1254 = load i32, ptr %1184, align 8
  %1255 = icmp eq i32 %1254, 15
  %or.cond3067 = select i1 %1253, i1 %1255, i1 false
  br i1 %or.cond3067, label %1256, label %1269

1256:                                             ; preds = %1250
  %1257 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %1182) #8
  br i1 %1257, label %1258, label %._crit_edge3355

._crit_edge3355:                                  ; preds = %1256
  %.pre3356 = load i8, ptr %1251, align 1, !tbaa !187, !range !123
  br label %1269

1258:                                             ; preds = %1256
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %51) #8
  %1259 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1163)
          to label %1260 unwind label %1264

1260:                                             ; preds = %1258
  invoke void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %51, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %1259)
          to label %1261 unwind label %1264

1261:                                             ; preds = %1260
  %1262 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef nonnull align 8 dereferenceable(32) %51)
          to label %1263 unwind label %1266

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

1264:                                             ; preds = %1260, %1258
  %1265 = landingpad { ptr, i32 }
          cleanup
  br label %1268

1266:                                             ; preds = %1261
  %1267 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #8
  br label %1268

1268:                                             ; preds = %1266, %1264
  %.pn2991 = phi { ptr, i32 } [ %1267, %1266 ], [ %1265, %1264 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %51) #8
  br label %1399

1269:                                             ; preds = %._crit_edge3355, %1250
  %1270 = phi i8 [ %.pre3356, %._crit_edge3355 ], [ %1252, %1250 ]
  %1271 = trunc nuw i8 %1270 to i1
  br i1 %1271, label %1272, label %1293

1272:                                             ; preds = %1269
  %1273 = getelementptr inbounds i8, ptr %0, i64 8398
  %1274 = load i8, ptr %1273, align 2, !tbaa !188, !range !123, !noundef !124
  %1275 = trunc nuw i8 %1274 to i1
  br i1 %1275, label %1276, label %1293

1276:                                             ; preds = %1272
  %1277 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %1182) #8
  br i1 %1277, label %1293, label %1278

1278:                                             ; preds = %1276
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %52) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %53) #8
  %1279 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1163)
          to label %1280 unwind label %1285

1280:                                             ; preds = %1278
  invoke void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %53, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %1279)
          to label %1281 unwind label %1285

1281:                                             ; preds = %1280
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %52, ptr noundef nonnull align 8 dereferenceable(32) %53, ptr noundef nonnull @.str.718)
          to label %1282 unwind label %1287

1282:                                             ; preds = %1281
  %1283 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef nonnull align 8 dereferenceable(32) %52)
          to label %1284 unwind label %1289

1284:                                             ; preds = %1282
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %52) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %53) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %52) #8
  br label %1293

1285:                                             ; preds = %1280, %1278
  %1286 = landingpad { ptr, i32 }
          cleanup
  br label %1292

1287:                                             ; preds = %1281
  %1288 = landingpad { ptr, i32 }
          cleanup
  br label %1291

1289:                                             ; preds = %1282
  %1290 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %52) #8
  br label %1291

1291:                                             ; preds = %1289, %1287
  %.pn2988 = phi { ptr, i32 } [ %1290, %1289 ], [ %1288, %1287 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #8
  br label %1292

1292:                                             ; preds = %1291, %1285
  %.pn2988.pn = phi { ptr, i32 } [ %.pn2988, %1291 ], [ %1286, %1285 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %53) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %52) #8
  br label %1399

1293:                                             ; preds = %1269, %1272, %1276, %1284, %1263
  %.02344 = phi i1 [ false, %1263 ], [ false, %1276 ], [ true, %1284 ], [ false, %1272 ], [ false, %1269 ]
  %1294 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef nonnull @.str.946)
          to label %1295 unwind label %1302

1295:                                             ; preds = %1293
  %1296 = call noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL13type_is_emptyERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %1180)
  br i1 %1296, label %1297, label %1304

1297:                                             ; preds = %1295
  %1298 = load i8, ptr %1243, align 1, !tbaa !189, !range !123, !noundef !124
  %1299 = trunc nuw i8 %1298 to i1
  br i1 %1299, label %1304, label %1300

1300:                                             ; preds = %1297
  %1301 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef nonnull @.str.760)
          to label %1325 unwind label %1302

1302:                                             ; preds = %1328, %1325, %1300, %1293
  %1303 = landingpad { ptr, i32 }
          cleanup
  br label %1399

1304:                                             ; preds = %1297, %1295
  %1305 = trunc nuw i8 %.32338 to i1
  br i1 %1305, label %1306, label %1316

1306:                                             ; preds = %1304
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %54) #8
  %1307 = load i32, ptr %1166, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %54, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1307, i1 noundef zeroext true)
          to label %1308 unwind label %1311

1308:                                             ; preds = %1306
  %1309 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef nonnull align 8 dereferenceable(32) %54)
          to label %1310 unwind label %1313

1310:                                             ; preds = %1308
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %54) #8
  br label %1325

1311:                                             ; preds = %1306
  %1312 = landingpad { ptr, i32 }
          cleanup
  br label %1315

1313:                                             ; preds = %1308
  %1314 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #8
  br label %1315

1315:                                             ; preds = %1313, %1311
  %.pn2995 = phi { ptr, i32 } [ %1314, %1313 ], [ %1312, %1311 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %54) #8
  br label %1399

1316:                                             ; preds = %1304
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %55) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL24build_composite_combinerB5cxx11EjPKjj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %55, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1163, ptr noundef nonnull %1166, i32 noundef %1167)
          to label %1317 unwind label %1320

1317:                                             ; preds = %1316
  %1318 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef nonnull align 8 dereferenceable(32) %55)
          to label %1319 unwind label %1322

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

1320:                                             ; preds = %1316
  %1321 = landingpad { ptr, i32 }
          cleanup
  br label %1324

1322:                                             ; preds = %1317
  %1323 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #8
  br label %1324

1324:                                             ; preds = %1322, %1320
  %.pn2993 = phi { ptr, i32 } [ %1323, %1322 ], [ %1321, %1320 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %55) #8
  br label %1399

1325:                                             ; preds = %1310, %1319, %1300
  %1326 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef nonnull @.str.947)
          to label %1327 unwind label %1302

1327:                                             ; preds = %1325
  br i1 %.02344, label %1328, label %1389

1328:                                             ; preds = %1327
  %1329 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef nonnull @.str.135)
          to label %1389 unwind label %1302

1330:                                             ; preds = %.thread3138
  %1331 = trunc nuw i8 %.32342 to i1
  %.not3068 = xor i1 %1331, true
  %brmerge3069 = select i1 %.not3068, i1 true, i1 %1187
  br i1 %brmerge3069, label %1347, label %1332

1332:                                             ; preds = %1330
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %56) #8
  %1333 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1163)
          to label %1334 unwind label %1339

1334:                                             ; preds = %1332
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %57) #8
  %1335 = load i32, ptr %1166, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %57, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1335, i1 noundef zeroext true)
          to label %1336 unwind label %1341

1336:                                             ; preds = %1334
  invoke void @_ZN11spirv_cross12CompilerGLSL13remap_swizzleERKNS_8SPIRTypeEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %56, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %1333, i32 noundef 1, ptr noundef nonnull align 8 dereferenceable(32) %57)
          to label %1337 unwind label %1343

1337:                                             ; preds = %1336
  %1338 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef nonnull align 8 dereferenceable(32) %56) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %57) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %56) #8
  br label %1389

1339:                                             ; preds = %1332
  %1340 = landingpad { ptr, i32 }
          cleanup
  br label %1346

1341:                                             ; preds = %1334
  %1342 = landingpad { ptr, i32 }
          cleanup
  br label %1345

1343:                                             ; preds = %1336
  %1344 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #8
  br label %1345

1345:                                             ; preds = %1343, %1341
  %.pn2979 = phi { ptr, i32 } [ %1344, %1343 ], [ %1342, %1341 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %57) #8
  br label %1346

1346:                                             ; preds = %1345, %1339
  %.pn2979.pn = phi { ptr, i32 } [ %.pn2979, %1345 ], [ %1340, %1339 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %56) #8
  br label %1399

1347:                                             ; preds = %1330
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %58) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %59) #8
  %1348 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1163)
          to label %1349 unwind label %1359

1349:                                             ; preds = %1347
  invoke void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %59, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %1348)
          to label %1350 unwind label %1359

1350:                                             ; preds = %1349
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %58, ptr noundef nonnull align 8 dereferenceable(32) %59, ptr noundef nonnull @.str.718)
          to label %1351 unwind label %1361

1351:                                             ; preds = %1350
  %1352 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef nonnull align 8 dereferenceable(32) %58) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %59) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %58) #8
  %1353 = call noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL13type_is_emptyERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %1180)
  br i1 %1353, label %1354, label %1366

1354:                                             ; preds = %1351
  %1355 = load i8, ptr %1243, align 1, !tbaa !189, !range !123, !noundef !124
  %1356 = trunc nuw i8 %1355 to i1
  br i1 %1356, label %1366, label %1357

1357:                                             ; preds = %1354
  %1358 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef nonnull @.str.760)
          to label %1387 unwind label %1364

1359:                                             ; preds = %1349, %1347
  %1360 = landingpad { ptr, i32 }
          cleanup
  br label %1363

1361:                                             ; preds = %1350
  %1362 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #8
  br label %1363

1363:                                             ; preds = %1361, %1359
  %.pn2982 = phi { ptr, i32 } [ %1362, %1361 ], [ %1360, %1359 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %59) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %58) #8
  br label %1399

1364:                                             ; preds = %1391, %1387, %1357
  %1365 = landingpad { ptr, i32 }
          cleanup
  br label %1399

1366:                                             ; preds = %1354, %1351
  %1367 = trunc nuw i8 %.32338 to i1
  br i1 %1367, label %1368, label %1378

1368:                                             ; preds = %1366
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %60) #8
  %1369 = load i32, ptr %1166, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %60, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1369, i1 noundef zeroext true)
          to label %1370 unwind label %1373

1370:                                             ; preds = %1368
  %1371 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef nonnull align 8 dereferenceable(32) %60)
          to label %1372 unwind label %1375

1372:                                             ; preds = %1370
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %60) #8
  br label %1387

1373:                                             ; preds = %1368
  %1374 = landingpad { ptr, i32 }
          cleanup
  br label %1377

1375:                                             ; preds = %1370
  %1376 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #8
  br label %1377

1377:                                             ; preds = %1375, %1373
  %.pn2986 = phi { ptr, i32 } [ %1376, %1375 ], [ %1374, %1373 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %60) #8
  br label %1399

1378:                                             ; preds = %1366
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %61) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL24build_composite_combinerB5cxx11EjPKjj(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 %1163, ptr noundef nonnull %1166, i32 noundef %1167)
          to label %1379 unwind label %1382

1379:                                             ; preds = %1378
  %1380 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef nonnull align 8 dereferenceable(32) %61)
          to label %1381 unwind label %1384

1381:                                             ; preds = %1379
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %61) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %61) #8
  br label %1387

1382:                                             ; preds = %1378
  %1383 = landingpad { ptr, i32 }
          cleanup
  br label %1386

1384:                                             ; preds = %1379
  %1385 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %61) #8
  br label %1386

1386:                                             ; preds = %1384, %1382
  %.pn2984 = phi { ptr, i32 } [ %1385, %1384 ], [ %1383, %1382 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %61) #8
  br label %1399

1387:                                             ; preds = %1372, %1381, %1357
  %1388 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef nonnull @.str.135)
          to label %1389 unwind label %1364

1389:                                             ; preds = %1327, %1328, %1337, %1387
  %1390 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %50) #8
  br i1 %1390, label %.loopexit, label %1391

1391:                                             ; preds = %1389
  %1392 = trunc nuw i8 %.32333 to i1
  %1393 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1163, i32 noundef %1165, ptr noundef nonnull align 8 dereferenceable(32) %50, i1 noundef zeroext %1392, i1 noundef zeroext false)
          to label %.preheader3226 unwind label %1364

.preheader3226:                                   ; preds = %1391
  br i1 %.not3291, label %.loopexit, label %.lr.ph3263.preheader

.lr.ph3263.preheader:                             ; preds = %.preheader3226
  %wide.trip.count3325 = zext i32 %1167 to i64
  br label %.lr.ph3263

.lr.ph3263:                                       ; preds = %.lr.ph3263.preheader, %1396
  %indvars.iv3322 = phi i64 [ 0, %.lr.ph3263.preheader ], [ %indvars.iv.next3323, %1396 ]
  %1394 = getelementptr inbounds i32, ptr %1166, i64 %indvars.iv3322
  %1395 = load i32, ptr %1394, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1165, i32 noundef %1395)
          to label %1396 unwind label %1397

1396:                                             ; preds = %.lr.ph3263
  %indvars.iv.next3323 = add nuw nsw i64 %indvars.iv3322, 1
  %exitcond3326.not = icmp eq i64 %indvars.iv.next3323, %wide.trip.count3325
  br i1 %exitcond3326.not, label %.loopexit, label %.lr.ph3263, !llvm.loop !190

1397:                                             ; preds = %.lr.ph3263
  %1398 = landingpad { ptr, i32 }
          cleanup
  br label %1399

.loopexit:                                        ; preds = %1396, %.preheader3226, %1389
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %50) #8
  br label %.thread3374

1399:                                             ; preds = %1268, %1292, %1302, %1315, %1324, %1397, %1386, %1377, %1364, %1363, %1346
  %.pn2999 = phi { ptr, i32 } [ %1398, %1397 ], [ %1365, %1364 ], [ %.pn2986, %1377 ], [ %.pn2984, %1386 ], [ %.pn2982, %1363 ], [ %.pn2979.pn, %1346 ], [ %1303, %1302 ], [ %.pn2995, %1315 ], [ %.pn2993, %1324 ], [ %.pn2991, %1268 ], [ %.pn2988.pn, %1292 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %50) #8
  br label %6424

1400:                                             ; preds = %566
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %62) #8
  %1401 = load i32, ptr %545, align 4, !tbaa !125
  store i32 %1401, ptr %62, align 4, !tbaa !125
  %1402 = getelementptr inbounds i8, ptr %545, i64 4
  %1403 = load i32, ptr %1402, align 4, !tbaa !125
  %1404 = getelementptr inbounds i8, ptr %545, i64 8
  %1405 = load i32, ptr %1404, align 4, !tbaa !125
  %1406 = getelementptr inbounds i8, ptr %545, i64 12
  %1407 = load i32, ptr %1406, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %63) #8
  %1408 = getelementptr inbounds i8, ptr %545, i64 16
  %1409 = load i32, ptr %1408, align 4, !tbaa !125
  store i32 %1409, ptr %63, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1405)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %64) #8
  call void @_ZN11spirv_cross12CompilerGLSL17declare_temporaryB5cxx11Ejj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %64, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1401, i32 noundef %1403)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %65) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %65, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1405, i1 noundef zeroext true)
          to label %1410 unwind label %1419

1410:                                             ; preds = %1400
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_RA2_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %64, ptr noundef nonnull align 8 dereferenceable(32) %65, ptr noundef nonnull align 1 dereferenceable(2) @.str.298)
          to label %1411 unwind label %1421

1411:                                             ; preds = %1410
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %65) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %64) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %66) #8
  %1412 = load ptr, ptr %0, align 8, !tbaa !142
  %1413 = getelementptr inbounds i8, ptr %1412, i64 48
  %1414 = load ptr, ptr %1413, align 8
  call void %1414(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %66, ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1403, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %67) #8
  store i8 1, ptr %67, align 1, !tbaa !147
  %1415 = 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 %1403, ptr noundef nonnull align 8 dereferenceable(32) %66, ptr noundef nonnull align 4 dereferenceable(4) %62, ptr noundef nonnull align 1 dereferenceable(1) %67)
          to label %1416 unwind label %1424

1416:                                             ; preds = %1411
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %67) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %66) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %68) #8
  call void @_ZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaE(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 %1403, ptr noundef nonnull %63, i32 noundef 1, i32 noundef 0, ptr noundef null)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %69) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %69, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1407, i1 noundef zeroext true)
          to label %1417 unwind label %1426

1417:                                             ; preds = %1416
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS7_RA2_S9_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %68, ptr noundef nonnull align 1 dereferenceable(4) @.str.335, ptr noundef nonnull align 8 dereferenceable(32) %69, ptr noundef nonnull align 1 dereferenceable(2) @.str.298)
          to label %1418 unwind label %1428

1418:                                             ; preds = %1417
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %69) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %69) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %68) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %68) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %63) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %62) #8
  br label %.thread3374

1419:                                             ; preds = %1400
  %1420 = landingpad { ptr, i32 }
          cleanup
  br label %1423

1421:                                             ; preds = %1410
  %1422 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #8
  br label %1423

1423:                                             ; preds = %1421, %1419
  %.pn2972 = phi { ptr, i32 } [ %1422, %1421 ], [ %1420, %1419 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %65) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %64) #8
  br label %1431

1424:                                             ; preds = %1411
  %1425 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %67) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %66) #8
  br label %1431

1426:                                             ; preds = %1416
  %1427 = landingpad { ptr, i32 }
          cleanup
  br label %1430

1428:                                             ; preds = %1417
  %1429 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %69) #8
  br label %1430

1430:                                             ; preds = %1428, %1426
  %.pn2974 = phi { ptr, i32 } [ %1429, %1428 ], [ %1427, %1426 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %69) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %68) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %68) #8
  br label %1431

1431:                                             ; preds = %1430, %1424, %1423
  %.pn2974.pn = phi { ptr, i32 } [ %.pn2974, %1430 ], [ %1425, %1424 ], [ %.pn2972, %1423 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %63) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %62) #8
  br label %6424

1432:                                             ; preds = %566
  %1433 = load i32, ptr %545, align 4, !tbaa !125
  %1434 = getelementptr inbounds i8, ptr %545, i64 4
  %1435 = load i32, ptr %1434, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %70) #8
  %1436 = getelementptr inbounds i8, ptr %545, i64 8
  %1437 = load i32, ptr %1436, align 4, !tbaa !125
  %1438 = getelementptr inbounds i8, ptr %545, i64 12
  call void @_ZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %70, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1437, ptr noundef nonnull %1438, i32 noundef 1, i32 noundef 0, ptr noundef null)
  %1439 = load i32, ptr %1436, align 4, !tbaa !125
  %1440 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1439)
          to label %1441 unwind label %1448

1441:                                             ; preds = %1432
  %1442 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1433, i32 noundef %1435, ptr noundef nonnull align 8 dereferenceable(32) %70, i1 noundef zeroext %1440, i1 noundef zeroext false)
          to label %1443 unwind label %1448

1443:                                             ; preds = %1441
  %1444 = load i32, ptr %1436, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1435, i32 noundef %1444)
          to label %1445 unwind label %1448

1445:                                             ; preds = %1443
  %1446 = load i32, ptr %1438, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1435, i32 noundef %1446)
          to label %1447 unwind label %1448

1447:                                             ; preds = %1445
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %70) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %70) #8
  br label %.thread3374

1448:                                             ; preds = %1445, %1443, %1441, %1432
  %1449 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %70) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %70) #8
  br label %6424

1450:                                             ; preds = %566
  %1451 = load i32, ptr %545, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %71) #8
  %1452 = getelementptr inbounds i8, ptr %545, i64 4
  %1453 = load i32, ptr %1452, align 4, !tbaa !125
  store i32 %1453, ptr %71, align 4, !tbaa !125
  %1454 = add i32 %549, -3
  %1455 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1451)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %72) #8
  %1456 = getelementptr inbounds i8, ptr %0, i64 2400
  %1457 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE4findERKj(ptr noundef nonnull align 8 dereferenceable(56) %1456, ptr noundef nonnull align 4 dereferenceable(4) %71)
  store ptr %1457, ptr %72, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %73) #8
  %1458 = call ptr @_ZSt3endISt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(56) %1456)
  store ptr %1458, ptr %73, align 8
  %1459 = call noundef zeroext i1 @_ZNSt8__detaileqERKNS_19_Node_iterator_baseIjLb0EEES3_(ptr noundef nonnull align 8 dereferenceable(8) %72, ptr noundef nonnull align 8 dereferenceable(8) %73) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %73) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %72) #8
  %1460 = getelementptr inbounds i8, ptr %545, i64 8
  %1461 = load i32, ptr %1460, align 4, !tbaa !125
  %1462 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1461)
  %1463 = getelementptr inbounds i8, ptr %1462, i64 16
  %1464 = load i32, ptr %1463, align 8, !tbaa !145
  %1465 = icmp eq i32 %1464, 15
  br i1 %1465, label %.thread3141, label %1466

1466:                                             ; preds = %1450
  %1467 = getelementptr inbounds i8, ptr %1462, i64 32
  %1468 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %1467) #8
  %1469 = xor i1 %1468, true
  %spec.select3213 = and i1 %1459, %1468
  br label %.thread3141

.thread3141:                                      ; preds = %1466, %1450
  %1470 = phi i1 [ true, %1450 ], [ %1469, %1466 ]
  %1471 = phi i1 [ false, %1450 ], [ %spec.select3213, %1466 ]
  %1472 = load i32, ptr %1460, align 4, !tbaa !125
  %1473 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler23has_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1472, i32 noundef 2)
  br i1 %1473, label %1477, label %1474

1474:                                             ; preds = %.thread3141
  %1475 = load i32, ptr %1460, align 4, !tbaa !125
  %1476 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler23has_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1475, i32 noundef 1)
  br i1 %1476, label %1477, label %1478

1477:                                             ; preds = %1474, %.thread3141
  br label %1478

1478:                                             ; preds = %1477, %1474
  %.12347 = phi i1 [ false, %1477 ], [ %1471, %1474 ]
  %1479 = load i32, ptr %1460, align 4, !tbaa !125
  %1480 = load ptr, ptr %0, align 8, !tbaa !142
  %1481 = getelementptr inbounds i8, ptr %1480, i64 320
  %1482 = load ptr, ptr %1481, align 8
  %1483 = call noundef zeroext i1 %1482(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1479)
  %not. = xor i1 %1483, true
  %spec.select3071 = and i1 %.12347, %not.
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %74) #8
  call void @_ZN11spirv_cross15AccessChainMetaC2Ev(ptr noundef nonnull align 4 dereferenceable(16) %74) #8
  %1484 = load i32, ptr %1460, align 4, !tbaa !125
  %1485 = call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_12SPIRConstantEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1484)
  %.not2968 = icmp eq ptr %1485, null
  br i1 %.not2968, label %1497, label %1486

1486:                                             ; preds = %1478
  %1487 = getelementptr inbounds i8, ptr %1485, i64 264
  %1488 = load i8, ptr %1487, align 8, !tbaa !191, !range !123, !noundef !124
  %1489 = trunc nuw i8 %1488 to i1
  %brmerge3072 = or i1 %1470, %1489
  br i1 %brmerge3072, label %1497, label %1490

1490:                                             ; preds = %1486
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %75) #8
  %1491 = getelementptr inbounds i8, ptr %545, i64 12
  call void @_ZN11spirv_cross12CompilerGLSL40to_extract_constant_composite_expressionB5cxx11EjRKNS_12SPIRConstantEPKjj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %75, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1451, ptr noundef nonnull align 8 dereferenceable(360) %1485, ptr noundef nonnull %1491, i32 noundef %1454)
  %1492 = load i32, ptr %71, align 4, !tbaa !125
  %1493 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1451, i32 noundef %1492, ptr noundef nonnull align 8 dereferenceable(32) %75, i1 noundef zeroext true, i1 noundef zeroext true)
          to label %1494 unwind label %1495

1494:                                             ; preds = %1490
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %75) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %75) #8
  br label %1554

1495:                                             ; preds = %1490
  %1496 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %75) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %75) #8
  br label %1575

1497:                                             ; preds = %1486, %1478
  br i1 %spec.select3071, label %1498, label %1537

1498:                                             ; preds = %1497
  %1499 = load i32, ptr %1460, align 4, !tbaa !125
  %1500 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1499)
  %1501 = getelementptr inbounds i8, ptr %1455, i64 24
  %1502 = load i32, ptr %1501, align 8
  %1503 = icmp eq i32 %1502, 1
  %or.cond3075 = select i1 %1500, i1 %1503, i1 false
  br i1 %or.cond3075, label %1504, label %1537

1504:                                             ; preds = %1498
  %1505 = getelementptr inbounds i8, ptr %1455, i64 28
  %1506 = load i32, ptr %1505, align 4, !tbaa !146
  %1507 = icmp eq i32 %1506, 1
  %1508 = icmp eq i32 %1454, 1
  %or.cond8 = select i1 %1507, i1 %1508, i1 false
  br i1 %or.cond8, label %1509, label %1537

1509:                                             ; preds = %1504
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %76) #8
  %1510 = load i32, ptr %1460, align 4, !tbaa !125
  %1511 = getelementptr inbounds i8, ptr %545, i64 12
  call void @_ZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %76, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1510, ptr noundef nonnull %1511, i32 noundef 1, i32 noundef 67, ptr noundef nonnull %74)
  %1512 = load i32, ptr %71, align 4, !tbaa !125
  %1513 = load i32, ptr %1460, align 4, !tbaa !125
  %1514 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL30should_suppress_usage_trackingEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1513)
          to label %1515 unwind label %1534

1515:                                             ; preds = %1509
  %1516 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1451, i32 noundef %1512, ptr noundef nonnull align 8 dereferenceable(32) %76, i1 noundef zeroext true, i1 noundef zeroext %1514)
          to label %1517 unwind label %1534

1517:                                             ; preds = %1515
  %1518 = load i32, ptr %71, align 4, !tbaa !125
  %1519 = load i32, ptr %1460, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1518, i32 noundef %1519)
          to label %1520 unwind label %1534

1520:                                             ; preds = %1517
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %77) #8
  %1521 = load i32, ptr %1460, align 4, !tbaa !125
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %77, i32 noundef %1521)
  %1522 = getelementptr inbounds i8, ptr %1516, i64 12
  %1523 = load i32, ptr %77, align 4, !tbaa !125
  store i32 %1523, ptr %1522, align 4, !tbaa !125
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %77) #8
  %1524 = getelementptr inbounds i8, ptr %74, i64 8
  %1525 = load i8, ptr %1524, align 4, !tbaa !158, !range !123, !noundef !124
  %1526 = trunc nuw i8 %1525 to i1
  br i1 %1526, label %1527, label %1536

1527:                                             ; preds = %1520
  %1528 = getelementptr inbounds i8, ptr %0, i64 8410
  %1529 = load i8, ptr %1528, align 2, !tbaa !159, !range !123, !noundef !124
  %1530 = trunc nuw i8 %1529 to i1
  br i1 %1530, label %1531, label %1536

1531:                                             ; preds = %1527
  %1532 = load i32, ptr %1452, align 4, !tbaa !125
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %78, i32 noundef %1532)
  %1533 = load i32, ptr %78, align 4
  invoke void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %1533, i32 noundef 0, i32 noundef 0)
          to label %1536 unwind label %1534

1534:                                             ; preds = %1531, %1517, %1515, %1509
  %1535 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %76) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %76) #8
  br label %1575

1536:                                             ; preds = %1531, %1527, %1520
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %76) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %76) #8
  br label %1554

1537:                                             ; preds = %1504, %1498, %1497
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %79) #8
  %1538 = load i32, ptr %1460, align 4, !tbaa !125
  %1539 = getelementptr inbounds i8, ptr %545, i64 12
  call void @_ZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %79, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1538, ptr noundef nonnull %1539, i32 noundef %1454, i32 noundef 65, ptr noundef nonnull %74)
  %1540 = load i32, ptr %71, align 4, !tbaa !125
  %1541 = load i32, ptr %1460, align 4, !tbaa !125
  %1542 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1541)
          to label %1543 unwind label %1552

1543:                                             ; preds = %1537
  %1544 = load i32, ptr %1460, align 4, !tbaa !125
  %1545 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL30should_suppress_usage_trackingEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1544)
          to label %1546 unwind label %1552

1546:                                             ; preds = %1543
  %1547 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1451, i32 noundef %1540, ptr noundef nonnull align 8 dereferenceable(32) %79, i1 noundef zeroext %1542, i1 noundef zeroext %1545)
          to label %1548 unwind label %1552

1548:                                             ; preds = %1546
  %1549 = load i32, ptr %71, align 4, !tbaa !125
  %1550 = load i32, ptr %1460, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1549, i32 noundef %1550)
          to label %1551 unwind label %1552

1551:                                             ; preds = %1548
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %79) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %79) #8
  br label %1554

1552:                                             ; preds = %1548, %1546, %1543, %1537
  %1553 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %79) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %79) #8
  br label %1575

1554:                                             ; preds = %1536, %1551, %1494
  %.02349 = phi ptr [ %1516, %1536 ], [ %1547, %1551 ], [ %1493, %1494 ]
  %1555 = getelementptr inbounds i8, ptr %74, i64 4
  %1556 = load i8, ptr %1555, align 4, !tbaa !148, !range !123, !noundef !124
  %1557 = getelementptr inbounds i8, ptr %.02349, i64 57
  store i8 %1556, ptr %1557, align 1, !tbaa !140
  %1558 = getelementptr inbounds i8, ptr %74, i64 5
  %1559 = load i8, ptr %1558, align 1, !tbaa !154, !range !123, !noundef !124
  %1560 = trunc nuw i8 %1559 to i1
  br i1 %1560, label %1561, label %1563

1561:                                             ; preds = %1554
  %1562 = load i32, ptr %71, align 4, !tbaa !125
  call void @_ZN11spirv_cross8Compiler23set_extended_decorationEjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1562, i32 noundef 2, i32 noundef 0)
  br label %1563

1563:                                             ; preds = %1561, %1554
  %1564 = load i32, ptr %74, align 4, !tbaa !155
  %.not2971 = icmp eq i32 %1564, 0
  br i1 %.not2971, label %1567, label %1565

1565:                                             ; preds = %1563
  %1566 = load i32, ptr %71, align 4, !tbaa !125
  call void @_ZN11spirv_cross8Compiler23set_extended_decorationEjNS_19ExtendedDecorationsEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1566, i32 noundef 1, i32 noundef %1564)
  br label %1567

1567:                                             ; preds = %1565, %1563
  %1568 = getelementptr inbounds i8, ptr %74, i64 6
  %1569 = load i8, ptr %1568, align 2, !tbaa !156, !range !123, !noundef !124
  %1570 = trunc nuw i8 %1569 to i1
  br i1 %1570, label %1571, label %1574

1571:                                             ; preds = %1567
  %1572 = load i32, ptr %71, align 4, !tbaa !125
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %80, i32 noundef %1572)
  %1573 = load i32, ptr %80, align 4
  call void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %1573, i32 noundef 18, i32 noundef 0)
  br label %1574

1574:                                             ; preds = %1571, %1567
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %74) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %71) #8
  br label %.thread3374

1575:                                             ; preds = %1552, %1534, %1495
  %.pn2969 = phi { ptr, i32 } [ %1535, %1534 ], [ %1553, %1552 ], [ %1496, %1495 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %74) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %71) #8
  br label %6424

1576:                                             ; preds = %566
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %81) #8
  %1577 = load i32, ptr %545, align 4, !tbaa !125
  store i32 %1577, ptr %81, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %82) #8
  %1578 = getelementptr inbounds i8, ptr %545, i64 4
  %1579 = load i32, ptr %1578, align 4, !tbaa !125
  store i32 %1579, ptr %82, align 4, !tbaa !125
  %1580 = getelementptr inbounds i8, ptr %545, i64 8
  %1581 = load i32, ptr %1580, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %83) #8
  %1582 = getelementptr inbounds i8, ptr %545, i64 12
  %1583 = load i32, ptr %1582, align 4, !tbaa !125
  store i32 %1583, ptr %83, align 4, !tbaa !125
  %1584 = getelementptr inbounds i8, ptr %545, i64 16
  %1585 = add i32 %549, -4
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1583)
  %1586 = getelementptr inbounds i8, ptr %0, i64 2400
  %1587 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %1586, ptr noundef nonnull align 4 dereferenceable(4) %82)
  %1588 = getelementptr inbounds i8, ptr %0, i64 2128
  %1589 = call noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %1588, ptr noundef nonnull align 4 dereferenceable(4) %83)
  %.not2949 = icmp eq i64 %1589, 0
  br i1 %.not2949, label %1590, label %.critedge3080

1590:                                             ; preds = %1576
  %1591 = getelementptr inbounds i8, ptr %0, i64 9608
  %1592 = call noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %1591, ptr noundef nonnull align 4 dereferenceable(4) %83)
  %.not2950 = icmp eq i64 %1592, 0
  br i1 %.not2950, label %1593, label %.critedge3080

1593:                                             ; preds = %1590
  %1594 = getelementptr inbounds i8, ptr %0, i64 2568
  %1595 = call noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %1594, ptr noundef nonnull align 4 dereferenceable(4) %82)
  %.not2951 = icmp eq i64 %1595, 0
  br i1 %.not2951, label %1596, label %.critedge3080

1596:                                             ; preds = %1593
  %1597 = call noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %1594, ptr noundef nonnull align 4 dereferenceable(4) %83)
  %.not2952 = icmp eq i64 %1597, 0
  br i1 %.not2952, label %1598, label %.critedge3080

1598:                                             ; preds = %1596
  %1599 = load i32, ptr %83, align 4, !tbaa !125
  %1600 = call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_14SPIRExpressionEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1599)
  %1601 = icmp eq ptr %1600, null
  br i1 %1601, label %.critedge3080, label %1602

1602:                                             ; preds = %1598
  %1603 = getelementptr inbounds i8, ptr %0, i64 8410
  %1604 = load i8, ptr %1603, align 2, !tbaa !159, !range !123, !noundef !124
  %1605 = trunc nuw i8 %1604 to i1
  br i1 %1605, label %1606, label %.critedge3078

1606:                                             ; preds = %1602
  %1607 = load i32, ptr %83, align 4, !tbaa !125
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %84, i32 noundef %1607)
  %1608 = load i32, ptr %84, align 4
  %1609 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %1608, i32 noundef 0)
  %1610 = load i32, ptr %82, align 4, !tbaa !125
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %85, i32 noundef %1610)
  %1611 = load i32, ptr %85, align 4
  %1612 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %1611, i32 noundef 0)
  %1613 = xor i1 %1609, %1612
  br i1 %1613, label %1614, label %.critedge3078

1614:                                             ; preds = %1606
  %1615 = load i32, ptr %81, align 4, !tbaa !125
  %1616 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1615)
  %1617 = getelementptr inbounds i8, ptr %1616, i64 16
  %1618 = load i32, ptr %1617, align 8, !tbaa !145
  %.not2954 = icmp eq i32 %1618, 15
  br i1 %.not2954, label %.critedge3078, label %.critedge3080

.critedge3078:                                    ; preds = %1606, %1602, %1614
  %1619 = call noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %1586, ptr noundef nonnull align 4 dereferenceable(4) %83)
  %.not2960 = icmp eq i64 %1619, 0
  br i1 %.not2960, label %1620, label %1622

1620:                                             ; preds = %.critedge3078
  %1621 = load i32, ptr %83, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL29force_temporary_and_recompileEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1621)
  br label %1622

1622:                                             ; preds = %1620, %.critedge3078
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %86) #8
  %1623 = load i32, ptr %83, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaE(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 %1623, ptr noundef nonnull %1584, i32 noundef %1585, i32 noundef 1, ptr noundef null)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %87) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(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 %1581, i1 noundef zeroext true)
          to label %1624 unwind label %1636

1624:                                             ; preds = %1622
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS7_RA2_S9_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %86, ptr noundef nonnull align 1 dereferenceable(4) @.str.335, ptr noundef nonnull align 8 dereferenceable(32) %87, ptr noundef nonnull align 1 dereferenceable(2) @.str.298)
          to label %1625 unwind label %1638

1625:                                             ; preds = %1624
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %87) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %87) #8
  %1626 = load i32, ptr %82, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %88) #8
  %1627 = load i32, ptr %83, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %88, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1627, i1 noundef zeroext true)
          to label %1628 unwind label %1641

1628:                                             ; preds = %1625
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %89) #8
  store i8 1, ptr %89, align 1, !tbaa !147
  %1629 = 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 %1626, ptr noundef nonnull align 8 dereferenceable(32) %88, ptr noundef nonnull align 4 dereferenceable(4) %81, ptr noundef nonnull align 1 dereferenceable(1) %89)
          to label %1630 unwind label %1643

1630:                                             ; preds = %1628
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %89) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %88) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %88) #8
  %1631 = invoke { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %1588, ptr noundef nonnull align 4 dereferenceable(4) %83)
          to label %1632 unwind label %1646

1632:                                             ; preds = %1630
  %1633 = getelementptr inbounds i8, ptr %0, i64 9552
  %1634 = invoke { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %1633, ptr noundef nonnull align 4 dereferenceable(4) %83)
          to label %1635 unwind label %1646

1635:                                             ; preds = %1632
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %86) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %86) #8
  br label %1683

1636:                                             ; preds = %1622
  %1637 = landingpad { ptr, i32 }
          cleanup
  br label %1640

1638:                                             ; preds = %1624
  %1639 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %87) #8
  br label %1640

1640:                                             ; preds = %1638, %1636
  %.pn2961 = phi { ptr, i32 } [ %1639, %1638 ], [ %1637, %1636 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %87) #8
  br label %1648

1641:                                             ; preds = %1625
  %1642 = landingpad { ptr, i32 }
          cleanup
  br label %1645

1643:                                             ; preds = %1628
  %1644 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %89) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %88) #8
  br label %1645

1645:                                             ; preds = %1643, %1641
  %.pn2963 = phi { ptr, i32 } [ %1644, %1643 ], [ %1642, %1641 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %88) #8
  br label %1648

1646:                                             ; preds = %1632, %1630
  %1647 = landingpad { ptr, i32 }
          cleanup
  br label %1648

1648:                                             ; preds = %1646, %1645, %1640
  %.pn2965 = phi { ptr, i32 } [ %1647, %1646 ], [ %.pn2963, %1645 ], [ %.pn2961, %1640 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %86) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %86) #8
  br label %1684

.critedge3080:                                    ; preds = %1598, %1596, %1593, %1590, %1576, %1614
  %1649 = load i32, ptr %83, align 4, !tbaa !125
  %1650 = call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_9SPIRUndefEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1649)
  %.not2955 = icmp eq ptr %1650, null
  br i1 %.not2955, label %1655, label %1651

1651:                                             ; preds = %.critedge3080
  %1652 = load i32, ptr %81, align 4, !tbaa !125
  %1653 = load i32, ptr %82, align 4, !tbaa !125
  %1654 = call noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL39emit_uninitialized_temporary_expressionEjj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1652, i32 noundef %1653)
  br label %1674

1655:                                             ; preds = %.critedge3080
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %90) #8
  %1656 = load i32, ptr %81, align 4, !tbaa !125
  %1657 = load i32, ptr %82, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL17declare_temporaryB5cxx11Ejj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %90, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1656, i32 noundef %1657)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %91) #8
  %1658 = load i32, ptr %83, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_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 %1658, i1 noundef zeroext true)
          to label %1659 unwind label %1667

1659:                                             ; preds = %1655
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_RA2_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %90, ptr noundef nonnull align 8 dereferenceable(32) %91, ptr noundef nonnull align 1 dereferenceable(2) @.str.298)
          to label %1660 unwind label %1669

1660:                                             ; preds = %1659
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %91) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %91) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %90) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %90) #8
  %1661 = load i32, ptr %82, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %92) #8
  %1662 = load ptr, ptr %0, align 8, !tbaa !142
  %1663 = getelementptr inbounds i8, ptr %1662, i64 48
  %1664 = load ptr, ptr %1663, align 8
  call void %1664(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %92, ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1661, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %93) #8
  store i8 1, ptr %93, align 1, !tbaa !147
  %1665 = 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 %1661, ptr noundef nonnull align 8 dereferenceable(32) %92, ptr noundef nonnull align 4 dereferenceable(4) %81, ptr noundef nonnull align 1 dereferenceable(1) %93)
          to label %1666 unwind label %1672

1666:                                             ; preds = %1660
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %93) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %92) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %92) #8
  br label %1674

1667:                                             ; preds = %1655
  %1668 = landingpad { ptr, i32 }
          cleanup
  br label %1671

1669:                                             ; preds = %1659
  %1670 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %91) #8
  br label %1671

1671:                                             ; preds = %1669, %1667
  %.pn2956 = phi { ptr, i32 } [ %1670, %1669 ], [ %1668, %1667 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %91) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %90) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %90) #8
  br label %1684

1672:                                             ; preds = %1660
  %1673 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %93) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %92) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %92) #8
  br label %1684

1674:                                             ; preds = %1666, %1651
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %94) #8
  %1675 = load i32, ptr %82, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL21access_chain_internalB5cxx11EjPKjjjPNS_15AccessChainMetaE(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 %1675, ptr noundef nonnull %1584, i32 noundef %1585, i32 noundef 1, ptr noundef null)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %95) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_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 %1581, i1 noundef zeroext true)
          to label %1676 unwind label %1678

1676:                                             ; preds = %1674
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS7_RA2_S9_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %94, ptr noundef nonnull align 1 dereferenceable(4) @.str.335, ptr noundef nonnull align 8 dereferenceable(32) %95, ptr noundef nonnull align 1 dereferenceable(2) @.str.298)
          to label %1677 unwind label %1680

1677:                                             ; preds = %1676
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %95) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %95) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %94) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %94) #8
  br label %1683

1678:                                             ; preds = %1674
  %1679 = landingpad { ptr, i32 }
          cleanup
  br label %1682

1680:                                             ; preds = %1676
  %1681 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %95) #8
  br label %1682

1682:                                             ; preds = %1680, %1678
  %.pn2958 = phi { ptr, i32 } [ %1681, %1680 ], [ %1679, %1678 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %95) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %94) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %94) #8
  br label %1684

1683:                                             ; preds = %1677, %1635
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %83) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %82) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %81) #8
  br label %.thread3374

1684:                                             ; preds = %1682, %1672, %1671, %1648
  %.pn2965.pn = phi { ptr, i32 } [ %.pn2965, %1648 ], [ %.pn2958, %1682 ], [ %1673, %1672 ], [ %.pn2956, %1671 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %83) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %82) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %81) #8
  br label %6424

1685:                                             ; preds = %566
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %96) #8
  %1686 = load i32, ptr %545, align 4, !tbaa !125
  store i32 %1686, ptr %96, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %97) #8
  %1687 = getelementptr inbounds i8, ptr %545, i64 4
  %1688 = load i32, ptr %1687, align 4, !tbaa !125
  store i32 %1688, ptr %97, align 4, !tbaa !125
  %.not2947 = icmp eq i32 %1686, %1688
  br i1 %.not2947, label %1717, label %1689

1689:                                             ; preds = %1685
  %1690 = getelementptr inbounds i8, ptr %0, i64 9272
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %98) #8
  %1691 = getelementptr inbounds i8, ptr %1, i64 4
  %1692 = load i32, ptr %1691, align 4, !tbaa !197
  %1693 = or i32 %1692, 268435456
  store i32 %1693, ptr %98, align 4, !tbaa !125
  %1694 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %1690, ptr noundef nonnull align 4 dereferenceable(4) %98)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %98) #8
  %1695 = load i32, ptr %1694, align 4, !tbaa !125
  %.not2948 = icmp eq i32 %1695, 0
  br i1 %.not2948, label %1696, label %1699

1696:                                             ; preds = %1689
  %1697 = getelementptr inbounds i8, ptr %0, i64 8
  %1698 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %1697, i32 noundef 1)
  store i32 %1698, ptr %1694, align 4, !tbaa !125
  br label %1699

1699:                                             ; preds = %1696, %1689
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %99) #8
  %1700 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1688)
  %1701 = getelementptr inbounds i8, ptr %1700, i64 276
  %1702 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1701)
  store i32 %1702, ptr %99, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 72, ptr nonnull %100) #8
  call void @_ZN11spirv_cross19EmbeddedInstructionC2Ev(ptr noundef nonnull align 8 dereferenceable(72) %100) #8
  call void @llvm.lifetime.start.p0(i64 72, ptr nonnull %101) #8
  call void @_ZN11spirv_cross19EmbeddedInstructionC2Ev(ptr noundef nonnull align 8 dereferenceable(72) %101) #8
  store i16 61, ptr %100, align 8, !tbaa !5
  %1703 = getelementptr inbounds i8, ptr %100, i64 8
  store i32 3, ptr %1703, align 8, !tbaa !11
  %1704 = getelementptr inbounds i8, ptr %100, i64 16
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backERKj(ptr noundef nonnull align 8 dereferenceable(56) %1704, ptr noundef nonnull align 4 dereferenceable(4) %99) #8
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backERKj(ptr noundef nonnull align 8 dereferenceable(56) %1704, ptr noundef nonnull align 4 dereferenceable(4) %1694) #8
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backERKj(ptr noundef nonnull align 8 dereferenceable(56) %1704, ptr noundef nonnull align 4 dereferenceable(4) %97) #8
  store i16 62, ptr %101, align 8, !tbaa !5
  %1705 = getelementptr inbounds i8, ptr %101, i64 8
  store i32 2, ptr %1705, align 8, !tbaa !11
  %1706 = getelementptr inbounds i8, ptr %101, i64 16
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backERKj(ptr noundef nonnull align 8 dereferenceable(56) %1706, ptr noundef nonnull align 4 dereferenceable(4) %96) #8
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backERKj(ptr noundef nonnull align 8 dereferenceable(56) %1706, ptr noundef nonnull align 4 dereferenceable(4) %1694) #8
  %1707 = load ptr, ptr %0, align 8, !tbaa !142
  %1708 = getelementptr inbounds i8, ptr %1707, i64 64
  %1709 = load ptr, ptr %1708, align 8
  invoke void %1709(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 4 dereferenceable(12) %100)
          to label %1710 unwind label %1715

1710:                                             ; preds = %1699
  %1711 = load ptr, ptr %0, align 8, !tbaa !142
  %1712 = getelementptr inbounds i8, ptr %1711, i64 64
  %1713 = load ptr, ptr %1712, align 8
  invoke void %1713(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 4 dereferenceable(12) %101)
          to label %1714 unwind label %1715

1714:                                             ; preds = %1710
  call void @_ZN11spirv_cross19EmbeddedInstructionD2Ev(ptr noundef nonnull align 8 dereferenceable(72) %101) #8
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %101) #8
  call void @_ZN11spirv_cross19EmbeddedInstructionD2Ev(ptr noundef nonnull align 8 dereferenceable(72) %100) #8
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %100) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %99) #8
  br label %1717

1715:                                             ; preds = %1710, %1699
  %1716 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN11spirv_cross19EmbeddedInstructionD2Ev(ptr noundef nonnull align 8 dereferenceable(72) %101) #8
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %101) #8
  call void @_ZN11spirv_cross19EmbeddedInstructionD2Ev(ptr noundef nonnull align 8 dereferenceable(72) %100) #8
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %100) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %99) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %97) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %96) #8
  br label %6424

1717:                                             ; preds = %1714, %1685
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %97) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %96) #8
  br label %.thread3374

1718:                                             ; preds = %566
  %1719 = load i32, ptr %545, align 4, !tbaa !125
  %1720 = getelementptr inbounds i8, ptr %545, i64 4
  %1721 = load i32, ptr %1720, align 4, !tbaa !125
  %1722 = getelementptr inbounds i8, ptr %545, i64 8
  %1723 = load i32, ptr %1722, align 4, !tbaa !125
  %1724 = tail call noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL39emit_uninitialized_temporary_expressionEjj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1719, i32 noundef %1721)
  %1725 = tail call noundef i32 @_ZNK11spirv_cross8Compiler18expression_type_idEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1723)
  call void @_ZN11spirv_cross11SmallVectorIjLm8EEC2Ev(ptr noundef nonnull align 8 dereferenceable(56) %102) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL22emit_copy_logical_typeEjjjjNS_11SmallVectorIjLm8EEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1721, i32 noundef %1719, i32 noundef %1723, i32 noundef %1725, ptr noundef nonnull %102)
          to label %1726 unwind label %1727

1726:                                             ; preds = %1718
  call void @_ZN11spirv_cross11SmallVectorIjLm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %102) #8
  br label %.thread3374

1727:                                             ; preds = %1718
  %1728 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN11spirv_cross11SmallVectorIjLm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %102) #8
  br label %6424

1729:                                             ; preds = %566
  %1730 = load i32, ptr %545, align 4, !tbaa !125
  %1731 = getelementptr inbounds i8, ptr %545, i64 4
  %1732 = load i32, ptr %1731, align 4, !tbaa !125
  %1733 = getelementptr inbounds i8, ptr %545, i64 8
  %1734 = load i32, ptr %1733, align 4, !tbaa !125
  %1735 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1730)
  %1736 = getelementptr inbounds i8, ptr %1735, i64 124
  %1737 = load i8, ptr %1736, align 4, !tbaa !171, !range !123, !noundef !124
  %1738 = trunc nuw i8 %1737 to i1
  %1739 = tail call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_15SPIRAccessChainEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1734)
  %1740 = tail call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_24SPIRCombinedImageSamplerEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1734)
  %.not2941 = icmp eq ptr %1739, null
  br i1 %.not2941, label %1745, label %1741

1741:                                             ; preds = %1729
  %1742 = tail call noundef nonnull align 8 dereferenceable(168) ptr @_ZN11spirv_cross8Compiler3setINS_15SPIRAccessChainEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1732, ptr noundef nonnull align 8 dereferenceable(168) %1739)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %103) #8
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %103, i32 noundef %1732)
  %1743 = getelementptr inbounds i8, ptr %1742, i64 8
  %1744 = load i32, ptr %103, align 4, !tbaa !125
  store i32 %1744, ptr %1743, align 8, !tbaa !125
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %103) #8
  br label %.thread3374

1745:                                             ; preds = %1729
  %.not2942 = icmp eq ptr %1740, null
  br i1 %.not2942, label %1750, label %1746

1746:                                             ; preds = %1745
  %1747 = tail call noundef nonnull align 8 dereferenceable(24) ptr @_ZN11spirv_cross8Compiler3setINS_24SPIRCombinedImageSamplerEJRS2_EEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1732, ptr noundef nonnull align 8 dereferenceable(24) %1740)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %104) #8
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %104, i32 noundef %1732)
  %1748 = getelementptr inbounds i8, ptr %1747, i64 8
  %1749 = load i32, ptr %104, align 4, !tbaa !125
  store i32 %1749, ptr %1748, align 8, !tbaa !125
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %104) #8
  br label %.thread3374

1750:                                             ; preds = %1745
  %1751 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler20expression_is_lvalueEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1734)
  %.not3081 = xor i1 %1751, true
  %brmerge3082 = select i1 %.not3081, i1 true, i1 %1738
  br i1 %brmerge3082, label %1757, label %1752

1752:                                             ; preds = %1750
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %105) #8
  call void @_ZN11spirv_cross12CompilerGLSL22to_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 %1734, i1 noundef zeroext true)
  %1753 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1730, i32 noundef %1732, ptr noundef nonnull align 8 dereferenceable(32) %105, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %1754 unwind label %1755

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

1755:                                             ; preds = %1752
  %1756 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %105) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %105) #8
  br label %6424

1757:                                             ; preds = %1750
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %106) #8
  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 %1734, i1 noundef zeroext true)
  %1758 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1730, i32 noundef %1732, ptr noundef nonnull align 8 dereferenceable(32) %106, i1 noundef zeroext true, i1 noundef zeroext true)
          to label %1759 unwind label %1768

1759:                                             ; preds = %1757
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %106) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %106) #8
  br i1 %1738, label %1760, label %1770

1760:                                             ; preds = %1759
  %1761 = call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1734)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %107) #8
  %.not2945 = icmp eq ptr %1761, null
  br i1 %.not2945, label %1764, label %1762

1762:                                             ; preds = %1760
  %1763 = getelementptr inbounds i8, ptr %1761, i64 8
  br label %1765

1764:                                             ; preds = %1760
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %107, i32 noundef 0)
  br label %1765

1765:                                             ; preds = %1764, %1762
  %.in3377 = phi ptr [ %107, %1764 ], [ %1763, %1762 ]
  %1766 = load i32, ptr %.in3377, align 4, !tbaa !125
  %1767 = getelementptr inbounds i8, ptr %1758, i64 52
  store i32 %1766, ptr %1767, align 4, !tbaa !125
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %107) #8
  br label %1770

1768:                                             ; preds = %1757
  %1769 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %106) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %106) #8
  br label %6424

1770:                                             ; preds = %1765, %1759
  %1771 = call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_14SPIRExpressionEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1734)
  %.not2946 = icmp eq ptr %1771, null
  br i1 %.not2946, label %.thread3374, label %1772

1772:                                             ; preds = %1770
  %1773 = getelementptr inbounds i8, ptr %1771, i64 176
  %1774 = getelementptr inbounds i8, ptr %1758, i64 176
  %1775 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(56) %1774, ptr noundef nonnull align 8 dereferenceable(56) %1773) #8
  %1776 = getelementptr inbounds i8, ptr %1771, i64 64
  %1777 = getelementptr inbounds i8, ptr %1758, i64 64
  %1778 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(56) %1777, ptr noundef nonnull align 8 dereferenceable(56) %1776) #8
  br label %.thread3374

1779:                                             ; preds = %566
  %1780 = load i32, ptr %545, align 4, !tbaa !125
  %1781 = getelementptr inbounds i8, ptr %545, i64 4
  %1782 = load i32, ptr %1781, align 4, !tbaa !125
  %1783 = getelementptr inbounds i8, ptr %545, i64 8
  %1784 = load i32, ptr %1783, align 4, !tbaa !125
  %1785 = getelementptr inbounds i8, ptr %545, i64 12
  %1786 = load i32, ptr %1785, align 4, !tbaa !125
  %1787 = getelementptr inbounds i8, ptr %545, i64 16
  %1788 = add i32 %549, -4
  %1789 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1784)
  %.not3288 = icmp eq i32 %1788, 0
  br i1 %.not3288, label %._crit_edge3241.thread, label %.lr.ph3240

.lr.ph3240:                                       ; preds = %1779
  %1790 = getelementptr inbounds i8, ptr %1789, i64 24
  %1791 = load i32, ptr %1790, align 8, !tbaa !126
  %wide.trip.count3302 = zext i32 %1788 to i64
  %min.iters.check = icmp ult i32 %1788, 8
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.ph

scalar.ph.preheader:                              ; preds = %middle.block, %.lr.ph3240
  %indvars.iv3300.ph = phi i64 [ 0, %.lr.ph3240 ], [ %n.vec, %middle.block ]
  %.023513238.ph = phi i8 [ 0, %.lr.ph3240 ], [ %rdx.select, %middle.block ]
  br label %scalar.ph

vector.ph:                                        ; preds = %.lr.ph3240
  %n.vec = and i64 %wide.trip.count3302, 4294967288
  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %1791, i64 0
  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.phi = phi <4 x i1> [ zeroinitializer, %vector.ph ], [ %1796, %vector.body ]
  %vec.phi3379 = phi <4 x i1> [ zeroinitializer, %vector.ph ], [ %1797, %vector.body ]
  %1792 = getelementptr inbounds i32, ptr %1787, i64 %index
  %1793 = getelementptr inbounds i8, ptr %1792, i64 16
  %wide.load = load <4 x i32>, ptr %1792, align 4, !tbaa !125
  %wide.load3380 = load <4 x i32>, ptr %1793, align 4, !tbaa !125
  %1794 = icmp uge <4 x i32> %wide.load, %broadcast.splat
  %1795 = icmp uge <4 x i32> %wide.load3380, %broadcast.splat
  %1796 = or <4 x i1> %vec.phi, %1794
  %1797 = or <4 x i1> %vec.phi3379, %1795
  %index.next = add nuw i64 %index, 8
  %1798 = icmp eq i64 %index.next, %n.vec
  br i1 %1798, label %middle.block, label %vector.body, !llvm.loop !198

middle.block:                                     ; preds = %vector.body
  %bin.rdx = or <4 x i1> %1797, %1796
  %bin.rdx.fr = freeze <4 x i1> %bin.rdx
  %1799 = bitcast <4 x i1> %bin.rdx.fr to i4
  %.not3406 = icmp ne i4 %1799, 0
  %rdx.select = zext i1 %.not3406 to i8
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count3302
  br i1 %cmp.n, label %._crit_edge3241, label %scalar.ph.preheader

._crit_edge3241:                                  ; preds = %scalar.ph, %middle.block
  %.02351..lcssa = phi i8 [ %rdx.select, %middle.block ], [ %.02351., %scalar.ph ]
  %1800 = trunc nuw i8 %.02351..lcssa to i1
  br i1 %1800, label %1804, label %._crit_edge3241.thread

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv3300 = phi i64 [ %indvars.iv.next3301, %scalar.ph ], [ %indvars.iv3300.ph, %scalar.ph.preheader ]
  %.023513238 = phi i8 [ %.02351., %scalar.ph ], [ %.023513238.ph, %scalar.ph.preheader ]
  %1801 = getelementptr inbounds i32, ptr %1787, i64 %indvars.iv3300
  %1802 = load i32, ptr %1801, align 4, !tbaa !125
  %.not2940 = icmp ult i32 %1802, %1791
  %.02351. = select i1 %.not2940, i8 %.023513238, i8 1
  %indvars.iv.next3301 = add nuw nsw i64 %indvars.iv3300, 1
  %exitcond3303.not = icmp eq i64 %indvars.iv.next3301, %wide.trip.count3302
  br i1 %exitcond3303.not, label %._crit_edge3241, label %scalar.ph, !llvm.loop !199

._crit_edge3241.thread:                           ; preds = %1779, %._crit_edge3241
  %.02351.lcssa3362 = phi i8 [ %.02351..lcssa, %._crit_edge3241 ], [ 0, %1779 ]
  %1803 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler23has_extended_decorationEjNS_19ExtendedDecorationsE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1784, i32 noundef 2)
  %spec.select3083 = select i1 %1803, i8 1, i8 %.02351.lcssa3362
  br label %1804

1804:                                             ; preds = %._crit_edge3241.thread, %._crit_edge3241
  %.22353 = phi i8 [ %.02351..lcssa, %._crit_edge3241 ], [ %spec.select3083, %._crit_edge3241.thread ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %108) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %108) #8
  %1805 = trunc nuw i8 %.22353 to i1
  br i1 %1805, label %1806, label %1872

1806:                                             ; preds = %1804
  %1807 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1784)
          to label %1808 unwind label %1823

1808:                                             ; preds = %1806
  br i1 %1807, label %1809, label %1811

1809:                                             ; preds = %1808
  %1810 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1786)
          to label %1811 unwind label %1823

1811:                                             ; preds = %1809, %1808
  %1812 = phi i1 [ false, %1808 ], [ %1810, %1809 ]
  %1813 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL30should_suppress_usage_trackingEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1784)
          to label %1814 unwind label %1823

1814:                                             ; preds = %1811
  br i1 %1813, label %1815, label %1817

1815:                                             ; preds = %1814
  %1816 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL30should_suppress_usage_trackingEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1786)
          to label %1817 unwind label %1823

1817:                                             ; preds = %1815, %1814
  %1818 = phi i1 [ false, %1814 ], [ %1816, %1815 ]
  call void @llvm.lifetime.start.p0(i64 280, ptr nonnull %109) #8
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEC2Ev(ptr noundef nonnull align 8 dereferenceable(280) %109) #8
  br i1 %.not3288, label %._crit_edge3248, label %.lr.ph3247

.lr.ph3247:                                       ; preds = %1817
  %1819 = getelementptr inbounds i8, ptr %1789, i64 24
  %1820 = getelementptr inbounds i8, ptr %1789, i64 276
  %1821 = getelementptr inbounds i8, ptr %110, i64 12
  %wide.trip.count3312 = zext i32 %1788 to i64
  br label %1825

._crit_edge3248:                                  ; preds = %1853, %1817
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %115) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %116) #8
  %1822 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1780)
          to label %1854 unwind label %1860

1823:                                             ; preds = %1904, %1902, %._crit_edge3244.thread, %1899, %1879, %1874, %1872, %1815, %1811, %1809, %1806
  %1824 = landingpad { ptr, i32 }
          cleanup
  br label %1906

1825:                                             ; preds = %.lr.ph3247, %1853
  %indvars.iv3309 = phi i64 [ 0, %.lr.ph3247 ], [ %indvars.iv.next3310, %1853 ]
  %1826 = getelementptr inbounds i32, ptr %1787, i64 %indvars.iv3309
  %1827 = load i32, ptr %1826, align 4, !tbaa !125
  %1828 = icmp eq i32 %1827, -1
  br i1 %1828, label %1829, label %1842

1829:                                             ; preds = %1825
  call void @llvm.lifetime.start.p0(i64 360, ptr nonnull %110) #8
  invoke void @_ZN11spirv_cross12SPIRConstantC2Ev(ptr noundef nonnull align 8 dereferenceable(360) %110)
          to label %1830 unwind label %1835

1830:                                             ; preds = %1829
  %1831 = load i32, ptr %1820, align 4, !tbaa !125
  store i32 %1831, ptr %1821, align 4, !tbaa !125
  %1832 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1820)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %111) #8
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %111, i32 noundef 0)
  %1833 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %111)
  %.not2934 = icmp eq i32 %1832, %1833
  br i1 %.not2934, label %1834, label %1837

1834:                                             ; preds = %1830
  call void @__assert_fail(ptr noundef nonnull @.str.1385, ptr noundef nonnull @.str.11, i32 noundef 12958, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE) #9
  unreachable

1835:                                             ; preds = %1829
  %1836 = landingpad { ptr, i32 }
          cleanup
  br label %1841

1837:                                             ; preds = %1830
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %111) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %112) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL19constant_expressionB5cxx11ERKNS_12SPIRConstantEbb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %112, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(360) %110, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %1838 unwind label %1839

1838:                                             ; preds = %1837
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %109, ptr noundef nonnull align 8 dereferenceable(32) %112) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %112) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %112) #8
  call void @_ZN11spirv_cross12SPIRConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(360) %110) #8
  call void @llvm.lifetime.end.p0(i64 360, ptr nonnull %110) #8
  br label %1853

1839:                                             ; preds = %1837
  %1840 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %112) #8
  call void @_ZN11spirv_cross12SPIRConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(360) %110) #8
  br label %1841

1841:                                             ; preds = %1839, %1835
  %.pn2935 = phi { ptr, i32 } [ %1840, %1839 ], [ %1836, %1835 ]
  call void @llvm.lifetime.end.p0(i64 360, ptr nonnull %110) #8
  br label %1871

1842:                                             ; preds = %1825
  %1843 = load i32, ptr %1819, align 8, !tbaa !126
  %.not2933 = icmp ult i32 %1827, %1843
  br i1 %.not2933, label %1849, label %1844

1844:                                             ; preds = %1842
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %113) #8
  %1845 = sub i32 %1827, %1843
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_extract_component_expressionB5cxx11Ejj(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 %1786, i32 noundef %1845)
          to label %1846 unwind label %1847

1846:                                             ; preds = %1844
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %109, ptr noundef nonnull align 8 dereferenceable(32) %113) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %113) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %113) #8
  br label %1853

1847:                                             ; preds = %1844
  %1848 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %113) #8
  br label %1871

1849:                                             ; preds = %1842
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %114) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_extract_component_expressionB5cxx11Ejj(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 %1784, i32 noundef %1827)
          to label %1850 unwind label %1851

1850:                                             ; preds = %1849
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %109, ptr noundef nonnull align 8 dereferenceable(32) %114) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %114) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %114) #8
  br label %1853

1851:                                             ; preds = %1849
  %1852 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %114) #8
  br label %1871

1853:                                             ; preds = %1838, %1850, %1846
  %indvars.iv.next3310 = add nuw nsw i64 %indvars.iv3309, 1
  %exitcond3313.not = icmp eq i64 %indvars.iv.next3310, %wide.trip.count3312
  br i1 %exitcond3313.not, label %._crit_edge3248, label %1825, !llvm.loop !200

1854:                                             ; preds = %._crit_edge3248
  invoke void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %116, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %1822)
          to label %1855 unwind label %1860

1855:                                             ; preds = %1854
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %117) #8
  invoke void @_ZN11spirv_cross5mergeERKNS_11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEEPKc(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %117, ptr noundef nonnull align 8 dereferenceable(280) %109, ptr noundef nonnull @.str.177)
          to label %1856 unwind label %1862

1856:                                             ; preds = %1855
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS6_S9_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %115, ptr noundef nonnull align 8 dereferenceable(32) %116, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %117, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %1857 unwind label %1864

1857:                                             ; preds = %1856
  %1858 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %108, ptr noundef nonnull align 8 dereferenceable(32) %115)
          to label %1859 unwind label %1866

1859:                                             ; preds = %1857
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %115) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %117) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %117) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %116) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %116) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %115) #8
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(280) %109) #8
  call void @llvm.lifetime.end.p0(i64 280, ptr nonnull %109) #8
  br label %._crit_edge3244.thread

1860:                                             ; preds = %1854, %._crit_edge3248
  %1861 = landingpad { ptr, i32 }
          cleanup
  br label %1870

1862:                                             ; preds = %1855
  %1863 = landingpad { ptr, i32 }
          cleanup
  br label %1869

1864:                                             ; preds = %1856
  %1865 = landingpad { ptr, i32 }
          cleanup
  br label %1868

1866:                                             ; preds = %1857
  %1867 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %115) #8
  br label %1868

1868:                                             ; preds = %1866, %1864
  %.pn2928 = phi { ptr, i32 } [ %1867, %1866 ], [ %1865, %1864 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %117) #8
  br label %1869

1869:                                             ; preds = %1868, %1862
  %.pn2928.pn = phi { ptr, i32 } [ %.pn2928, %1868 ], [ %1863, %1862 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %117) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %116) #8
  br label %1870

1870:                                             ; preds = %1869, %1860
  %.pn2928.pn.pn = phi { ptr, i32 } [ %.pn2928.pn, %1869 ], [ %1861, %1860 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %116) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %115) #8
  br label %1871

1871:                                             ; preds = %1841, %1847, %1851, %1870
  %.pn2935.pn.pn = phi { ptr, i32 } [ %.pn2928.pn.pn, %1870 ], [ %.pn2935, %1841 ], [ %1848, %1847 ], [ %1852, %1851 ]
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(280) %109) #8
  call void @llvm.lifetime.end.p0(i64 280, ptr nonnull %109) #8
  br label %1906

1872:                                             ; preds = %1804
  %1873 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1784)
          to label %1874 unwind label %1823

1874:                                             ; preds = %1872
  %1875 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL30should_suppress_usage_trackingEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1784)
          to label %1876 unwind label %1823

1876:                                             ; preds = %1874
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %118) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_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 %1784, i1 noundef zeroext true)
          to label %1877 unwind label %1885

1877:                                             ; preds = %1876
  %1878 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %108, ptr noundef nonnull align 8 dereferenceable(32) %118)
          to label %1879 unwind label %1887

1879:                                             ; preds = %1877
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %118) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %118) #8
  %1880 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %108, ptr noundef nonnull @.str.719)
          to label %.preheader3227 unwind label %1823

.preheader3227:                                   ; preds = %1879
  br i1 %.not3288, label %._crit_edge3244.thread, label %.lr.ph3243.preheader

.lr.ph3243.preheader:                             ; preds = %.preheader3227
  %wide.trip.count3307 = zext i32 %1788 to i64
  br label %.lr.ph3243

._crit_edge3244:                                  ; preds = %1896
  %1881 = getelementptr inbounds i8, ptr %0, i64 8380
  %1882 = load i8, ptr %1881, align 4, !tbaa !201, !range !123, !noundef !124
  %1883 = trunc nuw i8 %1882 to i1
  %1884 = icmp ne i32 %1788, 1
  %or.cond10 = select i1 %1883, i1 %1884, i1 false
  br i1 %or.cond10, label %1899, label %._crit_edge3244.thread

1885:                                             ; preds = %1876
  %1886 = landingpad { ptr, i32 }
          cleanup
  br label %1889

1887:                                             ; preds = %1877
  %1888 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %118) #8
  br label %1889

1889:                                             ; preds = %1887, %1885
  %.pn2925 = phi { ptr, i32 } [ %1888, %1887 ], [ %1886, %1885 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %118) #8
  br label %1906

.lr.ph3243:                                       ; preds = %.lr.ph3243.preheader, %1896
  %indvars.iv3304 = phi i64 [ 0, %.lr.ph3243.preheader ], [ %indvars.iv.next3305, %1896 ]
  %1890 = getelementptr inbounds i32, ptr %1787, i64 %indvars.iv3304
  %1891 = load i32, ptr %1890, align 4, !tbaa !125
  %.not2927 = icmp eq i32 %1891, -1
  br i1 %.not2927, label %1892, label %1893

1892:                                             ; preds = %.lr.ph3243
  call void @__assert_fail(ptr noundef nonnull @.str.1386, ptr noundef nonnull @.str.11, i32 noundef 12979, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE) #9
  unreachable

1893:                                             ; preds = %.lr.ph3243
  %1894 = call noundef ptr @_ZN11spirv_cross12CompilerGLSL16index_to_swizzleEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1891)
  %1895 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %108, ptr noundef %1894)
          to label %1896 unwind label %1897

1896:                                             ; preds = %1893
  %indvars.iv.next3305 = add nuw nsw i64 %indvars.iv3304, 1
  %exitcond3308.not = icmp eq i64 %indvars.iv.next3305, %wide.trip.count3307
  br i1 %exitcond3308.not, label %._crit_edge3244, label %.lr.ph3243, !llvm.loop !202

1897:                                             ; preds = %1893
  %1898 = landingpad { ptr, i32 }
          cleanup
  br label %1906

1899:                                             ; preds = %._crit_edge3244
  %1900 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %108, ptr noundef nonnull @.str.720)
          to label %._crit_edge3244.thread unwind label %1823

._crit_edge3244.thread:                           ; preds = %.preheader3227, %._crit_edge3244, %1899, %1859
  %.02356.in = phi i1 [ %1818, %1859 ], [ %1875, %1899 ], [ %1875, %._crit_edge3244 ], [ %1875, %.preheader3227 ]
  %.02355.in = phi i1 [ %1812, %1859 ], [ %1873, %1899 ], [ %1873, %._crit_edge3244 ], [ %1873, %.preheader3227 ]
  %1901 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1780, i32 noundef %1782, ptr noundef nonnull align 8 dereferenceable(32) %108, i1 noundef zeroext %.02355.in, i1 noundef zeroext %.02356.in)
          to label %1902 unwind label %1823

1902:                                             ; preds = %._crit_edge3244.thread
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1782, i32 noundef %1784)
          to label %1903 unwind label %1823

1903:                                             ; preds = %1902
  %.not2932 = icmp eq i32 %1784, %1786
  br i1 %.not2932, label %1905, label %1904

1904:                                             ; preds = %1903
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1782, i32 noundef %1786)
          to label %1905 unwind label %1823

1905:                                             ; preds = %1904, %1903
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %108) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %108) #8
  br label %.thread3374

1906:                                             ; preds = %1897, %1889, %1871, %1823
  %.pn2935.pn.pn.pn = phi { ptr, i32 } [ %.pn2935.pn.pn, %1871 ], [ %1824, %1823 ], [ %1898, %1897 ], [ %.pn2925, %1889 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %108) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %108) #8
  br label %6424

1907:                                             ; preds = %566
  %1908 = tail call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
  %1909 = load i32, ptr %545, align 4, !tbaa !125
  br i1 %1908, label %1915, label %1910

1910:                                             ; preds = %1907
  %1911 = getelementptr inbounds i8, ptr %545, i64 4
  %1912 = load i32, ptr %1911, align 4, !tbaa !125
  %1913 = getelementptr inbounds i8, ptr %545, i64 8
  %1914 = load i32, ptr %1913, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1909, i32 noundef %1912, i32 noundef %1914, ptr noundef nonnull @.str.421)
  br label %.thread3374

1915:                                             ; preds = %1907
  %1916 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1909)
  %1917 = getelementptr inbounds i8, ptr %1916, i64 24
  %1918 = load i32, ptr %1917, align 8, !tbaa !126
  %1919 = icmp ugt i32 %1918, 1
  %1920 = load i32, ptr %545, align 4, !tbaa !125
  %1921 = getelementptr inbounds i8, ptr %545, i64 4
  %1922 = load i32, ptr %1921, align 4, !tbaa !125
  %1923 = getelementptr inbounds i8, ptr %545, i64 8
  %1924 = load i32, ptr %1923, align 4, !tbaa !125
  br i1 %1919, label %1925, label %1926

1925:                                             ; preds = %1915
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1920, i32 noundef %1922, i32 noundef %1924, i32 noundef %1924, ptr noundef nonnull @.str.446)
  br label %.thread3374

1926:                                             ; preds = %1915
  tail call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1920, i32 noundef %1922, i32 noundef %1924, i32 noundef %1924, ptr noundef nonnull @.str.970)
  br label %.thread3374

1927:                                             ; preds = %566
  %1928 = tail call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
  %1929 = load i32, ptr %545, align 4, !tbaa !125
  %1930 = getelementptr inbounds i8, ptr %545, i64 4
  %1931 = load i32, ptr %1930, align 4, !tbaa !125
  %1932 = getelementptr inbounds i8, ptr %545, i64 8
  %1933 = load i32, ptr %1932, align 4, !tbaa !125
  br i1 %1928, label %1935, label %1934

1934:                                             ; preds = %1927
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1929, i32 noundef %1931, i32 noundef %1933, ptr noundef nonnull @.str.420)
  br label %.thread3374

1935:                                             ; preds = %1927
  %1936 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1929)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %119) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %119) #8
  %1937 = getelementptr inbounds i8, ptr %1936, i64 24
  %1938 = load i32, ptr %1937, align 8, !tbaa !126
  %1939 = icmp ugt i32 %1938, 1
  br i1 %1939, label %1940, label %1973

1940:                                             ; preds = %1935
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %120) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %120, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %1936)
          to label %1941 unwind label %1946

1941:                                             ; preds = %1940
  %1942 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %119, ptr noundef nonnull align 8 dereferenceable(32) %120) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %120) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %120) #8
  %1943 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEc(ptr noundef nonnull align 8 dereferenceable(32) %119, i8 noundef signext 40)
          to label %.preheader3228 unwind label %1948

.preheader3228:                                   ; preds = %1941
  %1944 = load i32, ptr %1937, align 8, !tbaa !126
  %.not3287 = icmp eq i32 %1944, 0
  br i1 %.not3287, label %._crit_edge3236, label %.lr.ph3235

._crit_edge3236:                                  ; preds = %1968, %.preheader3228
  %1945 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEc(ptr noundef nonnull align 8 dereferenceable(32) %119, i8 noundef signext 41)
          to label %1990 unwind label %1948

1946:                                             ; preds = %1940
  %1947 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %120) #8
  br label %1996

1948:                                             ; preds = %1994, %1992, %1990, %._crit_edge3236, %1941
  %1949 = landingpad { ptr, i32 }
          cleanup
  br label %1996

.lr.ph3235:                                       ; preds = %.preheader3228, %1968
  %.023593234 = phi i32 [ %1954, %1968 ], [ 0, %.preheader3228 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %121) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_extract_component_expressionB5cxx11Ejj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %121, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1933, i32 noundef %.023593234)
          to label %1950 unwind label %1959

1950:                                             ; preds = %.lr.ph3235
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %122) #8
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA18_KcS7_RA5_S8_S7_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %122, ptr noundef nonnull align 8 dereferenceable(32) %121, ptr noundef nonnull align 1 dereferenceable(18) @.str.1387, ptr noundef nonnull align 8 dereferenceable(32) %121, ptr noundef nonnull align 1 dereferenceable(5) @.str.1388, ptr noundef nonnull align 8 dereferenceable(32) %121)
          to label %1951 unwind label %1961

1951:                                             ; preds = %1950
  %1952 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %119, ptr noundef nonnull align 8 dereferenceable(32) %122)
          to label %1953 unwind label %1963

1953:                                             ; preds = %1951
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %122) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %122) #8
  %1954 = add nuw i32 %.023593234, 1
  %1955 = load i32, ptr %1937, align 8, !tbaa !126
  %1956 = icmp ult i32 %1954, %1955
  br i1 %1956, label %1957, label %1968

1957:                                             ; preds = %1953
  %1958 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %119, ptr noundef nonnull @.str.177)
          to label %1968 unwind label %1966

1959:                                             ; preds = %.lr.ph3235
  %1960 = landingpad { ptr, i32 }
          cleanup
  br label %1972

1961:                                             ; preds = %1950
  %1962 = landingpad { ptr, i32 }
          cleanup
  br label %1965

1963:                                             ; preds = %1951
  %1964 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %122) #8
  br label %1965

1965:                                             ; preds = %1963, %1961
  %.pn2919 = phi { ptr, i32 } [ %1964, %1963 ], [ %1962, %1961 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %122) #8
  br label %1971

1966:                                             ; preds = %1957
  %1967 = landingpad { ptr, i32 }
          cleanup
  br label %1971

1968:                                             ; preds = %1957, %1953
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %121) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %121) #8
  %1969 = load i32, ptr %1937, align 8, !tbaa !126
  %1970 = icmp ult i32 %1954, %1969
  br i1 %1970, label %.lr.ph3235, label %._crit_edge3236, !llvm.loop !203

1971:                                             ; preds = %1966, %1965
  %.pn2921 = phi { ptr, i32 } [ %1967, %1966 ], [ %.pn2919, %1965 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %121) #8
  br label %1972

1972:                                             ; preds = %1971, %1959
  %.pn2921.pn = phi { ptr, i32 } [ %.pn2921, %1971 ], [ %1960, %1959 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %121) #8
  br label %1996

1973:                                             ; preds = %1935
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %123) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_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 %1933, i1 noundef zeroext true)
          to label %1974 unwind label %1979

1974:                                             ; preds = %1973
  invoke void @_ZN11spirv_cross12CompilerGLSL21track_expression_readEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1933)
          to label %1975 unwind label %1981

1975:                                             ; preds = %1974
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %124) #8
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA18_KcS7_RA5_S8_S7_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %124, ptr noundef nonnull align 8 dereferenceable(32) %123, ptr noundef nonnull align 1 dereferenceable(18) @.str.1387, ptr noundef nonnull align 8 dereferenceable(32) %123, ptr noundef nonnull align 1 dereferenceable(5) @.str.1388, ptr noundef nonnull align 8 dereferenceable(32) %123)
          to label %1976 unwind label %1983

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

1978:                                             ; preds = %1976
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %124) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %124) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %123) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %123) #8
  br label %1990

1979:                                             ; preds = %1973
  %1980 = landingpad { ptr, i32 }
          cleanup
  br label %1989

1981:                                             ; preds = %1974
  %1982 = landingpad { ptr, i32 }
          cleanup
  br label %1988

1983:                                             ; preds = %1975
  %1984 = landingpad { ptr, i32 }
          cleanup
  br label %1987

1985:                                             ; preds = %1976
  %1986 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %124) #8
  br label %1987

1987:                                             ; preds = %1985, %1983
  %.pn2915 = phi { ptr, i32 } [ %1986, %1985 ], [ %1984, %1983 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %124) #8
  br label %1988

1988:                                             ; preds = %1987, %1981
  %.pn2915.pn = phi { ptr, i32 } [ %.pn2915, %1987 ], [ %1982, %1981 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %123) #8
  br label %1989

1989:                                             ; preds = %1988, %1979
  %.pn2915.pn.pn = phi { ptr, i32 } [ %.pn2915.pn, %1988 ], [ %1980, %1979 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %123) #8
  br label %1996

1990:                                             ; preds = %._crit_edge3236, %1978
  %1991 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1933)
          to label %1992 unwind label %1948

1992:                                             ; preds = %1990
  %1993 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1929, i32 noundef %1931, ptr noundef nonnull align 8 dereferenceable(32) %119, i1 noundef zeroext %1991, i1 noundef zeroext false)
          to label %1994 unwind label %1948

1994:                                             ; preds = %1992
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1931, i32 noundef %1933)
          to label %1995 unwind label %1948

1995:                                             ; preds = %1994
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %119) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %119) #8
  br label %.thread3374

1996:                                             ; preds = %1989, %1972, %1948, %1946
  %.pn2921.pn.pn = phi { ptr, i32 } [ %.pn2921.pn, %1972 ], [ %1949, %1948 ], [ %1947, %1946 ], [ %.pn2915.pn.pn, %1989 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %119) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %119) #8
  br label %6424

1997:                                             ; preds = %566
  br i1 %567, label %._crit_edge3352, label %1998

._crit_edge3352:                                  ; preds = %1997
  %.pre3353 = load i32, ptr %545, align 4, !tbaa !125
  br label %2003

1998:                                             ; preds = %1997
  %1999 = getelementptr inbounds i8, ptr %545, i64 8
  %2000 = load i32, ptr %1999, align 4, !tbaa !125
  %2001 = tail call noundef i32 @_ZNK11spirv_cross8Compiler18expression_type_idEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2000)
  %2002 = load i32, ptr %545, align 4, !tbaa !125
  %.not2914 = icmp eq i32 %2001, %2002
  br i1 %.not2914, label %2009, label %2003

2003:                                             ; preds = %._crit_edge3352, %1998
  %2004 = phi i32 [ %.pre3353, %._crit_edge3352 ], [ %2002, %1998 ]
  %2005 = getelementptr inbounds i8, ptr %545, i64 4
  %2006 = load i32, ptr %2005, align 4, !tbaa !125
  %2007 = getelementptr inbounds i8, ptr %545, i64 8
  %2008 = load i32, ptr %2007, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_op_castEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2004, i32 noundef %2006, i32 noundef %2008, ptr noundef nonnull @.str.955)
  br label %.thread3374

2009:                                             ; preds = %1998
  %2010 = getelementptr inbounds i8, ptr %545, i64 4
  %2011 = load i32, ptr %2010, align 4, !tbaa !125
  %2012 = load i32, ptr %1999, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL13emit_unary_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2001, i32 noundef %2011, i32 noundef %2012, ptr noundef nonnull @.str.955)
  br label %.thread3374

2013:                                             ; preds = %566
  %2014 = load i32, ptr %545, align 4, !tbaa !125
  %2015 = getelementptr inbounds i8, ptr %545, i64 4
  %2016 = load i32, ptr %2015, align 4, !tbaa !125
  %2017 = getelementptr inbounds i8, ptr %545, i64 8
  %2018 = load i32, ptr %2017, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL13emit_unary_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2014, i32 noundef %2016, i32 noundef %2018, ptr noundef nonnull @.str.955)
  br label %.thread3374

2019:                                             ; preds = %566
  %2020 = load i32, ptr %545, align 4, !tbaa !125
  %2021 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2020)
  %2022 = getelementptr inbounds i8, ptr %2021, i64 16
  %2023 = load i32, ptr %2022, align 8, !tbaa !145
  %2024 = load i32, ptr %545, align 4, !tbaa !125
  %2025 = getelementptr inbounds i8, ptr %545, i64 4
  %2026 = load i32, ptr %2025, align 4, !tbaa !125
  %2027 = getelementptr inbounds i8, ptr %545, i64 8
  %2028 = load i32, ptr %2027, align 4, !tbaa !125
  %2029 = getelementptr inbounds i8, ptr %545, i64 12
  %2030 = load i32, ptr %2029, align 4, !tbaa !125
  %2031 = tail call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef 128)
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2024, i32 noundef %2026, i32 noundef %2028, i32 noundef %2030, ptr noundef nonnull @.str.957, i32 noundef %2023, i1 noundef zeroext %2031, i1 noundef zeroext %567)
  br label %.thread3374

2032:                                             ; preds = %566
  %2033 = load i32, ptr %545, align 4, !tbaa !125
  %2034 = getelementptr inbounds i8, ptr %545, i64 4
  %2035 = load i32, ptr %2034, align 4, !tbaa !125
  %2036 = getelementptr inbounds i8, ptr %545, i64 8
  %2037 = load i32, ptr %2036, align 4, !tbaa !125
  %2038 = getelementptr inbounds i8, ptr %545, i64 12
  %2039 = load i32, ptr %2038, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2033, i32 noundef %2035, i32 noundef %2037, i32 noundef %2039, ptr noundef nonnull @.str.957)
  br label %.thread3374

2040:                                             ; preds = %566
  %2041 = load i32, ptr %545, align 4, !tbaa !125
  %2042 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2041)
  %2043 = getelementptr inbounds i8, ptr %2042, i64 16
  %2044 = load i32, ptr %2043, align 8, !tbaa !145
  %2045 = load i32, ptr %545, align 4, !tbaa !125
  %2046 = getelementptr inbounds i8, ptr %545, i64 4
  %2047 = load i32, ptr %2046, align 4, !tbaa !125
  %2048 = getelementptr inbounds i8, ptr %545, i64 8
  %2049 = load i32, ptr %2048, align 4, !tbaa !125
  %2050 = getelementptr inbounds i8, ptr %545, i64 12
  %2051 = load i32, ptr %2050, align 4, !tbaa !125
  %2052 = tail call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef 130)
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2045, i32 noundef %2047, i32 noundef %2049, i32 noundef %2051, ptr noundef nonnull @.str.955, i32 noundef %2044, i1 noundef zeroext %2052, i1 noundef zeroext %567)
  br label %.thread3374

2053:                                             ; preds = %566
  %2054 = load i32, ptr %545, align 4, !tbaa !125
  %2055 = getelementptr inbounds i8, ptr %545, i64 4
  %2056 = load i32, ptr %2055, align 4, !tbaa !125
  %2057 = getelementptr inbounds i8, ptr %545, i64 8
  %2058 = load i32, ptr %2057, align 4, !tbaa !125
  %2059 = getelementptr inbounds i8, ptr %545, i64 12
  %2060 = load i32, ptr %2059, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2054, i32 noundef %2056, i32 noundef %2058, i32 noundef %2060, ptr noundef nonnull @.str.955)
  br label %.thread3374

2061:                                             ; preds = %566
  %2062 = load i32, ptr %545, align 4, !tbaa !125
  %2063 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2062)
  %2064 = getelementptr inbounds i8, ptr %2063, i64 16
  %2065 = load i32, ptr %2064, align 8, !tbaa !145
  %2066 = load i32, ptr %545, align 4, !tbaa !125
  %2067 = getelementptr inbounds i8, ptr %545, i64 4
  %2068 = load i32, ptr %2067, align 4, !tbaa !125
  %2069 = getelementptr inbounds i8, ptr %545, i64 8
  %2070 = load i32, ptr %2069, align 4, !tbaa !125
  %2071 = getelementptr inbounds i8, ptr %545, i64 12
  %2072 = load i32, ptr %2071, align 4, !tbaa !125
  %2073 = tail call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef 132)
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2066, i32 noundef %2068, i32 noundef %2070, i32 noundef %2072, ptr noundef nonnull @.str.958, i32 noundef %2065, i1 noundef zeroext %2073, i1 noundef zeroext %567)
  br label %.thread3374

2074:                                             ; preds = %566, %566
  %2075 = icmp eq i32 %568, 145
  %2076 = select i1 %2075, i64 2, i64 3
  %2077 = getelementptr inbounds i32, ptr %545, i64 %2076
  %2078 = load i32, ptr %2077, align 4, !tbaa !125
  %2079 = tail call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_14SPIRExpressionEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2078)
  %.not2903 = icmp eq ptr %2079, null
  br i1 %.not2903, label %2153, label %2080

2080:                                             ; preds = %2074
  %2081 = getelementptr inbounds i8, ptr %2079, i64 57
  %2082 = load i8, ptr %2081, align 1, !tbaa !140, !range !123, !noundef !124
  %2083 = trunc nuw i8 %2082 to i1
  br i1 %2083, label %2084, label %2153

2084:                                             ; preds = %2080
  store i8 0, ptr %2081, align 1, !tbaa !140
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %125) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %125) #8
  br i1 %2075, label %2085, label %2106

2085:                                             ; preds = %2084
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %126) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %127) #8
  %2086 = getelementptr inbounds i8, ptr %545, i64 12
  %2087 = load i32, ptr %2086, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %127, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2087, i1 noundef zeroext true)
          to label %2088 unwind label %2095

2088:                                             ; preds = %2085
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %128) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %129) #8
  %2089 = getelementptr inbounds i8, ptr %545, i64 8
  %2090 = load i32, ptr %2089, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL39to_unpacked_row_major_matrix_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %129, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2090)
          to label %2091 unwind label %2097

2091:                                             ; preds = %2088
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %128, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %129)
          to label %2092 unwind label %2099

2092:                                             ; preds = %2091
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS6_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %126, ptr noundef nonnull align 8 dereferenceable(32) %127, ptr noundef nonnull align 1 dereferenceable(4) @.str.976, ptr noundef nonnull align 8 dereferenceable(32) %128)
          to label %2093 unwind label %2101

2093:                                             ; preds = %2092
  %2094 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %125, ptr noundef nonnull align 8 dereferenceable(32) %126) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %126) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %128) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %129) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %129) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %128) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %127) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %127) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %126) #8
  br label %2127

2095:                                             ; preds = %2085
  %2096 = landingpad { ptr, i32 }
          cleanup
  br label %2105

2097:                                             ; preds = %2088
  %2098 = landingpad { ptr, i32 }
          cleanup
  br label %2104

2099:                                             ; preds = %2091
  %2100 = landingpad { ptr, i32 }
          cleanup
  br label %2103

2101:                                             ; preds = %2092
  %2102 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %128) #8
  br label %2103

2103:                                             ; preds = %2101, %2099
  %.pn2908 = phi { ptr, i32 } [ %2102, %2101 ], [ %2100, %2099 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %129) #8
  br label %2104

2104:                                             ; preds = %2103, %2097
  %.pn2908.pn = phi { ptr, i32 } [ %.pn2908, %2103 ], [ %2098, %2097 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %129) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %128) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %127) #8
  br label %2105

2105:                                             ; preds = %2104, %2095
  %.pn2908.pn.pn = phi { ptr, i32 } [ %.pn2908.pn, %2104 ], [ %2096, %2095 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %127) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %126) #8
  br label %2152

2106:                                             ; preds = %2084
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %130) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %131) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %132) #8
  %2107 = getelementptr inbounds i8, ptr %545, i64 12
  %2108 = load i32, ptr %2107, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL39to_unpacked_row_major_matrix_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %132, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2108)
          to label %2109 unwind label %2116

2109:                                             ; preds = %2106
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %131, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %132)
          to label %2110 unwind label %2118

2110:                                             ; preds = %2109
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %133) #8
  %2111 = getelementptr inbounds i8, ptr %545, i64 8
  %2112 = load i32, ptr %2111, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %133, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2112, i1 noundef zeroext true)
          to label %2113 unwind label %2120

2113:                                             ; preds = %2110
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS6_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %130, ptr noundef nonnull align 8 dereferenceable(32) %131, ptr noundef nonnull align 1 dereferenceable(4) @.str.976, ptr noundef nonnull align 8 dereferenceable(32) %133)
          to label %2114 unwind label %2122

2114:                                             ; preds = %2113
  %2115 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %125, ptr noundef nonnull align 8 dereferenceable(32) %130) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %130) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %133) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %133) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %131) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %132) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %132) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %131) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %130) #8
  br label %2127

2116:                                             ; preds = %2106
  %2117 = landingpad { ptr, i32 }
          cleanup
  br label %2126

2118:                                             ; preds = %2109
  %2119 = landingpad { ptr, i32 }
          cleanup
  br label %2125

2120:                                             ; preds = %2110
  %2121 = landingpad { ptr, i32 }
          cleanup
  br label %2124

2122:                                             ; preds = %2113
  %2123 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %133) #8
  br label %2124

2124:                                             ; preds = %2122, %2120
  %.pn2904 = phi { ptr, i32 } [ %2123, %2122 ], [ %2121, %2120 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %133) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %131) #8
  br label %2125

2125:                                             ; preds = %2124, %2118
  %.pn2904.pn = phi { ptr, i32 } [ %.pn2904, %2124 ], [ %2119, %2118 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %132) #8
  br label %2126

2126:                                             ; preds = %2125, %2116
  %.pn2904.pn.pn = phi { ptr, i32 } [ %.pn2904.pn, %2125 ], [ %2117, %2116 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %132) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %131) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %130) #8
  br label %2152

2127:                                             ; preds = %2114, %2093
  %2128 = getelementptr inbounds i8, ptr %545, i64 8
  %2129 = load i32, ptr %2128, align 4, !tbaa !125
  %2130 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2129)
          to label %2131 unwind label %2150

2131:                                             ; preds = %2127
  br i1 %2130, label %2132, label %2136

2132:                                             ; preds = %2131
  %2133 = getelementptr inbounds i8, ptr %545, i64 12
  %2134 = load i32, ptr %2133, align 4, !tbaa !125
  %2135 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2134)
          to label %2136 unwind label %2150

2136:                                             ; preds = %2132, %2131
  %2137 = phi i1 [ false, %2131 ], [ %2135, %2132 ]
  %2138 = load i32, ptr %545, align 4, !tbaa !125
  %2139 = getelementptr inbounds i8, ptr %545, i64 4
  %2140 = load i32, ptr %2139, align 4, !tbaa !125
  %2141 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2138, i32 noundef %2140, ptr noundef nonnull align 8 dereferenceable(32) %125, i1 noundef zeroext %2137, i1 noundef zeroext false)
          to label %2142 unwind label %2150

2142:                                             ; preds = %2136
  store i8 1, ptr %2081, align 1, !tbaa !140
  %2143 = load i32, ptr %2139, align 4, !tbaa !125
  %2144 = load i32, ptr %2128, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2143, i32 noundef %2144)
          to label %2145 unwind label %2150

2145:                                             ; preds = %2142
  %2146 = load i32, ptr %2139, align 4, !tbaa !125
  %2147 = getelementptr inbounds i8, ptr %545, i64 12
  %2148 = load i32, ptr %2147, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2146, i32 noundef %2148)
          to label %2149 unwind label %2150

2149:                                             ; preds = %2145
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %125) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %125) #8
  br label %.thread3374

2150:                                             ; preds = %2145, %2142, %2136, %2132, %2127
  %2151 = landingpad { ptr, i32 }
          cleanup
  br label %2152

2152:                                             ; preds = %2150, %2126, %2105
  %.pn2912 = phi { ptr, i32 } [ %2151, %2150 ], [ %.pn2908.pn.pn, %2105 ], [ %.pn2904.pn.pn, %2126 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %125) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %125) #8
  br label %6424

2153:                                             ; preds = %2080, %2074
  %2154 = load i32, ptr %545, align 4, !tbaa !125
  %2155 = getelementptr inbounds i8, ptr %545, i64 4
  %2156 = load i32, ptr %2155, align 4, !tbaa !125
  %2157 = getelementptr inbounds i8, ptr %545, i64 8
  %2158 = load i32, ptr %2157, align 4, !tbaa !125
  %2159 = getelementptr inbounds i8, ptr %545, i64 12
  %2160 = load i32, ptr %2159, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2154, i32 noundef %2156, i32 noundef %2158, i32 noundef %2160, ptr noundef nonnull @.str.958)
  br label %.thread3374

2161:                                             ; preds = %566
  %2162 = getelementptr inbounds i8, ptr %545, i64 8
  %2163 = load i32, ptr %2162, align 4, !tbaa !125
  %2164 = tail call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_14SPIRExpressionEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2163)
  %2165 = getelementptr inbounds i8, ptr %545, i64 12
  %2166 = load i32, ptr %2165, align 4, !tbaa !125
  %2167 = tail call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_14SPIRExpressionEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2166)
  %2168 = icmp ne ptr %2164, null
  %2169 = icmp ne ptr %2167, null
  %or.cond12 = and i1 %2168, %2169
  br i1 %or.cond12, label %2170, label %2222

2170:                                             ; preds = %2161
  %2171 = getelementptr inbounds i8, ptr %2164, i64 57
  %2172 = load i8, ptr %2171, align 1, !tbaa !140, !range !123, !noundef !124
  %2173 = trunc nuw i8 %2172 to i1
  br i1 %2173, label %2174, label %2222

2174:                                             ; preds = %2170
  %2175 = getelementptr inbounds i8, ptr %2167, i64 57
  %2176 = load i8, ptr %2175, align 1, !tbaa !140, !range !123, !noundef !124
  %2177 = trunc nuw i8 %2176 to i1
  br i1 %2177, label %2178, label %2222

2178:                                             ; preds = %2174
  store i8 0, ptr %2171, align 1, !tbaa !140
  store i8 0, ptr %2175, align 1, !tbaa !140
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %134) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %135) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %136) #8
  %2179 = load i32, ptr %2165, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL39to_unpacked_row_major_matrix_expressionB5cxx11Ej(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 %2179)
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %135, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %136)
          to label %2180 unwind label %2205

2180:                                             ; preds = %2178
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %137) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %138) #8
  %2181 = load i32, ptr %2162, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL39to_unpacked_row_major_matrix_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %138, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2181)
          to label %2182 unwind label %2207

2182:                                             ; preds = %2180
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %137, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %138)
          to label %2183 unwind label %2209

2183:                                             ; preds = %2182
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS6_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %134, ptr noundef nonnull align 8 dereferenceable(32) %135, ptr noundef nonnull align 1 dereferenceable(4) @.str.976, ptr noundef nonnull align 8 dereferenceable(32) %137)
          to label %2184 unwind label %2211

2184:                                             ; preds = %2183
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %137) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %138) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %138) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %137) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %135) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %136) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %136) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %135) #8
  %2185 = load i32, ptr %2162, align 4, !tbaa !125
  %2186 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2185)
          to label %2187 unwind label %2216

2187:                                             ; preds = %2184
  br i1 %2186, label %2188, label %2191

2188:                                             ; preds = %2187
  %2189 = load i32, ptr %2165, align 4, !tbaa !125
  %2190 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2189)
          to label %2191 unwind label %2216

2191:                                             ; preds = %2188, %2187
  %2192 = phi i1 [ false, %2187 ], [ %2190, %2188 ]
  %2193 = load i32, ptr %545, align 4, !tbaa !125
  %2194 = getelementptr inbounds i8, ptr %545, i64 4
  %2195 = load i32, ptr %2194, align 4, !tbaa !125
  %2196 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2193, i32 noundef %2195, ptr noundef nonnull align 8 dereferenceable(32) %134, i1 noundef zeroext %2192, i1 noundef zeroext false)
          to label %2197 unwind label %2218

2197:                                             ; preds = %2191
  %2198 = getelementptr inbounds i8, ptr %2196, i64 57
  store i8 1, ptr %2198, align 1, !tbaa !140
  store i8 1, ptr %2171, align 1, !tbaa !140
  store i8 1, ptr %2175, align 1, !tbaa !140
  %2199 = load i32, ptr %2194, align 4, !tbaa !125
  %2200 = load i32, ptr %2162, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2199, i32 noundef %2200)
          to label %2201 unwind label %2218

2201:                                             ; preds = %2197
  %2202 = load i32, ptr %2194, align 4, !tbaa !125
  %2203 = load i32, ptr %2165, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2202, i32 noundef %2203)
          to label %2204 unwind label %2218

2204:                                             ; preds = %2201
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %134) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %134) #8
  br label %.thread3374

2205:                                             ; preds = %2178
  %2206 = landingpad { ptr, i32 }
          cleanup
  br label %2215

2207:                                             ; preds = %2180
  %2208 = landingpad { ptr, i32 }
          cleanup
  br label %2214

2209:                                             ; preds = %2182
  %2210 = landingpad { ptr, i32 }
          cleanup
  br label %2213

2211:                                             ; preds = %2183
  %2212 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %137) #8
  br label %2213

2213:                                             ; preds = %2211, %2209
  %.pn2896 = phi { ptr, i32 } [ %2212, %2211 ], [ %2210, %2209 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %138) #8
  br label %2214

2214:                                             ; preds = %2213, %2207
  %.pn2896.pn = phi { ptr, i32 } [ %.pn2896, %2213 ], [ %2208, %2207 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %138) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %137) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %135) #8
  br label %2215

2215:                                             ; preds = %2214, %2205
  %.pn2896.pn.pn = phi { ptr, i32 } [ %.pn2896.pn, %2214 ], [ %2206, %2205 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %136) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %136) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %135) #8
  br label %2221

2216:                                             ; preds = %2188, %2184
  %2217 = landingpad { ptr, i32 }
          cleanup
  br label %2220

2218:                                             ; preds = %2201, %2197, %2191
  %2219 = landingpad { ptr, i32 }
          cleanup
  br label %2220

2220:                                             ; preds = %2218, %2216
  %.pn2900 = phi { ptr, i32 } [ %2219, %2218 ], [ %2217, %2216 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %134) #8
  br label %2221

2221:                                             ; preds = %2220, %2215
  %.pn2900.pn = phi { ptr, i32 } [ %.pn2900, %2220 ], [ %.pn2896.pn.pn, %2215 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %134) #8
  br label %6424

2222:                                             ; preds = %2174, %2170, %2161
  %2223 = load i32, ptr %545, align 4, !tbaa !125
  %2224 = getelementptr inbounds i8, ptr %545, i64 4
  %2225 = load i32, ptr %2224, align 4, !tbaa !125
  %2226 = load i32, ptr %2162, align 4, !tbaa !125
  %2227 = load i32, ptr %2165, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2223, i32 noundef %2225, i32 noundef %2226, i32 noundef %2227, ptr noundef nonnull @.str.958)
  br label %.thread3374

2228:                                             ; preds = %566
  %2229 = getelementptr inbounds i8, ptr %545, i64 8
  %2230 = load i32, ptr %2229, align 4, !tbaa !125
  %2231 = tail call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_14SPIRExpressionEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2230)
  %.not2889 = icmp eq ptr %2231, null
  br i1 %.not2889, label %2277, label %2232

2232:                                             ; preds = %2228
  %2233 = getelementptr inbounds i8, ptr %2231, i64 57
  %2234 = load i8, ptr %2233, align 1, !tbaa !140, !range !123, !noundef !124
  %2235 = trunc nuw i8 %2234 to i1
  br i1 %2235, label %2236, label %2277

2236:                                             ; preds = %2232
  store i8 0, ptr %2233, align 1, !tbaa !140
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %139) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %140) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %141) #8
  %2237 = load i32, ptr %2229, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL39to_unpacked_row_major_matrix_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %141, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2237)
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %140, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %141)
          to label %2238 unwind label %2263

2238:                                             ; preds = %2236
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %142) #8
  %2239 = getelementptr inbounds i8, ptr %545, i64 12
  %2240 = load i32, ptr %2239, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %142, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2240, i1 noundef zeroext true)
          to label %2241 unwind label %2265

2241:                                             ; preds = %2238
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS6_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %139, ptr noundef nonnull align 8 dereferenceable(32) %140, ptr noundef nonnull align 1 dereferenceable(4) @.str.976, ptr noundef nonnull align 8 dereferenceable(32) %142)
          to label %2242 unwind label %2267

2242:                                             ; preds = %2241
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %142) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %142) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %140) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %141) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %141) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %140) #8
  %2243 = load i32, ptr %2229, align 4, !tbaa !125
  %2244 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2243)
          to label %2245 unwind label %2271

2245:                                             ; preds = %2242
  br i1 %2244, label %2246, label %2249

2246:                                             ; preds = %2245
  %2247 = load i32, ptr %2239, align 4, !tbaa !125
  %2248 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2247)
          to label %2249 unwind label %2271

2249:                                             ; preds = %2246, %2245
  %2250 = phi i1 [ false, %2245 ], [ %2248, %2246 ]
  %2251 = load i32, ptr %545, align 4, !tbaa !125
  %2252 = getelementptr inbounds i8, ptr %545, i64 4
  %2253 = load i32, ptr %2252, align 4, !tbaa !125
  %2254 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2251, i32 noundef %2253, ptr noundef nonnull align 8 dereferenceable(32) %139, i1 noundef zeroext %2250, i1 noundef zeroext false)
          to label %2255 unwind label %2273

2255:                                             ; preds = %2249
  %2256 = getelementptr inbounds i8, ptr %2254, i64 57
  store i8 1, ptr %2256, align 1, !tbaa !140
  store i8 1, ptr %2233, align 1, !tbaa !140
  %2257 = load i32, ptr %2252, align 4, !tbaa !125
  %2258 = load i32, ptr %2229, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2257, i32 noundef %2258)
          to label %2259 unwind label %2273

2259:                                             ; preds = %2255
  %2260 = load i32, ptr %2252, align 4, !tbaa !125
  %2261 = load i32, ptr %2239, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2260, i32 noundef %2261)
          to label %2262 unwind label %2273

2262:                                             ; preds = %2259
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %139) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %139) #8
  br label %.thread3374

2263:                                             ; preds = %2236
  %2264 = landingpad { ptr, i32 }
          cleanup
  br label %2270

2265:                                             ; preds = %2238
  %2266 = landingpad { ptr, i32 }
          cleanup
  br label %2269

2267:                                             ; preds = %2241
  %2268 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %142) #8
  br label %2269

2269:                                             ; preds = %2267, %2265
  %.pn2890 = phi { ptr, i32 } [ %2268, %2267 ], [ %2266, %2265 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %142) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %140) #8
  br label %2270

2270:                                             ; preds = %2269, %2263
  %.pn2890.pn = phi { ptr, i32 } [ %.pn2890, %2269 ], [ %2264, %2263 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %141) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %141) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %140) #8
  br label %2276

2271:                                             ; preds = %2246, %2242
  %2272 = landingpad { ptr, i32 }
          cleanup
  br label %2275

2273:                                             ; preds = %2259, %2255, %2249
  %2274 = landingpad { ptr, i32 }
          cleanup
  br label %2275

2275:                                             ; preds = %2273, %2271
  %.pn2893 = phi { ptr, i32 } [ %2274, %2273 ], [ %2272, %2271 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %139) #8
  br label %2276

2276:                                             ; preds = %2275, %2270
  %.pn2893.pn = phi { ptr, i32 } [ %.pn2893, %2275 ], [ %.pn2890.pn, %2270 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %139) #8
  br label %6424

2277:                                             ; preds = %2232, %2228
  %2278 = load i32, ptr %545, align 4, !tbaa !125
  %2279 = getelementptr inbounds i8, ptr %545, i64 4
  %2280 = load i32, ptr %2279, align 4, !tbaa !125
  %2281 = load i32, ptr %2229, align 4, !tbaa !125
  %2282 = getelementptr inbounds i8, ptr %545, i64 12
  %2283 = load i32, ptr %2282, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2278, i32 noundef %2280, i32 noundef %2281, i32 noundef %2283, ptr noundef nonnull @.str.958)
  br label %.thread3374

2284:                                             ; preds = %566, %566
  %2285 = load i32, ptr %545, align 4, !tbaa !125
  %2286 = getelementptr inbounds i8, ptr %545, i64 4
  %2287 = load i32, ptr %2286, align 4, !tbaa !125
  %2288 = getelementptr inbounds i8, ptr %545, i64 8
  %2289 = load i32, ptr %2288, align 4, !tbaa !125
  %2290 = getelementptr inbounds i8, ptr %545, i64 12
  %2291 = load i32, ptr %2290, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2285, i32 noundef %2287, i32 noundef %2289, i32 noundef %2291, ptr noundef nonnull @.str.958)
  br label %.thread3374

2292:                                             ; preds = %566
  %2293 = getelementptr inbounds i8, ptr %0, i64 7636
  %2294 = load i32, ptr %2293, align 4, !tbaa !204
  %2295 = icmp ult i32 %2294, 120
  %2296 = load i32, ptr %545, align 4, !tbaa !125
  %2297 = getelementptr inbounds i8, ptr %545, i64 4
  %2298 = load i32, ptr %2297, align 4, !tbaa !125
  %2299 = getelementptr inbounds i8, ptr %545, i64 8
  %2300 = load i32, ptr %2299, align 4, !tbaa !125
  %2301 = getelementptr inbounds i8, ptr %545, i64 12
  %2302 = load i32, ptr %2301, align 4, !tbaa !125
  br i1 %2295, label %2303, label %2351

2303:                                             ; preds = %2292
  %2304 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2296)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %143) #8
  call void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %143, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %2304)
  %2305 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %143, ptr noundef nonnull @.str.718)
          to label %.preheader3229 unwind label %2309

.preheader3229:                                   ; preds = %2303
  %2306 = getelementptr inbounds i8, ptr %2304, i64 28
  %2307 = load i32, ptr %2306, align 4, !tbaa !146
  %.not3286 = icmp eq i32 %2307, 0
  br i1 %.not3286, label %._crit_edge3233, label %.lr.ph3232

._crit_edge3233:                                  ; preds = %2336, %.preheader3229
  %2308 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %143, ptr noundef nonnull @.str.135)
          to label %2339 unwind label %2309

2309:                                             ; preds = %2348, %2347, %2344, %2342, %2339, %._crit_edge3233, %2303
  %2310 = landingpad { ptr, i32 }
          cleanup
  br label %2350

.lr.ph3232:                                       ; preds = %.preheader3229, %2336
  %.023603231 = phi i32 [ %2319, %2336 ], [ 0, %.preheader3229 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %144) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_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 %2300, i1 noundef zeroext true)
          to label %2311 unwind label %2324

2311:                                             ; preds = %.lr.ph3232
  %2312 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %143, ptr noundef nonnull align 8 dereferenceable(32) %144)
          to label %2313 unwind label %2326

2313:                                             ; preds = %2311
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %144) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %144) #8
  %2314 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %143, ptr noundef nonnull @.str.976)
          to label %2315 unwind label %2329

2315:                                             ; preds = %2313
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %145) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_extract_component_expressionB5cxx11Ejj(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 %2302, i32 noundef %.023603231)
          to label %2316 unwind label %2331

2316:                                             ; preds = %2315
  %2317 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %143, ptr noundef nonnull align 8 dereferenceable(32) %145)
          to label %2318 unwind label %2333

2318:                                             ; preds = %2316
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %145) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %145) #8
  %2319 = add nuw i32 %.023603231, 1
  %2320 = load i32, ptr %2306, align 4, !tbaa !146
  %2321 = icmp ult i32 %2319, %2320
  br i1 %2321, label %2322, label %2336

2322:                                             ; preds = %2318
  %2323 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %143, ptr noundef nonnull @.str.177)
          to label %._crit_edge3350 unwind label %2329

._crit_edge3350:                                  ; preds = %2322
  %.pre3351 = load i32, ptr %2306, align 4, !tbaa !146
  br label %2336

2324:                                             ; preds = %.lr.ph3232
  %2325 = landingpad { ptr, i32 }
          cleanup
  br label %2328

2326:                                             ; preds = %2311
  %2327 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %144) #8
  br label %2328

2328:                                             ; preds = %2326, %2324
  %.pn2882 = phi { ptr, i32 } [ %2327, %2326 ], [ %2325, %2324 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %144) #8
  br label %2350

2329:                                             ; preds = %2322, %2313
  %2330 = landingpad { ptr, i32 }
          cleanup
  br label %2350

2331:                                             ; preds = %2315
  %2332 = landingpad { ptr, i32 }
          cleanup
  br label %2335

2333:                                             ; preds = %2316
  %2334 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %145) #8
  br label %2335

2335:                                             ; preds = %2333, %2331
  %.pn2884 = phi { ptr, i32 } [ %2334, %2333 ], [ %2332, %2331 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %145) #8
  br label %2350

2336:                                             ; preds = %._crit_edge3350, %2318
  %2337 = phi i32 [ %.pre3351, %._crit_edge3350 ], [ %2320, %2318 ]
  %2338 = icmp ult i32 %2319, %2337
  br i1 %2338, label %.lr.ph3232, label %._crit_edge3233, !llvm.loop !205

2339:                                             ; preds = %._crit_edge3233
  %2340 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2300)
          to label %2341 unwind label %2309

2341:                                             ; preds = %2339
  br i1 %2340, label %2342, label %2344

2342:                                             ; preds = %2341
  %2343 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2302)
          to label %2344 unwind label %2309

2344:                                             ; preds = %2342, %2341
  %2345 = phi i1 [ false, %2341 ], [ %2343, %2342 ]
  %2346 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2296, i32 noundef %2298, ptr noundef nonnull align 8 dereferenceable(32) %143, i1 noundef zeroext %2345, i1 noundef zeroext false)
          to label %2347 unwind label %2309

2347:                                             ; preds = %2344
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2298, i32 noundef %2300)
          to label %2348 unwind label %2309

2348:                                             ; preds = %2347
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2298, i32 noundef %2302)
          to label %2349 unwind label %2309

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

2350:                                             ; preds = %2328, %2329, %2335, %2309
  %.pn2886.pn = phi { ptr, i32 } [ %2310, %2309 ], [ %2330, %2329 ], [ %.pn2884, %2335 ], [ %.pn2882, %2328 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %143) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %143) #8
  br label %6424

2351:                                             ; preds = %2292
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2296, i32 noundef %2298, i32 noundef %2300, i32 noundef %2302, ptr noundef nonnull @.str.447)
  br label %.thread3374

2352:                                             ; preds = %566
  %2353 = load i32, ptr %545, align 4, !tbaa !125
  %2354 = getelementptr inbounds i8, ptr %545, i64 4
  %2355 = load i32, ptr %2354, align 4, !tbaa !125
  %2356 = getelementptr inbounds i8, ptr %545, i64 8
  %2357 = load i32, ptr %2356, align 4, !tbaa !125
  %2358 = getelementptr inbounds i8, ptr %545, i64 12
  %2359 = load i32, ptr %2358, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2353, i32 noundef %2355, i32 noundef %2357, i32 noundef %2359, ptr noundef nonnull @.str.375)
  br label %.thread3374

2360:                                             ; preds = %566
  %2361 = getelementptr inbounds i8, ptr %0, i64 7636
  %2362 = load i32, ptr %2361, align 4, !tbaa !204
  %2363 = icmp ult i32 %2362, 120
  %2364 = load i32, ptr %545, align 4, !tbaa !125
  %2365 = getelementptr inbounds i8, ptr %545, i64 4
  %2366 = load i32, ptr %2365, align 4, !tbaa !125
  %2367 = getelementptr inbounds i8, ptr %545, i64 8
  %2368 = load i32, ptr %2367, align 4, !tbaa !125
  br i1 %2363, label %2369, label %2385

2369:                                             ; preds = %2360
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %146) #8
  store i8 0, ptr %146, align 1, !tbaa !147
  %2370 = tail call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_14SPIRExpressionEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2368)
  %.not2881 = icmp eq ptr %2370, null
  br i1 %.not2881, label %2373, label %2371

2371:                                             ; preds = %2369
  %2372 = getelementptr inbounds i8, ptr %2370, i64 57
  call void @_ZSt4swapIbENSt9enable_ifIXsr6__and_ISt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS3_ESt18is_move_assignableIS3_EEE5valueEvE4typeERS3_SC_(ptr noundef nonnull align 1 dereferenceable(1) %146, ptr noundef nonnull align 1 dereferenceable(1) %2372) #8
  br label %2373

2373:                                             ; preds = %2371, %2369
  %2374 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2368)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %147) #8
  call 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 %2368, i1 noundef zeroext true)
  %2375 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2364, i32 noundef %2366, ptr noundef nonnull align 8 dereferenceable(32) %147, i1 noundef zeroext %2374, i1 noundef zeroext false)
          to label %2376 unwind label %2382

2376:                                             ; preds = %2373
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %147) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %147) #8
  %2377 = load i8, ptr %146, align 1, !tbaa !147, !range !123, !noundef !124
  %2378 = xor i8 %2377, 1
  %2379 = getelementptr inbounds i8, ptr %2375, i64 57
  store i8 %2378, ptr %2379, align 1, !tbaa !140
  br i1 %.not2881, label %2384, label %2380

2380:                                             ; preds = %2376
  %2381 = getelementptr inbounds i8, ptr %2370, i64 57
  store i8 %2377, ptr %2381, align 1, !tbaa !140
  br label %2384

2382:                                             ; preds = %2373
  %2383 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %147) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %147) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %146) #8
  br label %6424

2384:                                             ; preds = %2380, %2376
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %146) #8
  br label %.thread3374

2385:                                             ; preds = %2360
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2364, i32 noundef %2366, i32 noundef %2368, ptr noundef nonnull @.str.493)
  br label %.thread3374

2386:                                             ; preds = %566
  %2387 = load i32, ptr %545, align 4, !tbaa !125
  %2388 = getelementptr inbounds i8, ptr %545, i64 4
  %2389 = load i32, ptr %2388, align 4, !tbaa !125
  %2390 = getelementptr inbounds i8, ptr %545, i64 8
  %2391 = load i32, ptr %2390, align 4, !tbaa !125
  %2392 = getelementptr inbounds i8, ptr %545, i64 12
  %2393 = load i32, ptr %2392, align 4, !tbaa !125
  %2394 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2387)
  %2395 = tail call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2391)
  br i1 %2395, label %2396, label %2398

2396:                                             ; preds = %2386
  %2397 = tail call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2393)
  br label %2398

2398:                                             ; preds = %2396, %2386
  %2399 = phi i1 [ false, %2386 ], [ %2397, %2396 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %148) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %148) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %149) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %149) #8
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %150) #8
  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 %150, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %148, ptr noundef nonnull align 8 dereferenceable(32) %149, ptr noundef nonnull align 4 dereferenceable(4) %3, i32 noundef %2391, i32 noundef %2393, i1 noundef zeroext false)
          to label %2400 unwind label %2411

2400:                                             ; preds = %2398
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %151) #8
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS7_SA_RA2_S8_S7_SA_S7_SC_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %151, ptr noundef nonnull align 8 dereferenceable(32) %148, ptr noundef nonnull align 1 dereferenceable(4) @.str.975, ptr noundef nonnull align 8 dereferenceable(32) %149, ptr noundef nonnull align 1 dereferenceable(4) @.str.976, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %148, ptr noundef nonnull align 1 dereferenceable(4) @.str.977, ptr noundef nonnull align 8 dereferenceable(32) %149, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %2401 unwind label %2413

2401:                                             ; preds = %2400
  br i1 %567, label %2402, label %2420

2402:                                             ; preds = %2401
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %152) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %153) #8
  %2403 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2387)
          to label %2404 unwind label %2415

2404:                                             ; preds = %2402
  %2405 = load ptr, ptr %0, align 8, !tbaa !142
  %2406 = getelementptr inbounds i8, ptr %2405, i64 152
  %2407 = load ptr, ptr %2406, align 8
  invoke void %2407(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %153, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %2403, i32 noundef 0)
          to label %2408 unwind label %2415

2408:                                             ; preds = %2404
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %154) #8
  store i8 40, ptr %154, align 1, !tbaa !206
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %155) #8
  store i8 41, ptr %155, align 1, !tbaa !206
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEcRS6_cEEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %152, ptr noundef nonnull align 8 dereferenceable(32) %153, ptr noundef nonnull align 1 dereferenceable(1) %154, ptr noundef nonnull align 8 dereferenceable(32) %151, ptr noundef nonnull align 1 dereferenceable(1) %155)
          to label %2409 unwind label %2417

2409:                                             ; preds = %2408
  %2410 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %151, ptr noundef nonnull align 8 dereferenceable(32) %152) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %152) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %155) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %154) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %153) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %153) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %152) #8
  br label %2437

2411:                                             ; preds = %2398
  %2412 = landingpad { ptr, i32 }
          cleanup
  br label %2446

2413:                                             ; preds = %2400
  %2414 = landingpad { ptr, i32 }
          cleanup
  br label %2445

2415:                                             ; preds = %2404, %2402
  %2416 = landingpad { ptr, i32 }
          cleanup
  br label %2419

2417:                                             ; preds = %2408
  %2418 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %155) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %154) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %153) #8
  br label %2419

2419:                                             ; preds = %2417, %2415
  %.pn2875 = phi { ptr, i32 } [ %2418, %2417 ], [ %2416, %2415 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %153) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %152) #8
  br label %2444

2420:                                             ; preds = %2401
  %2421 = getelementptr inbounds i8, ptr %2394, i64 16
  %2422 = load i32, ptr %2421, align 8, !tbaa !145
  %2423 = load i32, ptr %3, align 4, !tbaa !12
  %.not2872 = icmp eq i32 %2422, %2423
  br i1 %.not2872, label %2437, label %2424

2424:                                             ; preds = %2420
  %2425 = getelementptr inbounds i8, ptr %150, i64 16
  store i32 %2423, ptr %2425, align 8, !tbaa !145
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %156) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %157) #8
  %2426 = load ptr, ptr %0, align 8, !tbaa !142
  %2427 = getelementptr inbounds i8, ptr %2426, i64 472
  %2428 = load ptr, ptr %2427, align 8
  invoke void %2428(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %157, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %2394, ptr noundef nonnull align 8 dereferenceable(336) %150)
          to label %2429 unwind label %2432

2429:                                             ; preds = %2424
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %158) #8
  store i8 40, ptr %158, align 1, !tbaa !206
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %159) #8
  store i8 41, ptr %159, align 1, !tbaa !206
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEcRS6_cEEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %156, ptr noundef nonnull align 8 dereferenceable(32) %157, ptr noundef nonnull align 1 dereferenceable(1) %158, ptr noundef nonnull align 8 dereferenceable(32) %151, ptr noundef nonnull align 1 dereferenceable(1) %159)
          to label %2430 unwind label %2434

2430:                                             ; preds = %2429
  %2431 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %151, ptr noundef nonnull align 8 dereferenceable(32) %156) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %156) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %159) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %158) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %157) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %157) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %156) #8
  br label %2437

2432:                                             ; preds = %2424
  %2433 = landingpad { ptr, i32 }
          cleanup
  br label %2436

2434:                                             ; preds = %2429
  %2435 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %159) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %158) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %157) #8
  br label %2436

2436:                                             ; preds = %2434, %2432
  %.pn2873 = phi { ptr, i32 } [ %2435, %2434 ], [ %2433, %2432 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %157) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %156) #8
  br label %2444

2437:                                             ; preds = %2420, %2430, %2409
  %2438 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2387, i32 noundef %2389, ptr noundef nonnull align 8 dereferenceable(32) %151, i1 noundef zeroext %2399, i1 noundef zeroext false)
          to label %2439 unwind label %2442

2439:                                             ; preds = %2437
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2389, i32 noundef %2391)
          to label %2440 unwind label %2442

2440:                                             ; preds = %2439
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2389, i32 noundef %2393)
          to label %2441 unwind label %2442

2441:                                             ; preds = %2440
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %151) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %151) #8
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %150) #8
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %150) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %149) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %149) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %148) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %148) #8
  br label %.thread3374

2442:                                             ; preds = %2440, %2439, %2437
  %2443 = landingpad { ptr, i32 }
          cleanup
  br label %2444

2444:                                             ; preds = %2442, %2436, %2419
  %.pn2877 = phi { ptr, i32 } [ %2443, %2442 ], [ %.pn2875, %2419 ], [ %.pn2873, %2436 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %151) #8
  br label %2445

2445:                                             ; preds = %2444, %2413
  %.pn2877.pn = phi { ptr, i32 } [ %.pn2877, %2444 ], [ %2414, %2413 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %151) #8
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %150) #8
  br label %2446

2446:                                             ; preds = %2445, %2411
  %.pn2877.pn.pn = phi { ptr, i32 } [ %.pn2877.pn, %2445 ], [ %2412, %2411 ]
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %150) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %149) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %149) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %148) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %148) #8
  br label %6424

2447:                                             ; preds = %566
  %2448 = load i32, ptr %545, align 4, !tbaa !125
  %2449 = getelementptr inbounds i8, ptr %545, i64 4
  %2450 = load i32, ptr %2449, align 4, !tbaa !125
  %2451 = getelementptr inbounds i8, ptr %545, i64 8
  %2452 = load i32, ptr %2451, align 4, !tbaa !125
  %2453 = getelementptr inbounds i8, ptr %545, i64 12
  %2454 = load i32, ptr %2453, align 4, !tbaa !125
  %2455 = tail call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef 135)
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2448, i32 noundef %2450, i32 noundef %2452, i32 noundef %2454, ptr noundef nonnull @.str.959, i32 noundef %551, i1 noundef zeroext %2455, i1 noundef zeroext %567)
  br label %.thread3374

2456:                                             ; preds = %566
  %2457 = load i32, ptr %545, align 4, !tbaa !125
  %2458 = getelementptr inbounds i8, ptr %545, i64 4
  %2459 = load i32, ptr %2458, align 4, !tbaa !125
  %2460 = getelementptr inbounds i8, ptr %545, i64 8
  %2461 = load i32, ptr %2460, align 4, !tbaa !125
  %2462 = getelementptr inbounds i8, ptr %545, i64 12
  %2463 = load i32, ptr %2462, align 4, !tbaa !125
  %2464 = tail call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef 134)
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2457, i32 noundef %2459, i32 noundef %2461, i32 noundef %2463, ptr noundef nonnull @.str.959, i32 noundef %552, i1 noundef zeroext %2464, i1 noundef zeroext %567)
  br label %.thread3374

2465:                                             ; preds = %566, %566
  %2466 = getelementptr inbounds i8, ptr %0, i64 7636
  %2467 = getelementptr inbounds i8, ptr %0, i64 7640
  %2468 = load i8, ptr %2467, align 8, !tbaa !207, !range !123, !noundef !124
  %2469 = trunc nuw i8 %2468 to i1
  %2470 = load i32, ptr %2466, align 4
  %2471 = icmp ult i32 %2470, 310
  %or.cond3085 = select i1 %2469, i1 %2471, i1 false
  br i1 %or.cond3085, label %2472, label %2477

2472:                                             ; preds = %2465
  %2473 = tail call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %2473, ptr noundef nonnull @.str.1389)
          to label %2474 unwind label %2475

2474:                                             ; preds = %2472
  tail call void @__cxa_throw(ptr nonnull %2473, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
  unreachable

2475:                                             ; preds = %2472
  %2476 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %2473) #8
  br label %6424

2477:                                             ; preds = %2465
  %2478 = icmp ugt i32 %2470, 399
  %or.cond3088.not = select i1 %2469, i1 true, i1 %2478
  br i1 %or.cond3088.not, label %2484, label %2479

2479:                                             ; preds = %2477
  %2480 = tail call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %2480, ptr noundef nonnull @.str.1390)
          to label %2481 unwind label %2482

2481:                                             ; preds = %2479
  tail call void @__cxa_throw(ptr nonnull %2480, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
  unreachable

2482:                                             ; preds = %2479
  %2483 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %2480) #8
  br label %6424

2484:                                             ; preds = %2477
  %2485 = load i32, ptr %545, align 4, !tbaa !125
  %2486 = getelementptr inbounds i8, ptr %545, i64 4
  %2487 = load i32, ptr %2486, align 4, !tbaa !125
  %2488 = getelementptr inbounds i8, ptr %545, i64 8
  %2489 = load i32, ptr %2488, align 4, !tbaa !125
  %2490 = getelementptr inbounds i8, ptr %545, i64 12
  %2491 = load i32, ptr %2490, align 4, !tbaa !125
  %2492 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2485)
  %2493 = tail call noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL39emit_uninitialized_temporary_expressionEjj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2485, i32 noundef %2487)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %160) #8
  %2494 = icmp eq i32 %568, 149
  %2495 = select i1 %2494, ptr @.str.495, ptr @.str.509
  store ptr %2495, ptr %160, align 8, !tbaa !208
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %161) #8
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %161, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2487, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %162) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %162, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %2492, i32 noundef 0)
          to label %2496 unwind label %2502

2496:                                             ; preds = %2484
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %163) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %163, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2489, i1 noundef zeroext true)
          to label %2497 unwind label %2504

2497:                                             ; preds = %2496
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %164) #8
  invoke 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 %2491, i1 noundef zeroext true)
          to label %2498 unwind label %2506

2498:                                             ; preds = %2497
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %165) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %165, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2487, i1 noundef zeroext true)
          to label %2499 unwind label %2508

2499:                                             ; preds = %2498
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %166) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %166, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %2492, i32 noundef 1)
          to label %2500 unwind label %2510

2500:                                             ; preds = %2499
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_RA4_S8_RPS8_SA_S7_RA3_S8_S7_SG_S7_SA_S7_SG_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %161, ptr noundef nonnull align 1 dereferenceable(2) @.str.719, ptr noundef nonnull align 8 dereferenceable(32) %162, ptr noundef nonnull align 1 dereferenceable(4) @.str.335, ptr noundef nonnull align 8 dereferenceable(8) %160, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %163, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %164, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %165, ptr noundef nonnull align 1 dereferenceable(2) @.str.719, ptr noundef nonnull align 8 dereferenceable(32) %166, ptr noundef nonnull align 1 dereferenceable(3) @.str.751)
          to label %2501 unwind label %2512

2501:                                             ; preds = %2500
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %166) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %166) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %165) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %165) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %164) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %164) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %163) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %163) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %162) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %162) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %161) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %161) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %160) #8
  br label %.thread3374

2502:                                             ; preds = %2484
  %2503 = landingpad { ptr, i32 }
          cleanup
  br label %2518

2504:                                             ; preds = %2496
  %2505 = landingpad { ptr, i32 }
          cleanup
  br label %2517

2506:                                             ; preds = %2497
  %2507 = landingpad { ptr, i32 }
          cleanup
  br label %2516

2508:                                             ; preds = %2498
  %2509 = landingpad { ptr, i32 }
          cleanup
  br label %2515

2510:                                             ; preds = %2499
  %2511 = landingpad { ptr, i32 }
          cleanup
  br label %2514

2512:                                             ; preds = %2500
  %2513 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %166) #8
  br label %2514

2514:                                             ; preds = %2512, %2510
  %.pn2866 = phi { ptr, i32 } [ %2513, %2512 ], [ %2511, %2510 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %166) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %165) #8
  br label %2515

2515:                                             ; preds = %2514, %2508
  %.pn2866.pn = phi { ptr, i32 } [ %.pn2866, %2514 ], [ %2509, %2508 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %165) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %164) #8
  br label %2516

2516:                                             ; preds = %2515, %2506
  %.pn2866.pn.pn = phi { ptr, i32 } [ %.pn2866.pn, %2515 ], [ %2507, %2506 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %164) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %163) #8
  br label %2517

2517:                                             ; preds = %2516, %2504
  %.pn2866.pn.pn.pn = phi { ptr, i32 } [ %.pn2866.pn.pn, %2516 ], [ %2505, %2504 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %163) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %162) #8
  br label %2518

2518:                                             ; preds = %2517, %2502
  %.pn2866.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn2866.pn.pn.pn, %2517 ], [ %2503, %2502 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %162) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %161) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %161) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %160) #8
  br label %6424

2519:                                             ; preds = %566, %566
  %2520 = getelementptr inbounds i8, ptr %0, i64 7636
  %2521 = getelementptr inbounds i8, ptr %0, i64 7640
  %2522 = load i8, ptr %2521, align 8, !tbaa !207, !range !123, !noundef !124
  %2523 = trunc nuw i8 %2522 to i1
  %2524 = load i32, ptr %2520, align 4
  %2525 = icmp ult i32 %2524, 310
  %or.cond3090 = select i1 %2523, i1 %2525, i1 false
  br i1 %or.cond3090, label %2526, label %2531

2526:                                             ; preds = %2519
  %2527 = tail call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %2527, ptr noundef nonnull @.str.1389)
          to label %2528 unwind label %2529

2528:                                             ; preds = %2526
  tail call void @__cxa_throw(ptr nonnull %2527, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
  unreachable

2529:                                             ; preds = %2526
  %2530 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %2527) #8
  br label %6424

2531:                                             ; preds = %2519
  %2532 = icmp ugt i32 %2524, 399
  %or.cond3093.not = select i1 %2523, i1 true, i1 %2532
  br i1 %or.cond3093.not, label %2538, label %2533

2533:                                             ; preds = %2531
  %2534 = tail call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %2534, ptr noundef nonnull @.str.1391)
          to label %2535 unwind label %2536

2535:                                             ; preds = %2533
  tail call void @__cxa_throw(ptr nonnull %2534, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
  unreachable

2536:                                             ; preds = %2533
  %2537 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %2534) #8
  br label %6424

2538:                                             ; preds = %2531
  %2539 = load i32, ptr %545, align 4, !tbaa !125
  %2540 = getelementptr inbounds i8, ptr %545, i64 4
  %2541 = load i32, ptr %2540, align 4, !tbaa !125
  %2542 = getelementptr inbounds i8, ptr %545, i64 8
  %2543 = load i32, ptr %2542, align 4, !tbaa !125
  %2544 = getelementptr inbounds i8, ptr %545, i64 12
  %2545 = load i32, ptr %2544, align 4, !tbaa !125
  %2546 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2539)
  %2547 = tail call noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL39emit_uninitialized_temporary_expressionEjj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2539, i32 noundef %2541)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %167) #8
  %2548 = icmp eq i32 %568, 151
  %.str.498..str.412 = select i1 %2548, ptr @.str.498, ptr @.str.412
  store ptr %.str.498..str.412, ptr %167, align 8, !tbaa !208
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %168) #8
  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 %2543, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %169) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %169, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2545, i1 noundef zeroext true)
          to label %2549 unwind label %2555

2549:                                             ; preds = %2538
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %170) #8
  invoke 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 %2541, i1 noundef zeroext true)
          to label %2550 unwind label %2557

2550:                                             ; preds = %2549
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %171) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %171, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %2546, i32 noundef 1)
          to label %2551 unwind label %2559

2551:                                             ; preds = %2550
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %172) #8
  invoke 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 %2541, i1 noundef zeroext true)
          to label %2552 unwind label %2561

2552:                                             ; preds = %2551
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %173) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %173, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %2546, i32 noundef 0)
          to label %2553 unwind label %2563

2553:                                             ; preds = %2552
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRPKcRA2_S2_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_SC_SE_SC_S6_SC_SE_SC_S6_SC_SE_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(8) %167, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %168, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %169, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %170, ptr noundef nonnull align 1 dereferenceable(2) @.str.719, ptr noundef nonnull align 8 dereferenceable(32) %171, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %172, ptr noundef nonnull align 1 dereferenceable(2) @.str.719, ptr noundef nonnull align 8 dereferenceable(32) %173, ptr noundef nonnull align 1 dereferenceable(3) @.str.751)
          to label %2554 unwind label %2565

2554:                                             ; preds = %2553
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %173) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %173) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %172) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %172) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %171) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %171) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %170) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %170) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %169) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %169) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %168) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %168) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %167) #8
  br label %.thread3374

2555:                                             ; preds = %2538
  %2556 = landingpad { ptr, i32 }
          cleanup
  br label %2571

2557:                                             ; preds = %2549
  %2558 = landingpad { ptr, i32 }
          cleanup
  br label %2570

2559:                                             ; preds = %2550
  %2560 = landingpad { ptr, i32 }
          cleanup
  br label %2569

2561:                                             ; preds = %2551
  %2562 = landingpad { ptr, i32 }
          cleanup
  br label %2568

2563:                                             ; preds = %2552
  %2564 = landingpad { ptr, i32 }
          cleanup
  br label %2567

2565:                                             ; preds = %2553
  %2566 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %173) #8
  br label %2567

2567:                                             ; preds = %2565, %2563
  %.pn2860 = phi { ptr, i32 } [ %2566, %2565 ], [ %2564, %2563 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %173) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %172) #8
  br label %2568

2568:                                             ; preds = %2567, %2561
  %.pn2860.pn = phi { ptr, i32 } [ %.pn2860, %2567 ], [ %2562, %2561 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %172) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %171) #8
  br label %2569

2569:                                             ; preds = %2568, %2559
  %.pn2860.pn.pn = phi { ptr, i32 } [ %.pn2860.pn, %2568 ], [ %2560, %2559 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %171) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %170) #8
  br label %2570

2570:                                             ; preds = %2569, %2557
  %.pn2860.pn.pn.pn = phi { ptr, i32 } [ %.pn2860.pn.pn, %2569 ], [ %2558, %2557 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %170) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %169) #8
  br label %2571

2571:                                             ; preds = %2570, %2555
  %.pn2860.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn2860.pn.pn.pn, %2570 ], [ %2556, %2555 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %169) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %168) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %168) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %167) #8
  br label %6424

2572:                                             ; preds = %566
  %2573 = load i32, ptr %545, align 4, !tbaa !125
  %2574 = getelementptr inbounds i8, ptr %545, i64 4
  %2575 = load i32, ptr %2574, align 4, !tbaa !125
  %2576 = getelementptr inbounds i8, ptr %545, i64 8
  %2577 = load i32, ptr %2576, align 4, !tbaa !125
  %2578 = getelementptr inbounds i8, ptr %545, i64 12
  %2579 = load i32, ptr %2578, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2573, i32 noundef %2575, i32 noundef %2577, i32 noundef %2579, ptr noundef nonnull @.str.959)
  br label %.thread3374

2580:                                             ; preds = %566
  %2581 = load i32, ptr %545, align 4, !tbaa !125
  %2582 = getelementptr inbounds i8, ptr %545, i64 4
  %2583 = load i32, ptr %2582, align 4, !tbaa !125
  %2584 = getelementptr inbounds i8, ptr %545, i64 8
  %2585 = load i32, ptr %2584, align 4, !tbaa !125
  %2586 = getelementptr inbounds i8, ptr %545, i64 12
  %2587 = load i32, ptr %2586, align 4, !tbaa !125
  %2588 = tail call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef 194)
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2581, i32 noundef %2583, i32 noundef %2585, i32 noundef %2587, ptr noundef nonnull @.str.961, i32 noundef %552, i1 noundef zeroext %2588, i1 noundef zeroext %567)
  br label %.thread3374

2589:                                             ; preds = %566
  %2590 = load i32, ptr %545, align 4, !tbaa !125
  %2591 = getelementptr inbounds i8, ptr %545, i64 4
  %2592 = load i32, ptr %2591, align 4, !tbaa !125
  %2593 = getelementptr inbounds i8, ptr %545, i64 8
  %2594 = load i32, ptr %2593, align 4, !tbaa !125
  %2595 = getelementptr inbounds i8, ptr %545, i64 12
  %2596 = load i32, ptr %2595, align 4, !tbaa !125
  %2597 = tail call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef 195)
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2590, i32 noundef %2592, i32 noundef %2594, i32 noundef %2596, ptr noundef nonnull @.str.961, i32 noundef %551, i1 noundef zeroext %2597, i1 noundef zeroext %567)
  br label %.thread3374

2598:                                             ; preds = %566
  %2599 = load i32, ptr %545, align 4, !tbaa !125
  %2600 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2599)
  %2601 = getelementptr inbounds i8, ptr %2600, i64 16
  %2602 = load i32, ptr %2601, align 8, !tbaa !145
  %2603 = load i32, ptr %545, align 4, !tbaa !125
  %2604 = getelementptr inbounds i8, ptr %545, i64 4
  %2605 = load i32, ptr %2604, align 4, !tbaa !125
  %2606 = getelementptr inbounds i8, ptr %545, i64 8
  %2607 = load i32, ptr %2606, align 4, !tbaa !125
  %2608 = getelementptr inbounds i8, ptr %545, i64 12
  %2609 = load i32, ptr %2608, align 4, !tbaa !125
  %2610 = tail call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef 196)
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2603, i32 noundef %2605, i32 noundef %2607, i32 noundef %2609, ptr noundef nonnull @.str.962, i32 noundef %2602, i1 noundef zeroext %2610, i1 noundef zeroext %567)
  br label %.thread3374

2611:                                             ; preds = %566
  %2612 = load i32, ptr %545, align 4, !tbaa !125
  %2613 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2612)
  %2614 = getelementptr inbounds i8, ptr %2613, i64 16
  %2615 = load i32, ptr %2614, align 8, !tbaa !145
  %2616 = load i32, ptr %545, align 4, !tbaa !125
  %2617 = getelementptr inbounds i8, ptr %545, i64 4
  %2618 = load i32, ptr %2617, align 4, !tbaa !125
  %2619 = getelementptr inbounds i8, ptr %545, i64 8
  %2620 = load i32, ptr %2619, align 4, !tbaa !125
  %2621 = getelementptr inbounds i8, ptr %545, i64 12
  %2622 = load i32, ptr %2621, align 4, !tbaa !125
  %2623 = tail call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef 197)
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2616, i32 noundef %2618, i32 noundef %2620, i32 noundef %2622, ptr noundef nonnull @.str.963, i32 noundef %2615, i1 noundef zeroext %2623, i1 noundef zeroext %567)
  br label %.thread3374

2624:                                             ; preds = %566
  %2625 = load i32, ptr %545, align 4, !tbaa !125
  %2626 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2625)
  %2627 = getelementptr inbounds i8, ptr %2626, i64 16
  %2628 = load i32, ptr %2627, align 8, !tbaa !145
  %2629 = load i32, ptr %545, align 4, !tbaa !125
  %2630 = getelementptr inbounds i8, ptr %545, i64 4
  %2631 = load i32, ptr %2630, align 4, !tbaa !125
  %2632 = getelementptr inbounds i8, ptr %545, i64 8
  %2633 = load i32, ptr %2632, align 4, !tbaa !125
  %2634 = getelementptr inbounds i8, ptr %545, i64 12
  %2635 = load i32, ptr %2634, align 4, !tbaa !125
  %2636 = tail call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef 198)
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2629, i32 noundef %2631, i32 noundef %2633, i32 noundef %2635, ptr noundef nonnull @.str.964, i32 noundef %2628, i1 noundef zeroext %2636, i1 noundef zeroext %567)
  br label %.thread3374

2637:                                             ; preds = %566
  %2638 = load i32, ptr %545, align 4, !tbaa !125
  %2639 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2638)
  %2640 = getelementptr inbounds i8, ptr %2639, i64 16
  %2641 = load i32, ptr %2640, align 8, !tbaa !145
  %2642 = load i32, ptr %545, align 4, !tbaa !125
  %2643 = getelementptr inbounds i8, ptr %545, i64 4
  %2644 = load i32, ptr %2643, align 4, !tbaa !125
  %2645 = getelementptr inbounds i8, ptr %545, i64 8
  %2646 = load i32, ptr %2645, align 4, !tbaa !125
  %2647 = getelementptr inbounds i8, ptr %545, i64 12
  %2648 = load i32, ptr %2647, align 4, !tbaa !125
  %2649 = tail call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef 199)
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2642, i32 noundef %2644, i32 noundef %2646, i32 noundef %2648, ptr noundef nonnull @.str.965, i32 noundef %2641, i1 noundef zeroext %2649, i1 noundef zeroext %567)
  br label %.thread3374

2650:                                             ; preds = %566
  br i1 %567, label %._crit_edge3348, label %2651

._crit_edge3348:                                  ; preds = %2650
  %.pre3349 = load i32, ptr %545, align 4, !tbaa !125
  br label %2656

2651:                                             ; preds = %2650
  %2652 = getelementptr inbounds i8, ptr %545, i64 8
  %2653 = load i32, ptr %2652, align 4, !tbaa !125
  %2654 = tail call noundef i32 @_ZNK11spirv_cross8Compiler18expression_type_idEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2653)
  %2655 = load i32, ptr %545, align 4, !tbaa !125
  %.not2859 = icmp eq i32 %2654, %2655
  br i1 %.not2859, label %2662, label %2656

2656:                                             ; preds = %._crit_edge3348, %2651
  %2657 = phi i32 [ %.pre3349, %._crit_edge3348 ], [ %2655, %2651 ]
  %2658 = getelementptr inbounds i8, ptr %545, i64 4
  %2659 = load i32, ptr %2658, align 4, !tbaa !125
  %2660 = getelementptr inbounds i8, ptr %545, i64 8
  %2661 = load i32, ptr %2660, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_op_castEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2657, i32 noundef %2659, i32 noundef %2661, ptr noundef nonnull @.str.956)
  br label %.thread3374

2662:                                             ; preds = %2651
  %2663 = getelementptr inbounds i8, ptr %545, i64 4
  %2664 = load i32, ptr %2663, align 4, !tbaa !125
  %2665 = load i32, ptr %2652, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL13emit_unary_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2654, i32 noundef %2664, i32 noundef %2665, ptr noundef nonnull @.str.956)
  br label %.thread3374

2666:                                             ; preds = %566
  %2667 = load i32, ptr %545, align 4, !tbaa !125
  %2668 = getelementptr inbounds i8, ptr %545, i64 4
  %2669 = load i32, ptr %2668, align 4, !tbaa !125
  %2670 = getelementptr inbounds i8, ptr %545, i64 8
  %2671 = load i32, ptr %2670, align 4, !tbaa !125
  %2672 = getelementptr inbounds i8, ptr %545, i64 12
  %2673 = load i32, ptr %2672, align 4, !tbaa !125
  %2674 = tail call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef 137)
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2667, i32 noundef %2669, i32 noundef %2671, i32 noundef %2673, ptr noundef nonnull @.str.960, i32 noundef %552, i1 noundef zeroext %2674, i1 noundef zeroext %567)
  br label %.thread3374

2675:                                             ; preds = %566
  %2676 = load i32, ptr %545, align 4, !tbaa !125
  %2677 = getelementptr inbounds i8, ptr %545, i64 4
  %2678 = load i32, ptr %2677, align 4, !tbaa !125
  %2679 = getelementptr inbounds i8, ptr %545, i64 8
  %2680 = load i32, ptr %2679, align 4, !tbaa !125
  %2681 = getelementptr inbounds i8, ptr %545, i64 12
  %2682 = load i32, ptr %2681, align 4, !tbaa !125
  %2683 = tail call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef 139)
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2676, i32 noundef %2678, i32 noundef %2680, i32 noundef %2682, ptr noundef nonnull @.str.960, i32 noundef %551, i1 noundef zeroext %2683, i1 noundef zeroext %567)
  br label %.thread3374

2684:                                             ; preds = %566
  %2685 = load i32, ptr %545, align 4, !tbaa !125
  %2686 = getelementptr inbounds i8, ptr %545, i64 4
  %2687 = load i32, ptr %2686, align 4, !tbaa !125
  %2688 = getelementptr inbounds i8, ptr %545, i64 8
  %2689 = load i32, ptr %2688, align 4, !tbaa !125
  %2690 = getelementptr inbounds i8, ptr %545, i64 12
  %2691 = load i32, ptr %2690, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2685, i32 noundef %2687, i32 noundef %2689, i32 noundef %2691, ptr noundef nonnull @.str.437)
  br label %.thread3374

2692:                                             ; preds = %566
  %2693 = load i32, ptr %545, align 4, !tbaa !125
  %2694 = getelementptr inbounds i8, ptr %545, i64 4
  %2695 = load i32, ptr %2694, align 4, !tbaa !125
  %2696 = getelementptr inbounds i8, ptr %545, i64 8
  %2697 = load i32, ptr %2696, align 4, !tbaa !125
  %2698 = getelementptr inbounds i8, ptr %545, i64 12
  %2699 = load i32, ptr %2698, align 4, !tbaa !125
  %2700 = tail call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2697)
  br i1 %2700, label %2701, label %2703

2701:                                             ; preds = %2692
  %2702 = tail call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2699)
  br label %2703

2703:                                             ; preds = %2701, %2692
  %2704 = phi i1 [ false, %2692 ], [ %2702, %2701 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %174) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %174) #8
  %2705 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
  br i1 %2705, label %2729, label %2706

2706:                                             ; preds = %2703
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %175) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %176) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_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 %2697, i1 noundef zeroext true)
          to label %2707 unwind label %2715

2707:                                             ; preds = %2706
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %177) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %177, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2699, i1 noundef zeroext true)
          to label %2708 unwind label %2717

2708:                                             ; preds = %2707
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %178) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_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 %2697, i1 noundef zeroext true)
          to label %2709 unwind label %2719

2709:                                             ; preds = %2708
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %179) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %179, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2699, i1 noundef zeroext true)
          to label %2710 unwind label %2721

2710:                                             ; preds = %2709
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS6_S9_RA7_S7_S6_S9_S6_RA2_S7_EEES6_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(4) @.str.975, ptr noundef nonnull align 8 dereferenceable(32) %177, ptr noundef nonnull align 1 dereferenceable(4) @.str.976, ptr noundef nonnull align 1 dereferenceable(7) @.str.1392, ptr noundef nonnull align 8 dereferenceable(32) %178, ptr noundef nonnull align 1 dereferenceable(4) @.str.977, ptr noundef nonnull align 8 dereferenceable(32) %179, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %2711 unwind label %2723

2711:                                             ; preds = %2710
  %2712 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %174, ptr noundef nonnull align 8 dereferenceable(32) %175) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %175) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %179) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %179) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %178) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %178) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %177) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %177) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %176) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %176) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %175) #8
  br label %2773

2713:                                             ; preds = %2776, %2775, %2773
  %2714 = landingpad { ptr, i32 }
          cleanup
  br label %2778

2715:                                             ; preds = %2706
  %2716 = landingpad { ptr, i32 }
          cleanup
  br label %2728

2717:                                             ; preds = %2707
  %2718 = landingpad { ptr, i32 }
          cleanup
  br label %2727

2719:                                             ; preds = %2708
  %2720 = landingpad { ptr, i32 }
          cleanup
  br label %2726

2721:                                             ; preds = %2709
  %2722 = landingpad { ptr, i32 }
          cleanup
  br label %2725

2723:                                             ; preds = %2710
  %2724 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %179) #8
  br label %2725

2725:                                             ; preds = %2723, %2721
  %.pn2843 = phi { ptr, i32 } [ %2724, %2723 ], [ %2722, %2721 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %179) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %178) #8
  br label %2726

2726:                                             ; preds = %2725, %2719
  %.pn2843.pn = phi { ptr, i32 } [ %.pn2843, %2725 ], [ %2720, %2719 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %178) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %177) #8
  br label %2727

2727:                                             ; preds = %2726, %2717
  %.pn2843.pn.pn = phi { ptr, i32 } [ %.pn2843.pn, %2726 ], [ %2718, %2717 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %177) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %176) #8
  br label %2728

2728:                                             ; preds = %2727, %2715
  %.pn2843.pn.pn.pn = phi { ptr, i32 } [ %.pn2843.pn.pn, %2727 ], [ %2716, %2715 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %176) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %175) #8
  br label %2778

2729:                                             ; preds = %2703
  %2730 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2697)
          to label %2731 unwind label %2748

2731:                                             ; preds = %2729
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %180) #8
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %180, ptr noundef nonnull align 8 dereferenceable(336) %2730)
          to label %2732 unwind label %2750

2732:                                             ; preds = %2731
  %2733 = getelementptr inbounds i8, ptr %180, i64 16
  store i32 7, ptr %2733, align 8, !tbaa !145
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %181) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %182) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_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 %2697, i1 noundef zeroext true)
          to label %2734 unwind label %2752

2734:                                             ; preds = %2732
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %183) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %183, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2699, i1 noundef zeroext true)
          to label %2735 unwind label %2754

2735:                                             ; preds = %2734
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %184) #8
  %2736 = load ptr, ptr %0, align 8, !tbaa !142
  %2737 = getelementptr inbounds i8, ptr %2736, i64 152
  %2738 = load ptr, ptr %2737, align 8
  invoke void %2738(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %184, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %2730, i32 noundef 0)
          to label %2739 unwind label %2756

2739:                                             ; preds = %2735
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %185) #8
  %2740 = load ptr, ptr %0, align 8, !tbaa !142
  %2741 = getelementptr inbounds i8, ptr %2740, i64 152
  %2742 = load ptr, ptr %2741, align 8
  invoke void %2742(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %185, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %180, i32 noundef 0)
          to label %2743 unwind label %2758

2743:                                             ; preds = %2739
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %186) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_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 %2697, i1 noundef zeroext true)
          to label %2744 unwind label %2760

2744:                                             ; preds = %2743
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %187) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %187, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2699, i1 noundef zeroext true)
          to label %2745 unwind label %2762

2745:                                             ; preds = %2744
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS6_S9_S6_RA2_S7_S6_SB_S6_S9_S6_RA3_S7_EEES6_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(4) @.str.975, ptr noundef nonnull align 8 dereferenceable(32) %183, ptr noundef nonnull align 1 dereferenceable(4) @.str.976, ptr noundef nonnull align 8 dereferenceable(32) %184, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %185, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %186, ptr noundef nonnull align 1 dereferenceable(4) @.str.977, ptr noundef nonnull align 8 dereferenceable(32) %187, ptr noundef nonnull align 1 dereferenceable(3) @.str.1016)
          to label %2746 unwind label %2764

2746:                                             ; preds = %2745
  %2747 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %174, ptr noundef nonnull align 8 dereferenceable(32) %181) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %181) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %187) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %187) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %186) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %186) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %185) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %185) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %184) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %184) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %183) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %183) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %182) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %182) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %181) #8
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %180) #8
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %180) #8
  br label %2773

2748:                                             ; preds = %2729
  %2749 = landingpad { ptr, i32 }
          cleanup
  br label %2778

2750:                                             ; preds = %2731
  %2751 = landingpad { ptr, i32 }
          cleanup
  br label %2772

2752:                                             ; preds = %2732
  %2753 = landingpad { ptr, i32 }
          cleanup
  br label %2771

2754:                                             ; preds = %2734
  %2755 = landingpad { ptr, i32 }
          cleanup
  br label %2770

2756:                                             ; preds = %2735
  %2757 = landingpad { ptr, i32 }
          cleanup
  br label %2769

2758:                                             ; preds = %2739
  %2759 = landingpad { ptr, i32 }
          cleanup
  br label %2768

2760:                                             ; preds = %2743
  %2761 = landingpad { ptr, i32 }
          cleanup
  br label %2767

2762:                                             ; preds = %2744
  %2763 = landingpad { ptr, i32 }
          cleanup
  br label %2766

2764:                                             ; preds = %2745
  %2765 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %187) #8
  br label %2766

2766:                                             ; preds = %2764, %2762
  %.pn2848 = phi { ptr, i32 } [ %2765, %2764 ], [ %2763, %2762 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %187) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %186) #8
  br label %2767

2767:                                             ; preds = %2766, %2760
  %.pn2848.pn = phi { ptr, i32 } [ %.pn2848, %2766 ], [ %2761, %2760 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %186) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %185) #8
  br label %2768

2768:                                             ; preds = %2767, %2758
  %.pn2848.pn.pn = phi { ptr, i32 } [ %.pn2848.pn, %2767 ], [ %2759, %2758 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %185) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %184) #8
  br label %2769

2769:                                             ; preds = %2768, %2756
  %.pn2848.pn.pn.pn = phi { ptr, i32 } [ %.pn2848.pn.pn, %2768 ], [ %2757, %2756 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %184) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %183) #8
  br label %2770

2770:                                             ; preds = %2769, %2754
  %.pn2848.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn2848.pn.pn.pn, %2769 ], [ %2755, %2754 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %183) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %182) #8
  br label %2771

2771:                                             ; preds = %2770, %2752
  %.pn2848.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn2848.pn.pn.pn.pn, %2770 ], [ %2753, %2752 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %182) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %181) #8
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %180) #8
  br label %2772

2772:                                             ; preds = %2771, %2750
  %.pn2848.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn2848.pn.pn.pn.pn.pn, %2771 ], [ %2751, %2750 ]
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %180) #8
  br label %2778

2773:                                             ; preds = %2746, %2711
  %2774 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2693, i32 noundef %2695, ptr noundef nonnull align 8 dereferenceable(32) %174, i1 noundef zeroext %2704, i1 noundef zeroext false)
          to label %2775 unwind label %2713

2775:                                             ; preds = %2773
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2695, i32 noundef %2697)
          to label %2776 unwind label %2713

2776:                                             ; preds = %2775
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2695, i32 noundef %2699)
          to label %2777 unwind label %2713

2777:                                             ; preds = %2776
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %174) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %174) #8
  br label %.thread3374

2778:                                             ; preds = %2748, %2772, %2728, %2713
  %.pn2857 = phi { ptr, i32 } [ %2714, %2713 ], [ %.pn2843.pn.pn.pn, %2728 ], [ %.pn2848.pn.pn.pn.pn.pn.pn, %2772 ], [ %2749, %2748 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %174) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %174) #8
  br label %6424

2779:                                             ; preds = %566
  %2780 = load i32, ptr %545, align 4, !tbaa !125
  %2781 = getelementptr inbounds i8, ptr %545, i64 4
  %2782 = load i32, ptr %2781, align 4, !tbaa !125
  %2783 = getelementptr inbounds i8, ptr %545, i64 8
  %2784 = load i32, ptr %2783, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2780, i32 noundef %2782, i32 noundef %2784, ptr noundef nonnull @.str.344)
  br label %.thread3374

2785:                                             ; preds = %566
  %2786 = load i32, ptr %545, align 4, !tbaa !125
  %2787 = getelementptr inbounds i8, ptr %545, i64 4
  %2788 = load i32, ptr %2787, align 4, !tbaa !125
  %2789 = getelementptr inbounds i8, ptr %545, i64 8
  %2790 = load i32, ptr %2789, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2786, i32 noundef %2788, i32 noundef %2790, ptr noundef nonnull @.str.343)
  br label %.thread3374

2791:                                             ; preds = %566
  %2792 = load i32, ptr %545, align 4, !tbaa !125
  %2793 = getelementptr inbounds i8, ptr %545, i64 4
  %2794 = load i32, ptr %2793, align 4, !tbaa !125
  %2795 = getelementptr inbounds i8, ptr %545, i64 16
  %2796 = load i32, ptr %2795, align 4, !tbaa !125
  %2797 = getelementptr inbounds i8, ptr %545, i64 12
  %2798 = load i32, ptr %2797, align 4, !tbaa !125
  %2799 = getelementptr inbounds i8, ptr %545, i64 8
  %2800 = load i32, ptr %2799, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL11emit_mix_opEjjjjj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2792, i32 noundef %2794, i32 noundef %2796, i32 noundef %2798, i32 noundef %2800)
  br label %.thread3374

2801:                                             ; preds = %566
  %2802 = load i32, ptr %545, align 4, !tbaa !125
  %2803 = getelementptr inbounds i8, ptr %545, i64 4
  %2804 = load i32, ptr %2803, align 4, !tbaa !125
  %2805 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2802)
  %2806 = getelementptr inbounds i8, ptr %2805, i64 24
  %2807 = load i32, ptr %2806, align 8, !tbaa !126
  %2808 = icmp ugt i32 %2807, 1
  br i1 %2808, label %2809, label %2814

2809:                                             ; preds = %2801
  %2810 = getelementptr inbounds i8, ptr %545, i64 8
  %2811 = load i32, ptr %2810, align 4, !tbaa !125
  %2812 = getelementptr inbounds i8, ptr %545, i64 12
  %2813 = load i32, ptr %2812, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL23emit_unrolled_binary_opEjjjjPKcbNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2802, i32 noundef %2804, i32 noundef %2811, i32 noundef %2813, ptr noundef nonnull @.str.966, i1 noundef zeroext false, i32 noundef 0)
  br label %.thread3374

2814:                                             ; preds = %2801
  %2815 = load i32, ptr %545, align 4, !tbaa !125
  %2816 = load i32, ptr %2803, align 4, !tbaa !125
  %2817 = getelementptr inbounds i8, ptr %545, i64 8
  %2818 = load i32, ptr %2817, align 4, !tbaa !125
  %2819 = getelementptr inbounds i8, ptr %545, i64 12
  %2820 = load i32, ptr %2819, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2815, i32 noundef %2816, i32 noundef %2818, i32 noundef %2820, ptr noundef nonnull @.str.966)
  br label %.thread3374

2821:                                             ; preds = %566
  %2822 = load i32, ptr %545, align 4, !tbaa !125
  %2823 = getelementptr inbounds i8, ptr %545, i64 4
  %2824 = load i32, ptr %2823, align 4, !tbaa !125
  %2825 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2822)
  %2826 = getelementptr inbounds i8, ptr %2825, i64 24
  %2827 = load i32, ptr %2826, align 8, !tbaa !126
  %2828 = icmp ugt i32 %2827, 1
  br i1 %2828, label %2829, label %2834

2829:                                             ; preds = %2821
  %2830 = getelementptr inbounds i8, ptr %545, i64 8
  %2831 = load i32, ptr %2830, align 4, !tbaa !125
  %2832 = getelementptr inbounds i8, ptr %545, i64 12
  %2833 = load i32, ptr %2832, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL23emit_unrolled_binary_opEjjjjPKcbNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2822, i32 noundef %2824, i32 noundef %2831, i32 noundef %2833, ptr noundef nonnull @.str.967, i1 noundef zeroext false, i32 noundef 0)
  br label %.thread3374

2834:                                             ; preds = %2821
  %2835 = load i32, ptr %545, align 4, !tbaa !125
  %2836 = load i32, ptr %2823, align 4, !tbaa !125
  %2837 = getelementptr inbounds i8, ptr %545, i64 8
  %2838 = load i32, ptr %2837, align 4, !tbaa !125
  %2839 = getelementptr inbounds i8, ptr %545, i64 12
  %2840 = load i32, ptr %2839, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2835, i32 noundef %2836, i32 noundef %2838, i32 noundef %2840, ptr noundef nonnull @.str.967)
  br label %.thread3374

2841:                                             ; preds = %566
  %2842 = load i32, ptr %545, align 4, !tbaa !125
  %2843 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2842)
  %2844 = getelementptr inbounds i8, ptr %2843, i64 24
  %2845 = load i32, ptr %2844, align 8, !tbaa !126
  %2846 = icmp ugt i32 %2845, 1
  %2847 = load i32, ptr %545, align 4, !tbaa !125
  %2848 = getelementptr inbounds i8, ptr %545, i64 4
  %2849 = load i32, ptr %2848, align 4, !tbaa !125
  %2850 = getelementptr inbounds i8, ptr %545, i64 8
  %2851 = load i32, ptr %2850, align 4, !tbaa !125
  br i1 %2846, label %2852, label %2853

2852:                                             ; preds = %2841
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2847, i32 noundef %2849, i32 noundef %2851, ptr noundef nonnull @.str.445)
  br label %.thread3374

2853:                                             ; preds = %2841
  tail call void @_ZN11spirv_cross12CompilerGLSL13emit_unary_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2847, i32 noundef %2849, i32 noundef %2851, ptr noundef nonnull @.str.968)
  br label %.thread3374

2854:                                             ; preds = %566
  %2855 = getelementptr inbounds i8, ptr %545, i64 8
  %2856 = load i32, ptr %2855, align 4, !tbaa !125
  %2857 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2856)
  %2858 = getelementptr inbounds i8, ptr %2857, i64 24
  %2859 = load i32, ptr %2858, align 8, !tbaa !126
  %2860 = icmp ugt i32 %2859, 1
  %2861 = load i32, ptr %545, align 4, !tbaa !125
  %2862 = getelementptr inbounds i8, ptr %545, i64 4
  %2863 = load i32, ptr %2862, align 4, !tbaa !125
  %2864 = load i32, ptr %2855, align 4, !tbaa !125
  %2865 = getelementptr inbounds i8, ptr %545, i64 12
  %2866 = load i32, ptr %2865, align 4, !tbaa !125
  %2867 = tail call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef 170)
  br i1 %2860, label %2868, label %2869

2868:                                             ; preds = %2854
  tail call void @_ZN11spirv_cross12CompilerGLSL24emit_binary_func_op_castEjjjjPKcNS_8SPIRType8BaseTypeEb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2861, i32 noundef %2863, i32 noundef %2864, i32 noundef %2866, ptr noundef nonnull @.str.380, i32 noundef %551, i1 noundef zeroext %2867)
  br label %.thread3374

2869:                                             ; preds = %2854
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2861, i32 noundef %2863, i32 noundef %2864, i32 noundef %2866, ptr noundef nonnull @.str.969, i32 noundef %551, i1 noundef zeroext %2867, i1 noundef zeroext %567)
  br label %.thread3374

2870:                                             ; preds = %566, %566
  %2871 = getelementptr inbounds i8, ptr %545, i64 8
  %2872 = load i32, ptr %2871, align 4, !tbaa !125
  %2873 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2872)
  %2874 = getelementptr inbounds i8, ptr %2873, i64 24
  %2875 = load i32, ptr %2874, align 8, !tbaa !126
  %2876 = icmp ugt i32 %2875, 1
  %2877 = load i32, ptr %545, align 4, !tbaa !125
  %2878 = getelementptr inbounds i8, ptr %545, i64 4
  %2879 = load i32, ptr %2878, align 4, !tbaa !125
  %2880 = load i32, ptr %2871, align 4, !tbaa !125
  %2881 = getelementptr inbounds i8, ptr %545, i64 12
  %2882 = load i32, ptr %2881, align 4, !tbaa !125
  br i1 %2876, label %2883, label %2884

2883:                                             ; preds = %2870
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2877, i32 noundef %2879, i32 noundef %2880, i32 noundef %2882, ptr noundef nonnull @.str.380)
  br label %.thread3374

2884:                                             ; preds = %2870
  tail call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2877, i32 noundef %2879, i32 noundef %2880, i32 noundef %2882, ptr noundef nonnull @.str.969)
  br label %.thread3374

2885:                                             ; preds = %566
  %2886 = getelementptr inbounds i8, ptr %545, i64 8
  %2887 = load i32, ptr %2886, align 4, !tbaa !125
  %2888 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2887)
  %2889 = getelementptr inbounds i8, ptr %2888, i64 24
  %2890 = load i32, ptr %2889, align 8, !tbaa !126
  %2891 = icmp ugt i32 %2890, 1
  %2892 = load i32, ptr %545, align 4, !tbaa !125
  %2893 = getelementptr inbounds i8, ptr %545, i64 4
  %2894 = load i32, ptr %2893, align 4, !tbaa !125
  %2895 = load i32, ptr %2886, align 4, !tbaa !125
  %2896 = getelementptr inbounds i8, ptr %545, i64 12
  %2897 = load i32, ptr %2896, align 4, !tbaa !125
  %2898 = tail call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef 171)
  br i1 %2891, label %2899, label %2900

2899:                                             ; preds = %2885
  tail call void @_ZN11spirv_cross12CompilerGLSL24emit_binary_func_op_castEjjjjPKcNS_8SPIRType8BaseTypeEb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2892, i32 noundef %2894, i32 noundef %2895, i32 noundef %2897, ptr noundef nonnull @.str.446, i32 noundef %551, i1 noundef zeroext %2898)
  br label %.thread3374

2900:                                             ; preds = %2885
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2892, i32 noundef %2894, i32 noundef %2895, i32 noundef %2897, ptr noundef nonnull @.str.970, i32 noundef %551, i1 noundef zeroext %2898, i1 noundef zeroext %567)
  br label %.thread3374

2901:                                             ; preds = %566, %566, %566
  %2902 = getelementptr inbounds i8, ptr %545, i64 8
  %2903 = load i32, ptr %2902, align 4, !tbaa !125
  %2904 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2903)
  %2905 = getelementptr inbounds i8, ptr %2904, i64 24
  %2906 = load i32, ptr %2905, align 8, !tbaa !126
  %2907 = icmp ugt i32 %2906, 1
  %2908 = load i32, ptr %545, align 4, !tbaa !125
  %2909 = getelementptr inbounds i8, ptr %545, i64 4
  %2910 = load i32, ptr %2909, align 4, !tbaa !125
  %2911 = load i32, ptr %2902, align 4, !tbaa !125
  %2912 = getelementptr inbounds i8, ptr %545, i64 12
  %2913 = load i32, ptr %2912, align 4, !tbaa !125
  br i1 %2907, label %2914, label %2915

2914:                                             ; preds = %2901
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2908, i32 noundef %2910, i32 noundef %2911, i32 noundef %2913, ptr noundef nonnull @.str.446)
  br label %.thread3374

2915:                                             ; preds = %2901
  tail call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2908, i32 noundef %2910, i32 noundef %2911, i32 noundef %2913, ptr noundef nonnull @.str.970)
  br label %.thread3374

2916:                                             ; preds = %566, %566
  %2917 = icmp eq i32 %568, 172
  %2918 = select i1 %2917, i32 %552, i32 %551
  %2919 = getelementptr inbounds i8, ptr %545, i64 8
  %2920 = load i32, ptr %2919, align 4, !tbaa !125
  %2921 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2920)
  %2922 = getelementptr inbounds i8, ptr %2921, i64 24
  %2923 = load i32, ptr %2922, align 8, !tbaa !126
  %2924 = icmp ugt i32 %2923, 1
  %2925 = load i32, ptr %545, align 4, !tbaa !125
  %2926 = getelementptr inbounds i8, ptr %545, i64 4
  %2927 = load i32, ptr %2926, align 4, !tbaa !125
  %2928 = load i32, ptr %2919, align 4, !tbaa !125
  %2929 = getelementptr inbounds i8, ptr %545, i64 12
  %2930 = load i32, ptr %2929, align 4, !tbaa !125
  %2931 = tail call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %568)
  br i1 %2924, label %2932, label %2933

2932:                                             ; preds = %2916
  tail call void @_ZN11spirv_cross12CompilerGLSL24emit_binary_func_op_castEjjjjPKcNS_8SPIRType8BaseTypeEb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2925, i32 noundef %2927, i32 noundef %2928, i32 noundef %2930, ptr noundef nonnull @.str.397, i32 noundef %2918, i1 noundef zeroext %2931)
  br label %.thread3374

2933:                                             ; preds = %2916
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2925, i32 noundef %2927, i32 noundef %2928, i32 noundef %2930, ptr noundef nonnull @.str.973, i32 noundef %2918, i1 noundef zeroext %2931, i1 noundef zeroext %567)
  br label %.thread3374

2934:                                             ; preds = %566
  %2935 = getelementptr inbounds i8, ptr %545, i64 8
  %2936 = load i32, ptr %2935, align 4, !tbaa !125
  %2937 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2936)
  %2938 = getelementptr inbounds i8, ptr %2937, i64 24
  %2939 = load i32, ptr %2938, align 8, !tbaa !126
  %2940 = icmp ugt i32 %2939, 1
  %2941 = load i32, ptr %545, align 4, !tbaa !125
  %2942 = getelementptr inbounds i8, ptr %545, i64 4
  %2943 = load i32, ptr %2942, align 4, !tbaa !125
  %2944 = load i32, ptr %2935, align 4, !tbaa !125
  %2945 = getelementptr inbounds i8, ptr %545, i64 12
  %2946 = load i32, ptr %2945, align 4, !tbaa !125
  br i1 %2940, label %2947, label %2948

2947:                                             ; preds = %2934
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2941, i32 noundef %2943, i32 noundef %2944, i32 noundef %2946, ptr noundef nonnull @.str.397)
  br label %.thread3374

2948:                                             ; preds = %2934
  tail call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2941, i32 noundef %2943, i32 noundef %2944, i32 noundef %2946, ptr noundef nonnull @.str.973)
  br label %.thread3374

2949:                                             ; preds = %566, %566
  %2950 = icmp eq i32 %568, 174
  %2951 = select i1 %2950, i32 %552, i32 %551
  %2952 = getelementptr inbounds i8, ptr %545, i64 8
  %2953 = load i32, ptr %2952, align 4, !tbaa !125
  %2954 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2953)
  %2955 = getelementptr inbounds i8, ptr %2954, i64 24
  %2956 = load i32, ptr %2955, align 8, !tbaa !126
  %2957 = icmp ugt i32 %2956, 1
  %2958 = load i32, ptr %545, align 4, !tbaa !125
  %2959 = getelementptr inbounds i8, ptr %545, i64 4
  %2960 = load i32, ptr %2959, align 4, !tbaa !125
  %2961 = load i32, ptr %2952, align 4, !tbaa !125
  %2962 = getelementptr inbounds i8, ptr %545, i64 12
  %2963 = load i32, ptr %2962, align 4, !tbaa !125
  %2964 = tail call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %568)
  br i1 %2957, label %2965, label %2966

2965:                                             ; preds = %2949
  tail call void @_ZN11spirv_cross12CompilerGLSL24emit_binary_func_op_castEjjjjPKcNS_8SPIRType8BaseTypeEb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2958, i32 noundef %2960, i32 noundef %2961, i32 noundef %2963, ptr noundef nonnull @.str.398, i32 noundef %2951, i1 noundef zeroext %2964)
  br label %.thread3374

2966:                                             ; preds = %2949
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2958, i32 noundef %2960, i32 noundef %2961, i32 noundef %2963, ptr noundef nonnull @.str.974, i32 noundef %2951, i1 noundef zeroext %2964, i1 noundef zeroext %567)
  br label %.thread3374

2967:                                             ; preds = %566
  %2968 = getelementptr inbounds i8, ptr %545, i64 8
  %2969 = load i32, ptr %2968, align 4, !tbaa !125
  %2970 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2969)
  %2971 = getelementptr inbounds i8, ptr %2970, i64 24
  %2972 = load i32, ptr %2971, align 8, !tbaa !126
  %2973 = icmp ugt i32 %2972, 1
  %2974 = load i32, ptr %545, align 4, !tbaa !125
  %2975 = getelementptr inbounds i8, ptr %545, i64 4
  %2976 = load i32, ptr %2975, align 4, !tbaa !125
  %2977 = load i32, ptr %2968, align 4, !tbaa !125
  %2978 = getelementptr inbounds i8, ptr %545, i64 12
  %2979 = load i32, ptr %2978, align 4, !tbaa !125
  br i1 %2973, label %2980, label %2981

2980:                                             ; preds = %2967
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2974, i32 noundef %2976, i32 noundef %2977, i32 noundef %2979, ptr noundef nonnull @.str.398)
  br label %.thread3374

2981:                                             ; preds = %2967
  tail call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2974, i32 noundef %2976, i32 noundef %2977, i32 noundef %2979, ptr noundef nonnull @.str.974)
  br label %.thread3374

2982:                                             ; preds = %566, %566
  %2983 = icmp eq i32 %568, 176
  %2984 = select i1 %2983, i32 %552, i32 %551
  %2985 = getelementptr inbounds i8, ptr %545, i64 8
  %2986 = load i32, ptr %2985, align 4, !tbaa !125
  %2987 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %2986)
  %2988 = getelementptr inbounds i8, ptr %2987, i64 24
  %2989 = load i32, ptr %2988, align 8, !tbaa !126
  %2990 = icmp ugt i32 %2989, 1
  %2991 = load i32, ptr %545, align 4, !tbaa !125
  %2992 = getelementptr inbounds i8, ptr %545, i64 4
  %2993 = load i32, ptr %2992, align 4, !tbaa !125
  %2994 = load i32, ptr %2985, align 4, !tbaa !125
  %2995 = getelementptr inbounds i8, ptr %545, i64 12
  %2996 = load i32, ptr %2995, align 4, !tbaa !125
  %2997 = tail call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %568)
  br i1 %2990, label %2998, label %2999

2998:                                             ; preds = %2982
  tail call void @_ZN11spirv_cross12CompilerGLSL24emit_binary_func_op_castEjjjjPKcNS_8SPIRType8BaseTypeEb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2991, i32 noundef %2993, i32 noundef %2994, i32 noundef %2996, ptr noundef nonnull @.str.424, i32 noundef %2984, i1 noundef zeroext %2997)
  br label %.thread3374

2999:                                             ; preds = %2982
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2991, i32 noundef %2993, i32 noundef %2994, i32 noundef %2996, ptr noundef nonnull @.str.971, i32 noundef %2984, i1 noundef zeroext %2997, i1 noundef zeroext %567)
  br label %.thread3374

3000:                                             ; preds = %566
  %3001 = getelementptr inbounds i8, ptr %545, i64 8
  %3002 = load i32, ptr %3001, align 4, !tbaa !125
  %3003 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %3002)
  %3004 = getelementptr inbounds i8, ptr %3003, i64 24
  %3005 = load i32, ptr %3004, align 8, !tbaa !126
  %3006 = icmp ugt i32 %3005, 1
  %3007 = load i32, ptr %545, align 4, !tbaa !125
  %3008 = getelementptr inbounds i8, ptr %545, i64 4
  %3009 = load i32, ptr %3008, align 4, !tbaa !125
  %3010 = load i32, ptr %3001, align 4, !tbaa !125
  %3011 = getelementptr inbounds i8, ptr %545, i64 12
  %3012 = load i32, ptr %3011, align 4, !tbaa !125
  br i1 %3006, label %3013, label %3014

3013:                                             ; preds = %3000
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3007, i32 noundef %3009, i32 noundef %3010, i32 noundef %3012, ptr noundef nonnull @.str.424)
  br label %.thread3374

3014:                                             ; preds = %3000
  tail call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3007, i32 noundef %3009, i32 noundef %3010, i32 noundef %3012, ptr noundef nonnull @.str.971)
  br label %.thread3374

3015:                                             ; preds = %566, %566
  %3016 = icmp eq i32 %568, 178
  %3017 = select i1 %3016, i32 %552, i32 %551
  %3018 = getelementptr inbounds i8, ptr %545, i64 8
  %3019 = load i32, ptr %3018, align 4, !tbaa !125
  %3020 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %3019)
  %3021 = getelementptr inbounds i8, ptr %3020, i64 24
  %3022 = load i32, ptr %3021, align 8, !tbaa !126
  %3023 = icmp ugt i32 %3022, 1
  %3024 = load i32, ptr %545, align 4, !tbaa !125
  %3025 = getelementptr inbounds i8, ptr %545, i64 4
  %3026 = load i32, ptr %3025, align 4, !tbaa !125
  %3027 = load i32, ptr %3018, align 4, !tbaa !125
  %3028 = getelementptr inbounds i8, ptr %545, i64 12
  %3029 = load i32, ptr %3028, align 4, !tbaa !125
  %3030 = tail call noundef zeroext i1 @_ZN11spirv_crossL24opcode_is_sign_invariantEN3spv2OpE(i32 noundef %568)
  br i1 %3023, label %3031, label %3032

3031:                                             ; preds = %3015
  tail call void @_ZN11spirv_cross12CompilerGLSL24emit_binary_func_op_castEjjjjPKcNS_8SPIRType8BaseTypeEb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3024, i32 noundef %3026, i32 noundef %3027, i32 noundef %3029, ptr noundef nonnull @.str.425, i32 noundef %3017, i1 noundef zeroext %3030)
  br label %.thread3374

3032:                                             ; preds = %3015
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_op_castEjjjjPKcNS_8SPIRType8BaseTypeEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3024, i32 noundef %3026, i32 noundef %3027, i32 noundef %3029, ptr noundef nonnull @.str.972, i32 noundef %3017, i1 noundef zeroext %3030, i1 noundef zeroext %567)
  br label %.thread3374

3033:                                             ; preds = %566
  %3034 = getelementptr inbounds i8, ptr %545, i64 8
  %3035 = load i32, ptr %3034, align 4, !tbaa !125
  %3036 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %3035)
  %3037 = getelementptr inbounds i8, ptr %3036, i64 24
  %3038 = load i32, ptr %3037, align 8, !tbaa !126
  %3039 = icmp ugt i32 %3038, 1
  %3040 = load i32, ptr %545, align 4, !tbaa !125
  %3041 = getelementptr inbounds i8, ptr %545, i64 4
  %3042 = load i32, ptr %3041, align 4, !tbaa !125
  %3043 = load i32, ptr %3034, align 4, !tbaa !125
  %3044 = getelementptr inbounds i8, ptr %545, i64 12
  %3045 = load i32, ptr %3044, align 4, !tbaa !125
  br i1 %3039, label %3046, label %3047

3046:                                             ; preds = %3033
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3040, i32 noundef %3042, i32 noundef %3043, i32 noundef %3045, ptr noundef nonnull @.str.425)
  br label %.thread3374

3047:                                             ; preds = %3033
  tail call void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3040, i32 noundef %3042, i32 noundef %3043, i32 noundef %3045, ptr noundef nonnull @.str.972)
  br label %.thread3374

3048:                                             ; preds = %566, %566, %566, %566
  %3049 = icmp eq i32 %568, 114
  %3050 = icmp eq i32 %568, 111
  %or.cond14 = or i1 %3049, %3050
  %3051 = select i1 %or.cond14, i32 %551, i32 %552
  %3052 = load i32, ptr %545, align 4, !tbaa !125
  %3053 = getelementptr inbounds i8, ptr %545, i64 4
  %3054 = load i32, ptr %3053, align 4, !tbaa !125
  %3055 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %3052)
  %3056 = getelementptr inbounds i8, ptr %545, i64 8
  %3057 = load i32, ptr %3056, align 4, !tbaa !125
  %3058 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %3057)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %188) #8
  call void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %188, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %3055)
  %3059 = getelementptr inbounds i8, ptr %3058, i64 20
  %3060 = load i32, ptr %3059, align 4, !tbaa !209
  %3061 = getelementptr inbounds i8, ptr %3055, i64 20
  %3062 = load i32, ptr %3061, align 4, !tbaa !209
  %3063 = icmp ult i32 %3060, %3062
  br i1 %3063, label %3066, label %3064

3064:                                             ; preds = %3048
  %3065 = call noundef zeroext i1 @_ZN11spirv_crossL22type_is_floating_pointERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(336) %3055)
  br i1 %3065, label %3066, label %3073

3066:                                             ; preds = %3064, %3048
  %3067 = load i32, ptr %3056, align 4, !tbaa !125
  %3068 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %188) #8
  %3069 = getelementptr inbounds i8, ptr %3055, i64 16
  %3070 = load i32, ptr %3069, align 8, !tbaa !145
  invoke void @_ZN11spirv_cross12CompilerGLSL23emit_unary_func_op_castEjjjPKcNS_8SPIRType8BaseTypeES4_(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3052, i32 noundef %3054, i32 noundef %3067, ptr noundef %3068, i32 noundef %3051, i32 noundef %3070)
          to label %3076 unwind label %3071

3071:                                             ; preds = %3073, %3066
  %3072 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %188) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %188) #8
  br label %6424

3073:                                             ; preds = %3064
  %3074 = load i32, ptr %3056, align 4, !tbaa !125
  %3075 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %188) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3052, i32 noundef %3054, i32 noundef %3074, ptr noundef %3075)
          to label %3076 unwind label %3071

3076:                                             ; preds = %3073, %3066
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %188) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %188) #8
  br label %.thread3374

3077:                                             ; preds = %566, %566
  %3078 = load i32, ptr %545, align 4, !tbaa !125
  %3079 = getelementptr inbounds i8, ptr %545, i64 4
  %3080 = load i32, ptr %3079, align 4, !tbaa !125
  %3081 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %3078)
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %189) #8
  call void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %189, ptr noundef nonnull align 8 dereferenceable(336) %3081)
  %3082 = getelementptr inbounds i8, ptr %545, i64 8
  %3083 = load i32, ptr %3082, align 4, !tbaa !125
  %3084 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %3083)
          to label %3085 unwind label %3103

3085:                                             ; preds = %3077
  %3086 = icmp eq i32 %568, 110
  %3087 = getelementptr inbounds i8, ptr %3081, i64 20
  %3088 = load i32, ptr %3087, align 4, !tbaa !209
  br i1 %3086, label %3089, label %3091

3089:                                             ; preds = %3085
  %3090 = invoke noundef i32 @_ZN11spirv_crossL18to_signed_basetypeEj(i32 noundef %3088)
          to label %3093 unwind label %3103

3091:                                             ; preds = %3085
  %3092 = invoke noundef i32 @_ZN11spirv_crossL20to_unsigned_basetypeEj(i32 noundef %3088)
          to label %3093 unwind label %3103

3093:                                             ; preds = %3091, %3089
  %3094 = phi i32 [ %3090, %3089 ], [ %3092, %3091 ]
  %3095 = getelementptr inbounds i8, ptr %189, i64 16
  store i32 %3094, ptr %3095, align 8, !tbaa !145
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %190) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %190, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %189)
          to label %3096 unwind label %3105

3096:                                             ; preds = %3093
  %3097 = load i32, ptr %3082, align 4, !tbaa !125
  %3098 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %190) #8
  %3099 = getelementptr inbounds i8, ptr %3084, i64 16
  %3100 = load i32, ptr %3099, align 8, !tbaa !145
  %3101 = load i32, ptr %3095, align 8, !tbaa !145
  invoke void @_ZN11spirv_cross12CompilerGLSL23emit_unary_func_op_castEjjjPKcNS_8SPIRType8BaseTypeES4_(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3078, i32 noundef %3080, i32 noundef %3097, ptr noundef %3098, i32 noundef %3100, i32 noundef %3101)
          to label %3102 unwind label %3107

3102:                                             ; preds = %3096
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %190) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %190) #8
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %189) #8
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %189) #8
  br label %.thread3374

3103:                                             ; preds = %3091, %3089, %3077
  %3104 = landingpad { ptr, i32 }
          cleanup
  br label %3110

3105:                                             ; preds = %3093
  %3106 = landingpad { ptr, i32 }
          cleanup
  br label %3109

3107:                                             ; preds = %3096
  %3108 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %190) #8
  br label %3109

3109:                                             ; preds = %3107, %3105
  %.pn2840 = phi { ptr, i32 } [ %3108, %3107 ], [ %3106, %3105 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %190) #8
  br label %3110

3110:                                             ; preds = %3109, %3103
  %.pn2840.pn = phi { ptr, i32 } [ %.pn2840, %3109 ], [ %3104, %3103 ]
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %189) #8
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %189) #8
  br label %6424

3111:                                             ; preds = %566
  %3112 = load i32, ptr %545, align 4, !tbaa !125
  %3113 = getelementptr inbounds i8, ptr %545, i64 4
  %3114 = load i32, ptr %3113, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %191) #8
  %3115 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %3112)
  call void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %191, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %3115)
  %3116 = getelementptr inbounds i8, ptr %545, i64 8
  %3117 = load i32, ptr %3116, align 4, !tbaa !125
  %3118 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %191) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3112, i32 noundef %3114, i32 noundef %3117, ptr noundef %3118)
          to label %3119 unwind label %3120

3119:                                             ; preds = %3111
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %191) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %191) #8
  br label %.thread3374

3120:                                             ; preds = %3111
  %3121 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %191) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %191) #8
  br label %6424

3122:                                             ; preds = %566
  %3123 = load i32, ptr %545, align 4, !tbaa !125
  %3124 = getelementptr inbounds i8, ptr %545, i64 4
  %3125 = load i32, ptr %3124, align 4, !tbaa !125
  %3126 = getelementptr inbounds i8, ptr %545, i64 8
  %3127 = load i32, ptr %3126, align 4, !tbaa !125
  %3128 = load ptr, ptr %0, align 8, !tbaa !142
  %3129 = getelementptr inbounds i8, ptr %3128, i64 344
  %3130 = load ptr, ptr %3129, align 8
  %3131 = tail call noundef zeroext i1 %3130(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3123, i32 noundef %3125, i32 noundef %3127)
  br i1 %3131, label %.thread3374, label %3132

3132:                                             ; preds = %3122
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %192) #8
  %3133 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %3123)
  %3134 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %3127)
  %3135 = load ptr, ptr %0, align 8, !tbaa !142
  %3136 = getelementptr inbounds i8, ptr %3135, i64 472
  %3137 = load ptr, ptr %3136, align 8
  call void %3137(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %192, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %3133, ptr noundef nonnull align 8 dereferenceable(336) %3134)
  %3138 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %192) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3123, i32 noundef %3125, i32 noundef %3127, ptr noundef %3138)
          to label %3139 unwind label %3140

3139:                                             ; preds = %3132
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %192) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %192) #8
  br label %.thread3374

3140:                                             ; preds = %3132
  %3141 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %192) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %192) #8
  br label %6424

3142:                                             ; preds = %566
  %3143 = load i32, ptr %545, align 4, !tbaa !125
  %3144 = getelementptr inbounds i8, ptr %545, i64 4
  %3145 = load i32, ptr %3144, align 4, !tbaa !125
  %3146 = getelementptr inbounds i8, ptr %545, i64 8
  %3147 = load i32, ptr %3146, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %193) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %193) #8
  %3148 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %3143)
          to label %3149 unwind label %3152

3149:                                             ; preds = %3142
  %3150 = getelementptr inbounds i8, ptr %3148, i64 24
  %3151 = load i32, ptr %3150, align 8, !tbaa !126
  switch i32 %3151, label %3214 [
    i32 1, label %3154
    i32 2, label %3163
    i32 3, label %3172
    i32 4, label %3193
  ]

3152:                                             ; preds = %3223, %3221, %3219, %3216, %3142
  %3153 = landingpad { ptr, i32 }
          cleanup
  br label %3225

3154:                                             ; preds = %3149
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %194) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %195) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %195, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3147, i1 noundef zeroext true)
          to label %3155 unwind label %3158

3155:                                             ; preds = %3154
  invoke void @_ZN11spirv_cross4joinIJRA34_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA6_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %194, ptr noundef nonnull align 1 dereferenceable(34) @.str.1393, ptr noundef nonnull align 8 dereferenceable(32) %195, ptr noundef nonnull align 1 dereferenceable(6) @.str.1394)
          to label %3156 unwind label %3160

3156:                                             ; preds = %3155
  %3157 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %193, ptr noundef nonnull align 8 dereferenceable(32) %194) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %194) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %195) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %195) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %194) #8
  br label %3219

3158:                                             ; preds = %3154
  %3159 = landingpad { ptr, i32 }
          cleanup
  br label %3162

3160:                                             ; preds = %3155
  %3161 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %195) #8
  br label %3162

3162:                                             ; preds = %3160, %3158
  %.pn2836 = phi { ptr, i32 } [ %3161, %3160 ], [ %3159, %3158 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %195) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %194) #8
  br label %3225

3163:                                             ; preds = %3149
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %196) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %197) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %197, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3147, i1 noundef zeroext true)
          to label %3164 unwind label %3167

3164:                                             ; preds = %3163
  invoke void @_ZN11spirv_cross4joinIJRA29_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %196, ptr noundef nonnull align 1 dereferenceable(29) @.str.1395, ptr noundef nonnull align 8 dereferenceable(32) %197, ptr noundef nonnull align 1 dereferenceable(3) @.str.1016)
          to label %3165 unwind label %3169

3165:                                             ; preds = %3164
  %3166 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %193, ptr noundef nonnull align 8 dereferenceable(32) %196) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %196) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %197) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %197) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %196) #8
  br label %3219

3167:                                             ; preds = %3163
  %3168 = landingpad { ptr, i32 }
          cleanup
  br label %3171

3169:                                             ; preds = %3164
  %3170 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %197) #8
  br label %3171

3171:                                             ; preds = %3169, %3167
  %.pn2834 = phi { ptr, i32 } [ %3170, %3169 ], [ %3168, %3167 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %197) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %196) #8
  br label %3225

3172:                                             ; preds = %3149
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %198) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %199) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %199, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3147, i1 noundef zeroext true)
          to label %3173 unwind label %3179

3173:                                             ; preds = %3172
  invoke void @_ZN11spirv_cross4joinIJRA29_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA6_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %198, ptr noundef nonnull align 1 dereferenceable(29) @.str.1395, ptr noundef nonnull align 8 dereferenceable(32) %199, ptr noundef nonnull align 1 dereferenceable(6) @.str.1396)
          to label %3174 unwind label %3181

3174:                                             ; preds = %3173
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %199) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %199) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %200) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %201) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %201, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3147, i1 noundef zeroext true)
          to label %3175 unwind label %3184

3175:                                             ; preds = %3174
  invoke void @_ZN11spirv_cross4joinIJRA29_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA8_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %200, ptr noundef nonnull align 1 dereferenceable(29) @.str.1395, ptr noundef nonnull align 8 dereferenceable(32) %201, ptr noundef nonnull align 1 dereferenceable(8) @.str.1397)
          to label %3176 unwind label %3186

3176:                                             ; preds = %3175
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %201) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %201) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %202) #8
  invoke void @_ZN11spirv_cross4joinIJRA6_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_SA_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %202, ptr noundef nonnull align 1 dereferenceable(6) @.str.1089, ptr noundef nonnull align 8 dereferenceable(32) %198, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %200, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %3177 unwind label %3189

3177:                                             ; preds = %3176
  %3178 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %193, ptr noundef nonnull align 8 dereferenceable(32) %202) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %202) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %202) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %200) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %200) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %198) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %198) #8
  br label %3219

3179:                                             ; preds = %3172
  %3180 = landingpad { ptr, i32 }
          cleanup
  br label %3183

3181:                                             ; preds = %3173
  %3182 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %199) #8
  br label %3183

3183:                                             ; preds = %3181, %3179
  %.pn2827 = phi { ptr, i32 } [ %3182, %3181 ], [ %3180, %3179 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %199) #8
  br label %3192

3184:                                             ; preds = %3174
  %3185 = landingpad { ptr, i32 }
          cleanup
  br label %3188

3186:                                             ; preds = %3175
  %3187 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %201) #8
  br label %3188

3188:                                             ; preds = %3186, %3184
  %.pn2829 = phi { ptr, i32 } [ %3187, %3186 ], [ %3185, %3184 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %201) #8
  br label %3191

3189:                                             ; preds = %3176
  %3190 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %202) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %200) #8
  br label %3191

3191:                                             ; preds = %3189, %3188
  %.pn2831 = phi { ptr, i32 } [ %3190, %3189 ], [ %.pn2829, %3188 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %200) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %198) #8
  br label %3192

3192:                                             ; preds = %3191, %3183
  %.pn2831.pn = phi { ptr, i32 } [ %.pn2831, %3191 ], [ %.pn2827, %3183 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %198) #8
  br label %3225

3193:                                             ; preds = %3149
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %203) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %204) #8
  invoke 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 %3147, i1 noundef zeroext true)
          to label %3194 unwind label %3200

3194:                                             ; preds = %3193
  invoke void @_ZN11spirv_cross4joinIJRA29_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA6_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %203, ptr noundef nonnull align 1 dereferenceable(29) @.str.1395, ptr noundef nonnull align 8 dereferenceable(32) %204, ptr noundef nonnull align 1 dereferenceable(6) @.str.1396)
          to label %3195 unwind label %3202

3195:                                             ; preds = %3194
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %204) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %204) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %205) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %206) #8
  invoke 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 %3147, i1 noundef zeroext true)
          to label %3196 unwind label %3205

3196:                                             ; preds = %3195
  invoke void @_ZN11spirv_cross4joinIJRA29_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA6_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %205, ptr noundef nonnull align 1 dereferenceable(29) @.str.1395, ptr noundef nonnull align 8 dereferenceable(32) %206, ptr noundef nonnull align 1 dereferenceable(6) @.str.1398)
          to label %3197 unwind label %3207

3197:                                             ; preds = %3196
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %206) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %206) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %207) #8
  invoke void @_ZN11spirv_cross4joinIJRA6_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_SA_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %207, ptr noundef nonnull align 1 dereferenceable(6) @.str.1399, ptr noundef nonnull align 8 dereferenceable(32) %203, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %205, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %3198 unwind label %3210

3198:                                             ; preds = %3197
  %3199 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %193, ptr noundef nonnull align 8 dereferenceable(32) %207) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %207) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %207) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %205) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %205) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %203) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %203) #8
  br label %3219

3200:                                             ; preds = %3193
  %3201 = landingpad { ptr, i32 }
          cleanup
  br label %3204

3202:                                             ; preds = %3194
  %3203 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %204) #8
  br label %3204

3204:                                             ; preds = %3202, %3200
  %.pn2820 = phi { ptr, i32 } [ %3203, %3202 ], [ %3201, %3200 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %204) #8
  br label %3213

3205:                                             ; preds = %3195
  %3206 = landingpad { ptr, i32 }
          cleanup
  br label %3209

3207:                                             ; preds = %3196
  %3208 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %206) #8
  br label %3209

3209:                                             ; preds = %3207, %3205
  %.pn2822 = phi { ptr, i32 } [ %3208, %3207 ], [ %3206, %3205 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %206) #8
  br label %3212

3210:                                             ; preds = %3197
  %3211 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %207) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %205) #8
  br label %3212

3212:                                             ; preds = %3210, %3209
  %.pn2824 = phi { ptr, i32 } [ %3211, %3210 ], [ %.pn2822, %3209 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %205) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %203) #8
  br label %3213

3213:                                             ; preds = %3212, %3204
  %.pn2824.pn = phi { ptr, i32 } [ %.pn2824, %3212 ], [ %.pn2820, %3204 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %203) #8
  br label %3225

3214:                                             ; preds = %3149
  %3215 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %3215, ptr noundef nonnull @.str.1400)
          to label %3216 unwind label %3217

3216:                                             ; preds = %3214
  invoke void @__cxa_throw(ptr nonnull %3215, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
          to label %6425 unwind label %3152

3217:                                             ; preds = %3214
  %3218 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %3215) #8
  br label %3225

3219:                                             ; preds = %3198, %3177, %3165, %3156
  %3220 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3147)
          to label %3221 unwind label %3152

3221:                                             ; preds = %3219
  %3222 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3143, i32 noundef %3145, ptr noundef nonnull align 8 dereferenceable(32) %193, i1 noundef zeroext %3220, i1 noundef zeroext false)
          to label %3223 unwind label %3152

3223:                                             ; preds = %3221
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %3145, i32 noundef %3147)
          to label %3224 unwind label %3152

3224:                                             ; preds = %3223
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %193) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %193) #8
  br label %.thread3374

3225:                                             ; preds = %3217, %3213, %3192, %3171, %3162, %3152
  %.pn2838 = phi { ptr, i32 } [ %3153, %3152 ], [ %3218, %3217 ], [ %.pn2824.pn, %3213 ], [ %.pn2831.pn, %3192 ], [ %.pn2834, %3171 ], [ %.pn2836, %3162 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %193) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %193) #8
  br label %6424

3226:                                             ; preds = %566
  %3227 = load i32, ptr %545, align 4, !tbaa !125
  %3228 = getelementptr inbounds i8, ptr %545, i64 4
  %3229 = load i32, ptr %3228, align 4, !tbaa !125
  %3230 = getelementptr inbounds i8, ptr %545, i64 8
  %3231 = load i32, ptr %3230, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3227, i32 noundef %3229, i32 noundef %3231, ptr noundef nonnull @.str.368)
  %3232 = tail call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL12is_legacy_esEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
  br i1 %3232, label %3233, label %3241

3233:                                             ; preds = %3226
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %208) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %209) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %209) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %208, ptr noundef nonnull @.str.1401, ptr noundef nonnull align 1 dereferenceable(1) %209)
          to label %3234 unwind label %3236

3234:                                             ; preds = %3233
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %208)
          to label %3235 unwind label %3238

3235:                                             ; preds = %3234
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %208) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %209) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %209) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %208) #8
  br label %3241

3236:                                             ; preds = %3233
  %3237 = landingpad { ptr, i32 }
          cleanup
  br label %3240

3238:                                             ; preds = %3234
  %3239 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %208) #8
  br label %3240

3240:                                             ; preds = %3238, %3236
  %.pn2818 = phi { ptr, i32 } [ %3239, %3238 ], [ %3237, %3236 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %209) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %209) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %208) #8
  br label %6424

3241:                                             ; preds = %3235, %3226
  %3242 = load i32, ptr %3228, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3242)
  br label %.thread3374

3243:                                             ; preds = %566
  %3244 = load i32, ptr %545, align 4, !tbaa !125
  %3245 = getelementptr inbounds i8, ptr %545, i64 4
  %3246 = load i32, ptr %3245, align 4, !tbaa !125
  %3247 = getelementptr inbounds i8, ptr %545, i64 8
  %3248 = load i32, ptr %3247, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3244, i32 noundef %3246, i32 noundef %3248, ptr noundef nonnull @.str.371)
  %3249 = tail call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL12is_legacy_esEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
  br i1 %3249, label %3250, label %3258

3250:                                             ; preds = %3243
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %210) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %211) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %211) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %210, ptr noundef nonnull @.str.1401, ptr noundef nonnull align 1 dereferenceable(1) %211)
          to label %3251 unwind label %3253

3251:                                             ; preds = %3250
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %210)
          to label %3252 unwind label %3255

3252:                                             ; preds = %3251
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %210) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %211) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %211) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %210) #8
  br label %3258

3253:                                             ; preds = %3250
  %3254 = landingpad { ptr, i32 }
          cleanup
  br label %3257

3255:                                             ; preds = %3251
  %3256 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %210) #8
  br label %3257

3257:                                             ; preds = %3255, %3253
  %.pn2816 = phi { ptr, i32 } [ %3256, %3255 ], [ %3254, %3253 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %211) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %211) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %210) #8
  br label %6424

3258:                                             ; preds = %3252, %3243
  %3259 = load i32, ptr %3245, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3259)
  br label %.thread3374

3260:                                             ; preds = %566
  %3261 = load i32, ptr %545, align 4, !tbaa !125
  %3262 = getelementptr inbounds i8, ptr %545, i64 4
  %3263 = load i32, ptr %3262, align 4, !tbaa !125
  %3264 = getelementptr inbounds i8, ptr %545, i64 8
  %3265 = load i32, ptr %3264, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3261, i32 noundef %3263, i32 noundef %3265, ptr noundef nonnull @.str.370)
  %3266 = getelementptr inbounds i8, ptr %0, i64 7640
  %3267 = load i8, ptr %3266, align 8, !tbaa !207, !range !123, !noundef !124
  %3268 = trunc nuw i8 %3267 to i1
  br i1 %3268, label %3269, label %3274

3269:                                             ; preds = %3260
  %3270 = tail call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %3270, ptr noundef nonnull @.str.1402)
          to label %3271 unwind label %3272

3271:                                             ; preds = %3269
  tail call void @__cxa_throw(ptr nonnull %3270, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
  unreachable

3272:                                             ; preds = %3269
  %3273 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %3270) #8
  br label %6424

3274:                                             ; preds = %3260
  %3275 = getelementptr inbounds i8, ptr %0, i64 7636
  %3276 = load i32, ptr %3275, align 4, !tbaa !204
  %3277 = icmp ult i32 %3276, 450
  br i1 %3277, label %3278, label %3286

3278:                                             ; preds = %3274
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %212) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %213) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %213) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %212, ptr noundef nonnull @.str.1403, ptr noundef nonnull align 1 dereferenceable(1) %213)
          to label %3279 unwind label %3281

3279:                                             ; preds = %3278
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %212)
          to label %3280 unwind label %3283

3280:                                             ; preds = %3279
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %212) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %213) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %213) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %212) #8
  br label %3286

3281:                                             ; preds = %3278
  %3282 = landingpad { ptr, i32 }
          cleanup
  br label %3285

3283:                                             ; preds = %3279
  %3284 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %212) #8
  br label %3285

3285:                                             ; preds = %3283, %3281
  %.pn2814 = phi { ptr, i32 } [ %3284, %3283 ], [ %3282, %3281 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %213) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %213) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %212) #8
  br label %6424

3286:                                             ; preds = %3280, %3274
  %3287 = load i32, ptr %3262, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3287)
  br label %.thread3374

3288:                                             ; preds = %566
  %3289 = load i32, ptr %545, align 4, !tbaa !125
  %3290 = getelementptr inbounds i8, ptr %545, i64 4
  %3291 = load i32, ptr %3290, align 4, !tbaa !125
  %3292 = getelementptr inbounds i8, ptr %545, i64 8
  %3293 = load i32, ptr %3292, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3289, i32 noundef %3291, i32 noundef %3293, ptr noundef nonnull @.str.373)
  %3294 = getelementptr inbounds i8, ptr %0, i64 7640
  %3295 = load i8, ptr %3294, align 8, !tbaa !207, !range !123, !noundef !124
  %3296 = trunc nuw i8 %3295 to i1
  br i1 %3296, label %3297, label %3302

3297:                                             ; preds = %3288
  %3298 = tail call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %3298, ptr noundef nonnull @.str.1402)
          to label %3299 unwind label %3300

3299:                                             ; preds = %3297
  tail call void @__cxa_throw(ptr nonnull %3298, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
  unreachable

3300:                                             ; preds = %3297
  %3301 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %3298) #8
  br label %6424

3302:                                             ; preds = %3288
  %3303 = getelementptr inbounds i8, ptr %0, i64 7636
  %3304 = load i32, ptr %3303, align 4, !tbaa !204
  %3305 = icmp ult i32 %3304, 450
  br i1 %3305, label %3306, label %3314

3306:                                             ; preds = %3302
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %214) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %215) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %215) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %214, ptr noundef nonnull @.str.1403, ptr noundef nonnull align 1 dereferenceable(1) %215)
          to label %3307 unwind label %3309

3307:                                             ; preds = %3306
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %214)
          to label %3308 unwind label %3311

3308:                                             ; preds = %3307
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %214) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %215) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %215) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %214) #8
  br label %3314

3309:                                             ; preds = %3306
  %3310 = landingpad { ptr, i32 }
          cleanup
  br label %3313

3311:                                             ; preds = %3307
  %3312 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %214) #8
  br label %3313

3313:                                             ; preds = %3311, %3309
  %.pn2812 = phi { ptr, i32 } [ %3312, %3311 ], [ %3310, %3309 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %215) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %215) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %214) #8
  br label %6424

3314:                                             ; preds = %3308, %3302
  %3315 = load i32, ptr %3290, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3315)
  br label %.thread3374

3316:                                             ; preds = %566
  %3317 = getelementptr inbounds i8, ptr %0, i64 7640
  %3318 = load i8, ptr %3317, align 8, !tbaa !207, !range !123, !noundef !124
  %3319 = trunc nuw i8 %3318 to i1
  br i1 %3319, label %3320, label %3325

3320:                                             ; preds = %3316
  %3321 = tail call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %3321, ptr noundef nonnull @.str.1402)
          to label %3322 unwind label %3323

3322:                                             ; preds = %3320
  tail call void @__cxa_throw(ptr nonnull %3321, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
  unreachable

3323:                                             ; preds = %3320
  %3324 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %3321) #8
  br label %6424

3325:                                             ; preds = %3316
  %3326 = getelementptr inbounds i8, ptr %0, i64 7636
  %3327 = load i32, ptr %545, align 4, !tbaa !125
  %3328 = getelementptr inbounds i8, ptr %545, i64 4
  %3329 = load i32, ptr %3328, align 4, !tbaa !125
  %3330 = getelementptr inbounds i8, ptr %545, i64 8
  %3331 = load i32, ptr %3330, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3327, i32 noundef %3329, i32 noundef %3331, ptr noundef nonnull @.str.369)
  %3332 = load i32, ptr %3326, align 4, !tbaa !204
  %3333 = icmp ult i32 %3332, 450
  br i1 %3333, label %3334, label %3342

3334:                                             ; preds = %3325
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %216) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %217) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %217) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %216, ptr noundef nonnull @.str.1403, ptr noundef nonnull align 1 dereferenceable(1) %217)
          to label %3335 unwind label %3337

3335:                                             ; preds = %3334
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %216)
          to label %3336 unwind label %3339

3336:                                             ; preds = %3335
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %216) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %217) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %217) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %216) #8
  br label %3342

3337:                                             ; preds = %3334
  %3338 = landingpad { ptr, i32 }
          cleanup
  br label %3341

3339:                                             ; preds = %3335
  %3340 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %216) #8
  br label %3341

3341:                                             ; preds = %3339, %3337
  %.pn2810 = phi { ptr, i32 } [ %3340, %3339 ], [ %3338, %3337 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %217) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %217) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %216) #8
  br label %6424

3342:                                             ; preds = %3336, %3325
  %3343 = load i32, ptr %3328, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3343)
  br label %.thread3374

3344:                                             ; preds = %566
  %3345 = load i32, ptr %545, align 4, !tbaa !125
  %3346 = getelementptr inbounds i8, ptr %545, i64 4
  %3347 = load i32, ptr %3346, align 4, !tbaa !125
  %3348 = getelementptr inbounds i8, ptr %545, i64 8
  %3349 = load i32, ptr %3348, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3345, i32 noundef %3347, i32 noundef %3349, ptr noundef nonnull @.str.372)
  %3350 = getelementptr inbounds i8, ptr %0, i64 7640
  %3351 = load i8, ptr %3350, align 8, !tbaa !207, !range !123, !noundef !124
  %3352 = trunc nuw i8 %3351 to i1
  br i1 %3352, label %3353, label %3358

3353:                                             ; preds = %3344
  %3354 = tail call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %3354, ptr noundef nonnull @.str.1402)
          to label %3355 unwind label %3356

3355:                                             ; preds = %3353
  tail call void @__cxa_throw(ptr nonnull %3354, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
  unreachable

3356:                                             ; preds = %3353
  %3357 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %3354) #8
  br label %6424

3358:                                             ; preds = %3344
  %3359 = getelementptr inbounds i8, ptr %0, i64 7636
  %3360 = load i32, ptr %3359, align 4, !tbaa !204
  %3361 = icmp ult i32 %3360, 450
  br i1 %3361, label %3362, label %3370

3362:                                             ; preds = %3358
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %218) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %219) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %219) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %218, ptr noundef nonnull @.str.1403, ptr noundef nonnull align 1 dereferenceable(1) %219)
          to label %3363 unwind label %3365

3363:                                             ; preds = %3362
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %218)
          to label %3364 unwind label %3367

3364:                                             ; preds = %3363
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %218) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %219) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %219) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %218) #8
  br label %3370

3365:                                             ; preds = %3362
  %3366 = landingpad { ptr, i32 }
          cleanup
  br label %3369

3367:                                             ; preds = %3363
  %3368 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %218) #8
  br label %3369

3369:                                             ; preds = %3367, %3365
  %.pn2808 = phi { ptr, i32 } [ %3368, %3367 ], [ %3366, %3365 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %219) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %219) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %218) #8
  br label %6424

3370:                                             ; preds = %3364, %3358
  %3371 = load i32, ptr %3346, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3371)
  br label %.thread3374

3372:                                             ; preds = %566
  %3373 = load i32, ptr %545, align 4, !tbaa !125
  %3374 = getelementptr inbounds i8, ptr %545, i64 4
  %3375 = load i32, ptr %3374, align 4, !tbaa !125
  %3376 = getelementptr inbounds i8, ptr %545, i64 8
  %3377 = load i32, ptr %3376, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3373, i32 noundef %3375, i32 noundef %3377, ptr noundef nonnull @.str.394)
  %3378 = tail call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL12is_legacy_esEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
  br i1 %3378, label %3379, label %3387

3379:                                             ; preds = %3372
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %220) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %221) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %221) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %220, ptr noundef nonnull @.str.1401, ptr noundef nonnull align 1 dereferenceable(1) %221)
          to label %3380 unwind label %3382

3380:                                             ; preds = %3379
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %220)
          to label %3381 unwind label %3384

3381:                                             ; preds = %3380
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %220) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %221) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %221) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %220) #8
  br label %3387

3382:                                             ; preds = %3379
  %3383 = landingpad { ptr, i32 }
          cleanup
  br label %3386

3384:                                             ; preds = %3380
  %3385 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %220) #8
  br label %3386

3386:                                             ; preds = %3384, %3382
  %.pn2806 = phi { ptr, i32 } [ %3385, %3384 ], [ %3383, %3382 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %221) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %221) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %220) #8
  br label %6424

3387:                                             ; preds = %3381, %3372
  %3388 = load i32, ptr %3374, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3388)
  br label %.thread3374

3389:                                             ; preds = %566
  %3390 = load i32, ptr %545, align 4, !tbaa !125
  %3391 = getelementptr inbounds i8, ptr %545, i64 4
  %3392 = load i32, ptr %3391, align 4, !tbaa !125
  %3393 = getelementptr inbounds i8, ptr %545, i64 8
  %3394 = load i32, ptr %3393, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3390, i32 noundef %3392, i32 noundef %3394, ptr noundef nonnull @.str.395)
  %3395 = getelementptr inbounds i8, ptr %0, i64 7640
  %3396 = load i8, ptr %3395, align 8, !tbaa !207, !range !123, !noundef !124
  %3397 = trunc nuw i8 %3396 to i1
  br i1 %3397, label %3398, label %3403

3398:                                             ; preds = %3389
  %3399 = tail call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %3399, ptr noundef nonnull @.str.1402)
          to label %3400 unwind label %3401

3400:                                             ; preds = %3398
  tail call void @__cxa_throw(ptr nonnull %3399, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
  unreachable

3401:                                             ; preds = %3398
  %3402 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %3399) #8
  br label %6424

3403:                                             ; preds = %3389
  %3404 = getelementptr inbounds i8, ptr %0, i64 7636
  %3405 = load i32, ptr %3404, align 4, !tbaa !204
  %3406 = icmp ult i32 %3405, 450
  br i1 %3406, label %3407, label %3415

3407:                                             ; preds = %3403
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %222) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %223) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %223) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %222, ptr noundef nonnull @.str.1403, ptr noundef nonnull align 1 dereferenceable(1) %223)
          to label %3408 unwind label %3410

3408:                                             ; preds = %3407
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %222)
          to label %3409 unwind label %3412

3409:                                             ; preds = %3408
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %222) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %223) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %223) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %222) #8
  br label %3415

3410:                                             ; preds = %3407
  %3411 = landingpad { ptr, i32 }
          cleanup
  br label %3414

3412:                                             ; preds = %3408
  %3413 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %222) #8
  br label %3414

3414:                                             ; preds = %3412, %3410
  %.pn2804 = phi { ptr, i32 } [ %3413, %3412 ], [ %3411, %3410 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %223) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %223) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %222) #8
  br label %6424

3415:                                             ; preds = %3409, %3403
  %3416 = load i32, ptr %3391, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3416)
  br label %.thread3374

3417:                                             ; preds = %566
  %3418 = load i32, ptr %545, align 4, !tbaa !125
  %3419 = getelementptr inbounds i8, ptr %545, i64 4
  %3420 = load i32, ptr %3419, align 4, !tbaa !125
  %3421 = getelementptr inbounds i8, ptr %545, i64 8
  %3422 = load i32, ptr %3421, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3418, i32 noundef %3420, i32 noundef %3422, ptr noundef nonnull @.str.396)
  %3423 = getelementptr inbounds i8, ptr %0, i64 7640
  %3424 = load i8, ptr %3423, align 8, !tbaa !207, !range !123, !noundef !124
  %3425 = trunc nuw i8 %3424 to i1
  br i1 %3425, label %3426, label %3431

3426:                                             ; preds = %3417
  %3427 = tail call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %3427, ptr noundef nonnull @.str.1402)
          to label %3428 unwind label %3429

3428:                                             ; preds = %3426
  tail call void @__cxa_throw(ptr nonnull %3427, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
  unreachable

3429:                                             ; preds = %3426
  %3430 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %3427) #8
  br label %6424

3431:                                             ; preds = %3417
  %3432 = getelementptr inbounds i8, ptr %0, i64 7636
  %3433 = load i32, ptr %3432, align 4, !tbaa !204
  %3434 = icmp ult i32 %3433, 450
  br i1 %3434, label %3435, label %3443

3435:                                             ; preds = %3431
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %224) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %225) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %225) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %224, ptr noundef nonnull @.str.1403, ptr noundef nonnull align 1 dereferenceable(1) %225)
          to label %3436 unwind label %3438

3436:                                             ; preds = %3435
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %224)
          to label %3437 unwind label %3440

3437:                                             ; preds = %3436
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %224) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %225) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %225) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %224) #8
  br label %3443

3438:                                             ; preds = %3435
  %3439 = landingpad { ptr, i32 }
          cleanup
  br label %3442

3440:                                             ; preds = %3436
  %3441 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %224) #8
  br label %3442

3442:                                             ; preds = %3440, %3438
  %.pn2802 = phi { ptr, i32 } [ %3441, %3440 ], [ %3439, %3438 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %225) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %225) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %224) #8
  br label %6424

3443:                                             ; preds = %3437, %3431
  %3444 = load i32, ptr %3419, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3444)
  br label %.thread3374

3445:                                             ; preds = %566
  %3446 = load i32, ptr %545, align 4, !tbaa !125
  %3447 = getelementptr inbounds i8, ptr %545, i64 4
  %3448 = load i32, ptr %3447, align 4, !tbaa !125
  %3449 = getelementptr inbounds i8, ptr %545, i64 8
  %3450 = load i32, ptr %3449, align 4, !tbaa !125
  %3451 = getelementptr inbounds i8, ptr %545, i64 12
  %3452 = load i32, ptr %3451, align 4, !tbaa !125
  %3453 = getelementptr inbounds i8, ptr %545, i64 16
  %3454 = load i32, ptr %3453, align 4, !tbaa !125
  %3455 = getelementptr inbounds i8, ptr %545, i64 20
  %3456 = load i32, ptr %3455, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL23emit_bitfield_insert_opEjjjjjjPKcNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3446, i32 noundef %3448, i32 noundef %3450, i32 noundef %3452, i32 noundef %3454, i32 noundef %3456, ptr noundef nonnull @.str.361, i32 noundef 7)
  br label %.thread3374

3457:                                             ; preds = %566
  %3458 = load i32, ptr %545, align 4, !tbaa !125
  %3459 = getelementptr inbounds i8, ptr %545, i64 4
  %3460 = load i32, ptr %3459, align 4, !tbaa !125
  %3461 = getelementptr inbounds i8, ptr %545, i64 8
  %3462 = load i32, ptr %3461, align 4, !tbaa !125
  %3463 = getelementptr inbounds i8, ptr %545, i64 12
  %3464 = load i32, ptr %3463, align 4, !tbaa !125
  %3465 = getelementptr inbounds i8, ptr %545, i64 16
  %3466 = load i32, ptr %3465, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL31emit_trinary_func_op_bitextractEjjjjjPKcNS_8SPIRType8BaseTypeES4_S4_S4_(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3458, i32 noundef %3460, i32 noundef %3462, i32 noundef %3464, i32 noundef %3466, ptr noundef nonnull @.str.360, i32 noundef %551, i32 noundef %551, i32 noundef 7, i32 noundef 7)
  br label %.thread3374

3467:                                             ; preds = %566
  %3468 = load i32, ptr %545, align 4, !tbaa !125
  %3469 = getelementptr inbounds i8, ptr %545, i64 4
  %3470 = load i32, ptr %3469, align 4, !tbaa !125
  %3471 = getelementptr inbounds i8, ptr %545, i64 8
  %3472 = load i32, ptr %3471, align 4, !tbaa !125
  %3473 = getelementptr inbounds i8, ptr %545, i64 12
  %3474 = load i32, ptr %3473, align 4, !tbaa !125
  %3475 = getelementptr inbounds i8, ptr %545, i64 16
  %3476 = load i32, ptr %3475, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL31emit_trinary_func_op_bitextractEjjjjjPKcNS_8SPIRType8BaseTypeES4_S4_S4_(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3468, i32 noundef %3470, i32 noundef %3472, i32 noundef %3474, i32 noundef %3476, ptr noundef nonnull @.str.360, i32 noundef %552, i32 noundef %552, i32 noundef 7, i32 noundef 7)
  br label %.thread3374

3477:                                             ; preds = %566
  %3478 = load i32, ptr %545, align 4, !tbaa !125
  %3479 = getelementptr inbounds i8, ptr %545, i64 4
  %3480 = load i32, ptr %3479, align 4, !tbaa !125
  %3481 = getelementptr inbounds i8, ptr %545, i64 8
  %3482 = load i32, ptr %3481, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3478, i32 noundef %3480, i32 noundef %3482, ptr noundef nonnull @.str.362)
  br label %.thread3374

3483:                                             ; preds = %566
  %3484 = getelementptr inbounds i8, ptr %545, i64 8
  %3485 = load i32, ptr %3484, align 4, !tbaa !125
  %3486 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %3485)
  %3487 = getelementptr inbounds i8, ptr %3486, i64 16
  %3488 = load i32, ptr %3487, align 8, !tbaa !145
  %3489 = load i32, ptr %545, align 4, !tbaa !125
  %3490 = getelementptr inbounds i8, ptr %545, i64 4
  %3491 = load i32, ptr %3490, align 4, !tbaa !125
  %3492 = load i32, ptr %3484, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL23emit_unary_func_op_castEjjjPKcNS_8SPIRType8BaseTypeES4_(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3489, i32 noundef %3491, i32 noundef %3492, ptr noundef nonnull @.str.359, i32 noundef %3488, i32 noundef %551)
  br label %.thread3374

3493:                                             ; preds = %566
  %3494 = load i32, ptr %545, align 4, !tbaa !125
  %3495 = getelementptr inbounds i8, ptr %545, i64 4
  %3496 = load i32, ptr %3495, align 4, !tbaa !125
  %3497 = getelementptr inbounds i8, ptr %545, i64 8
  %3498 = load i32, ptr %3497, align 4, !tbaa !125
  %3499 = getelementptr inbounds i8, ptr %545, i64 20
  %3500 = load i32, ptr %3499, align 4, !tbaa !125
  %3501 = tail call noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL18check_atomic_imageEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3498)
  %3502 = select i1 %3501, ptr @.str.403, ptr @.str.354
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_atomic_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3494, i32 noundef %3496, i32 noundef %3498, i32 noundef %3500, ptr noundef nonnull %3502)
  br label %.thread3374

3503:                                             ; preds = %566
  %3504 = load i32, ptr %545, align 4, !tbaa !125
  %3505 = getelementptr inbounds i8, ptr %545, i64 4
  %3506 = load i32, ptr %3505, align 4, !tbaa !125
  %3507 = getelementptr inbounds i8, ptr %545, i64 8
  %3508 = load i32, ptr %3507, align 4, !tbaa !125
  %3509 = getelementptr inbounds i8, ptr %545, i64 24
  %3510 = load i32, ptr %3509, align 4, !tbaa !125
  %3511 = getelementptr inbounds i8, ptr %545, i64 28
  %3512 = load i32, ptr %3511, align 4, !tbaa !125
  %3513 = tail call noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL18check_atomic_imageEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3508)
  %3514 = select i1 %3513, ptr @.str.402, ptr @.str.350
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_atomic_func_opEjjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3504, i32 noundef %3506, i32 noundef %3508, i32 noundef %3512, i32 noundef %3510, ptr noundef nonnull %3514)
  br label %.thread3374

3515:                                             ; preds = %566
  %3516 = getelementptr inbounds i8, ptr %545, i64 8
  %3517 = load i32, ptr %3516, align 4, !tbaa !125
  %3518 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %3517)
  %3519 = getelementptr inbounds i8, ptr %0, i64 2400
  %3520 = getelementptr inbounds i8, ptr %545, i64 4
  %3521 = tail call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %3519, ptr noundef nonnull align 4 dereferenceable(4) %3520)
  %3522 = load i32, ptr %3516, align 4, !tbaa !125
  %3523 = tail call noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL18check_atomic_imageEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3522)
  %3524 = getelementptr inbounds i8, ptr %3518, i64 16
  %3525 = load i32, ptr %3524, align 8, !tbaa !145
  %3526 = icmp ne i32 %3525, 8
  %brmerge3095.not = and i1 %3523, %3526
  %.str.756.mux = select i1 %3526, ptr @.str.760, ptr @.str.756
  br i1 %brmerge3095.not, label %3527, label %3535

3527:                                             ; preds = %3515
  %3528 = getelementptr inbounds i8, ptr %3518, i64 248
  %3529 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %3528)
  %3530 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %3529)
  %3531 = getelementptr inbounds i8, ptr %3530, i64 16
  %3532 = load i32, ptr %3531, align 8, !tbaa !145
  %3533 = icmp eq i32 %3532, 8
  %3534 = select i1 %3533, ptr @.str.756, ptr @.str.760
  br label %3535

3535:                                             ; preds = %3515, %3527
  %3536 = phi ptr [ %.str.756.mux, %3515 ], [ %3534, %3527 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %226) #8
  %3537 = select i1 %3523, ptr @.str.400, ptr @.str.349
  store ptr %3537, ptr %226, align 8, !tbaa !208
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %227) #8
  store ptr %3536, ptr %227, align 8, !tbaa !208
  %3538 = load i32, ptr %545, align 4, !tbaa !125
  %3539 = load i32, ptr %3520, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %228) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %229) #8
  %3540 = load i32, ptr %3516, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(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 %3540)
  invoke void @_ZN11spirv_cross4joinIJRPKcRA2_S1_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_S3_S5_EEESB_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %228, ptr noundef nonnull align 8 dereferenceable(8) %226, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %229, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(8) %227, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %3541 unwind label %3544

3541:                                             ; preds = %3535
  %3542 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3538, i32 noundef %3539, ptr noundef nonnull align 8 dereferenceable(32) %228, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %3543 unwind label %3546

3543:                                             ; preds = %3541
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %228) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %229) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %229) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %228) #8
  call void @_ZN11spirv_cross8Compiler34flush_all_atomic_capable_variablesEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %227) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %226) #8
  br label %.thread3374

3544:                                             ; preds = %3535
  %3545 = landingpad { ptr, i32 }
          cleanup
  br label %3548

3546:                                             ; preds = %3541
  %3547 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %228) #8
  br label %3548

3548:                                             ; preds = %3546, %3544
  %.pn2800 = phi { ptr, i32 } [ %3547, %3546 ], [ %3545, %3544 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %229) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %229) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %228) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %227) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %226) #8
  br label %6424

3549:                                             ; preds = %566
  %3550 = load i32, ptr %545, align 4, !tbaa !125
  %3551 = getelementptr inbounds i8, ptr %545, i64 12
  %3552 = load i32, ptr %3551, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %230) #8
  %3553 = tail call noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL18check_atomic_imageEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3550)
  %3554 = select i1 %3553, ptr @.str.403, ptr @.str.354
  store ptr %3554, ptr %230, align 8, !tbaa !208
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %231) #8
  call void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(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 %3550)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %232) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(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 %3552, i1 noundef zeroext true)
          to label %3555 unwind label %3557

3555:                                             ; preds = %3549
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRPKcRA2_S2_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_SC_SE_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(8) %230, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %231, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %232, ptr noundef nonnull align 1 dereferenceable(3) @.str.751)
          to label %3556 unwind label %3559

3556:                                             ; preds = %3555
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %232) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %232) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %231) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %231) #8
  call void @_ZN11spirv_cross8Compiler34flush_all_atomic_capable_variablesEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %230) #8
  br label %.thread3374

3557:                                             ; preds = %3549
  %3558 = landingpad { ptr, i32 }
          cleanup
  br label %3561

3559:                                             ; preds = %3555
  %3560 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %232) #8
  br label %3561

3561:                                             ; preds = %3559, %3557
  %.pn2798 = phi { ptr, i32 } [ %3560, %3559 ], [ %3558, %3557 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %232) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %231) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %231) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %230) #8
  br label %6424

3562:                                             ; preds = %566, %566
  %3563 = getelementptr inbounds i8, ptr %0, i64 2400
  %3564 = getelementptr inbounds i8, ptr %545, i64 4
  %3565 = tail call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %3563, ptr noundef nonnull align 4 dereferenceable(4) %3564)
  %3566 = getelementptr inbounds i8, ptr %545, i64 8
  %3567 = load i32, ptr %3566, align 4, !tbaa !125
  %3568 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %3567)
  %3569 = getelementptr inbounds i8, ptr %3568, i64 128
  %3570 = load i32, ptr %3569, align 8, !tbaa !210
  %3571 = icmp eq i32 %3570, 10
  br i1 %3571, label %3572, label %3579

3572:                                             ; preds = %3562
  %3573 = icmp eq i32 %568, 232
  %3574 = load i32, ptr %545, align 4, !tbaa !125
  %3575 = load i32, ptr %3564, align 4, !tbaa !125
  %3576 = load i32, ptr %3566, align 4, !tbaa !125
  br i1 %3573, label %3577, label %3578

3577:                                             ; preds = %3572
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3574, i32 noundef %3575, i32 noundef %3576, ptr noundef nonnull @.str.353)
  br label %3614

3578:                                             ; preds = %3572
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3574, i32 noundef %3575, i32 noundef %3576, ptr noundef nonnull @.str.352)
  br label %3614

3579:                                             ; preds = %3562
  %3580 = load i32, ptr %3566, align 4, !tbaa !125
  %3581 = tail call noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL18check_atomic_imageEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3580)
  %3582 = getelementptr inbounds i8, ptr %3568, i64 16
  %3583 = load i32, ptr %3582, align 8, !tbaa !145
  %3584 = icmp eq i32 %3583, 8
  %.not3096 = xor i1 %3581, true
  %brmerge3097 = or i1 %3584, %.not3096
  br i1 %brmerge3097, label %3592, label %3585

3585:                                             ; preds = %3579
  %3586 = getelementptr inbounds i8, ptr %3568, i64 248
  %3587 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %3586)
  %3588 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %3587)
  %3589 = getelementptr inbounds i8, ptr %3588, i64 16
  %3590 = load i32, ptr %3589, align 8, !tbaa !145
  %3591 = icmp eq i32 %3590, 8
  br label %3592

3592:                                             ; preds = %3579, %3585
  %3593 = phi i1 [ %3584, %3579 ], [ %3591, %3585 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %233) #8
  %3594 = select i1 %3581, ptr @.str.400, ptr @.str.349
  store ptr %3594, ptr %233, align 8, !tbaa !208
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %234) #8
  %3595 = icmp eq i32 %568, 232
  %brmerge3100.not = select i1 %3595, i1 %3593, i1 false
  br i1 %brmerge3100.not, label %3596, label %3597

3596:                                             ; preds = %3592
  store ptr @.str.772, ptr %234, align 8, !tbaa !208
  br label %3602

3597:                                             ; preds = %3592
  br i1 %3595, label %3598, label %3599

3598:                                             ; preds = %3597
  store ptr @.str.776, ptr %234, align 8, !tbaa !208
  br label %3602

3599:                                             ; preds = %3597
  br i1 %3593, label %3600, label %3601

3600:                                             ; preds = %3599
  store ptr @.str.1404, ptr %234, align 8, !tbaa !208
  br label %3602

3601:                                             ; preds = %3599
  store ptr @.str.1405, ptr %234, align 8, !tbaa !208
  br label %3602

3602:                                             ; preds = %3598, %3601, %3600, %3596
  %3603 = load i32, ptr %545, align 4, !tbaa !125
  %3604 = load i32, ptr %3564, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %235) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %236) #8
  %3605 = load i32, ptr %3566, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %236, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3605)
  invoke void @_ZN11spirv_cross4joinIJRPKcRA2_S1_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_S3_S5_EEESB_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %235, ptr noundef nonnull align 8 dereferenceable(8) %233, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %236, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(8) %234, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %3606 unwind label %3609

3606:                                             ; preds = %3602
  %3607 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3603, i32 noundef %3604, ptr noundef nonnull align 8 dereferenceable(32) %235, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %3608 unwind label %3611

3608:                                             ; preds = %3606
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %235) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %236) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %236) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %235) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %234) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %233) #8
  br label %3614

3609:                                             ; preds = %3602
  %3610 = landingpad { ptr, i32 }
          cleanup
  br label %3613

3611:                                             ; preds = %3606
  %3612 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %235) #8
  br label %3613

3613:                                             ; preds = %3611, %3609
  %.pn2796 = phi { ptr, i32 } [ %3612, %3611 ], [ %3610, %3609 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %236) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %236) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %235) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %234) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %233) #8
  br label %6424

3614:                                             ; preds = %3577, %3578, %3608
  call void @_ZN11spirv_cross8Compiler34flush_all_atomic_capable_variablesEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
  br label %.thread3374

3615:                                             ; preds = %566, %566
  %3616 = getelementptr inbounds i8, ptr %545, i64 8
  %3617 = load i32, ptr %3616, align 4, !tbaa !125
  %3618 = tail call noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL18check_atomic_imageEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3617)
  %3619 = select i1 %3618, ptr @.str.400, ptr @.str.349
  %3620 = load i32, ptr %545, align 4, !tbaa !125
  %3621 = getelementptr inbounds i8, ptr %545, i64 4
  %3622 = load i32, ptr %3621, align 4, !tbaa !125
  %3623 = load i32, ptr %3616, align 4, !tbaa !125
  %3624 = getelementptr inbounds i8, ptr %545, i64 20
  %3625 = load i32, ptr %3624, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_atomic_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3620, i32 noundef %3622, i32 noundef %3623, i32 noundef %3625, ptr noundef nonnull %3619)
  br label %.thread3374

3626:                                             ; preds = %566
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %237) #8
  %3627 = getelementptr inbounds i8, ptr %545, i64 8
  %3628 = load i32, ptr %3627, align 4, !tbaa !125
  %3629 = tail call noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL18check_atomic_imageEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3628)
  %3630 = select i1 %3629, ptr @.str.400, ptr @.str.349
  store ptr %3630, ptr %237, align 8, !tbaa !208
  %3631 = getelementptr inbounds i8, ptr %0, i64 2400
  %3632 = getelementptr inbounds i8, ptr %545, i64 4
  %3633 = tail call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %3631, ptr noundef nonnull align 4 dereferenceable(4) %3632)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %238) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %239) #8
  %3634 = load i32, ptr %3627, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %239, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3634)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %240) #8
  %3635 = getelementptr inbounds i8, ptr %545, i64 20
  %3636 = load i32, ptr %3635, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %240, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3636, i1 noundef zeroext true)
          to label %3637 unwind label %3652

3637:                                             ; preds = %3626
  invoke void @_ZN11spirv_cross4joinIJRPKcRA2_S1_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_S1_SB_S5_EEESB_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %238, ptr noundef nonnull align 8 dereferenceable(8) %237, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %239, ptr noundef nonnull align 1 dereferenceable(4) @.str.1406, ptr noundef nonnull align 8 dereferenceable(32) %240, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %3638 unwind label %3654

3638:                                             ; preds = %3637
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %240) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %240) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %239) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %239) #8
  %3639 = load i32, ptr %545, align 4, !tbaa !125
  %3640 = load i32, ptr %3632, align 4, !tbaa !125
  %3641 = load i32, ptr %3627, align 4, !tbaa !125
  %3642 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3641)
          to label %3643 unwind label %3657

3643:                                             ; preds = %3638
  br i1 %3642, label %3644, label %3647

3644:                                             ; preds = %3643
  %3645 = load i32, ptr %3635, align 4, !tbaa !125
  %3646 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3645)
          to label %3647 unwind label %3657

3647:                                             ; preds = %3644, %3643
  %3648 = phi i1 [ false, %3643 ], [ %3646, %3644 ]
  %3649 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3639, i32 noundef %3640, ptr noundef nonnull align 8 dereferenceable(32) %238, i1 noundef zeroext %3648, i1 noundef zeroext false)
          to label %3650 unwind label %3657

3650:                                             ; preds = %3647
  invoke void @_ZN11spirv_cross8Compiler34flush_all_atomic_capable_variablesEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
          to label %3651 unwind label %3657

3651:                                             ; preds = %3650
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %238) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %238) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %237) #8
  br label %.thread3374

3652:                                             ; preds = %3626
  %3653 = landingpad { ptr, i32 }
          cleanup
  br label %3656

3654:                                             ; preds = %3637
  %3655 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %240) #8
  br label %3656

3656:                                             ; preds = %3654, %3652
  %.pn2792 = phi { ptr, i32 } [ %3655, %3654 ], [ %3653, %3652 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %240) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %239) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %239) #8
  br label %3659

3657:                                             ; preds = %3650, %3647, %3644, %3638
  %3658 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %238) #8
  br label %3659

3659:                                             ; preds = %3657, %3656
  %.pn2794 = phi { ptr, i32 } [ %3658, %3657 ], [ %.pn2792, %3656 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %238) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %237) #8
  br label %6424

3660:                                             ; preds = %566, %566
  %3661 = getelementptr inbounds i8, ptr %545, i64 8
  %3662 = load i32, ptr %3661, align 4, !tbaa !125
  %3663 = tail call noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL18check_atomic_imageEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3662)
  %3664 = select i1 %3663, ptr @.str.405, ptr @.str.356
  %3665 = load i32, ptr %545, align 4, !tbaa !125
  %3666 = getelementptr inbounds i8, ptr %545, i64 4
  %3667 = load i32, ptr %3666, align 4, !tbaa !125
  %3668 = load i32, ptr %3661, align 4, !tbaa !125
  %3669 = getelementptr inbounds i8, ptr %545, i64 20
  %3670 = load i32, ptr %3669, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_atomic_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3665, i32 noundef %3667, i32 noundef %3668, i32 noundef %3670, ptr noundef nonnull %3664)
  br label %.thread3374

3671:                                             ; preds = %566, %566
  %3672 = getelementptr inbounds i8, ptr %545, i64 8
  %3673 = load i32, ptr %3672, align 4, !tbaa !125
  %3674 = tail call noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL18check_atomic_imageEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3673)
  %3675 = select i1 %3674, ptr @.str.404, ptr @.str.355
  %3676 = load i32, ptr %545, align 4, !tbaa !125
  %3677 = getelementptr inbounds i8, ptr %545, i64 4
  %3678 = load i32, ptr %3677, align 4, !tbaa !125
  %3679 = load i32, ptr %3672, align 4, !tbaa !125
  %3680 = getelementptr inbounds i8, ptr %545, i64 20
  %3681 = load i32, ptr %3680, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_atomic_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3676, i32 noundef %3678, i32 noundef %3679, i32 noundef %3681, ptr noundef nonnull %3675)
  br label %.thread3374

3682:                                             ; preds = %566
  %3683 = getelementptr inbounds i8, ptr %545, i64 8
  %3684 = load i32, ptr %3683, align 4, !tbaa !125
  %3685 = tail call noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL18check_atomic_imageEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3684)
  %3686 = select i1 %3685, ptr @.str.401, ptr @.str.1407
  %3687 = load i32, ptr %545, align 4, !tbaa !125
  %3688 = getelementptr inbounds i8, ptr %545, i64 4
  %3689 = load i32, ptr %3688, align 4, !tbaa !125
  %3690 = load i32, ptr %3683, align 4, !tbaa !125
  %3691 = getelementptr inbounds i8, ptr %545, i64 20
  %3692 = load i32, ptr %3691, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_atomic_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3687, i32 noundef %3689, i32 noundef %3690, i32 noundef %3692, ptr noundef nonnull %3686)
  br label %.thread3374

3693:                                             ; preds = %566
  %3694 = getelementptr inbounds i8, ptr %545, i64 8
  %3695 = load i32, ptr %3694, align 4, !tbaa !125
  %3696 = tail call noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL18check_atomic_imageEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3695)
  %3697 = select i1 %3696, ptr @.str.406, ptr @.str.357
  %3698 = load i32, ptr %545, align 4, !tbaa !125
  %3699 = getelementptr inbounds i8, ptr %545, i64 4
  %3700 = load i32, ptr %3699, align 4, !tbaa !125
  %3701 = load i32, ptr %3694, align 4, !tbaa !125
  %3702 = getelementptr inbounds i8, ptr %545, i64 20
  %3703 = load i32, ptr %3702, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_atomic_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3698, i32 noundef %3700, i32 noundef %3701, i32 noundef %3703, ptr noundef nonnull %3697)
  br label %.thread3374

3704:                                             ; preds = %566
  %3705 = getelementptr inbounds i8, ptr %545, i64 8
  %3706 = load i32, ptr %3705, align 4, !tbaa !125
  %3707 = tail call noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL18check_atomic_imageEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3706)
  %3708 = select i1 %3707, ptr @.str.407, ptr @.str.358
  %3709 = load i32, ptr %545, align 4, !tbaa !125
  %3710 = getelementptr inbounds i8, ptr %545, i64 4
  %3711 = load i32, ptr %3710, align 4, !tbaa !125
  %3712 = load i32, ptr %3705, align 4, !tbaa !125
  %3713 = getelementptr inbounds i8, ptr %545, i64 20
  %3714 = load i32, ptr %3713, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_atomic_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3709, i32 noundef %3711, i32 noundef %3712, i32 noundef %3714, ptr noundef nonnull %3708)
  br label %.thread3374

3715:                                             ; preds = %566
  tail call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA14_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(14) @.str.1408)
  br label %.thread3374

3716:                                             ; preds = %566
  tail call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA16_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(16) @.str.1409)
  br label %.thread3374

3717:                                             ; preds = %566
  %3718 = getelementptr inbounds i8, ptr %0, i64 7640
  %3719 = load i8, ptr %3718, align 8, !tbaa !207, !range !123, !noundef !124
  %3720 = trunc nuw i8 %3719 to i1
  br i1 %3720, label %3721, label %3726

3721:                                             ; preds = %3717
  %3722 = tail call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %3722, ptr noundef nonnull @.str.1410)
          to label %3723 unwind label %3724

3723:                                             ; preds = %3721
  tail call void @__cxa_throw(ptr nonnull %3722, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
  unreachable

3724:                                             ; preds = %3721
  %3725 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %3722) #8
  br label %6424

3726:                                             ; preds = %3717
  %3727 = getelementptr inbounds i8, ptr %0, i64 7636
  %3728 = load i32, ptr %3727, align 4, !tbaa !204
  %3729 = icmp ult i32 %3728, 400
  br i1 %3729, label %3730, label %3735

3730:                                             ; preds = %3726
  %3731 = tail call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %3731, ptr noundef nonnull @.str.1411)
          to label %3732 unwind label %3733

3732:                                             ; preds = %3730
  tail call void @__cxa_throw(ptr nonnull %3731, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
  unreachable

3733:                                             ; preds = %3730
  %3734 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %3731) #8
  br label %6424

3735:                                             ; preds = %3726
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %241) #8
  %3736 = load i32, ptr %545, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %241, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3736, i1 noundef zeroext true)
  %3737 = load i32, ptr %545, align 4, !tbaa !125
  %3738 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %3737)
          to label %3739 unwind label %3745

3739:                                             ; preds = %3735
  %3740 = getelementptr inbounds i8, ptr %3738, i64 16
  %3741 = load i32, ptr %3740, align 8, !tbaa !145
  %.not2789 = icmp eq i32 %3741, 7
  br i1 %.not2789, label %3749, label %3742

3742:                                             ; preds = %3739
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %242) #8
  invoke void @_ZN11spirv_cross4joinIJRA5_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %242, ptr noundef nonnull align 1 dereferenceable(5) @.str.1412, ptr noundef nonnull align 8 dereferenceable(32) %241, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %3743 unwind label %3747

3743:                                             ; preds = %3742
  %3744 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %241, ptr noundef nonnull align 8 dereferenceable(32) %242) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %242) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %242) #8
  br label %3749

3745:                                             ; preds = %3749, %3735
  %3746 = landingpad { ptr, i32 }
          cleanup
  br label %3751

3747:                                             ; preds = %3742
  %3748 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %242) #8
  br label %3751

3749:                                             ; preds = %3743, %3739
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA18_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(18) @.str.1413, ptr noundef nonnull align 8 dereferenceable(32) %241, ptr noundef nonnull align 1 dereferenceable(3) @.str.751)
          to label %3750 unwind label %3745

3750:                                             ; preds = %3749
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %241) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %241) #8
  br label %.thread3374

3751:                                             ; preds = %3747, %3745
  %.pn2790 = phi { ptr, i32 } [ %3746, %3745 ], [ %3748, %3747 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %241) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %241) #8
  br label %6424

3752:                                             ; preds = %566
  %3753 = getelementptr inbounds i8, ptr %0, i64 7640
  %3754 = load i8, ptr %3753, align 8, !tbaa !207, !range !123, !noundef !124
  %3755 = trunc nuw i8 %3754 to i1
  br i1 %3755, label %3756, label %3761

3756:                                             ; preds = %3752
  %3757 = tail call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %3757, ptr noundef nonnull @.str.1410)
          to label %3758 unwind label %3759

3758:                                             ; preds = %3756
  tail call void @__cxa_throw(ptr nonnull %3757, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
  unreachable

3759:                                             ; preds = %3756
  %3760 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %3757) #8
  br label %6424

3761:                                             ; preds = %3752
  %3762 = getelementptr inbounds i8, ptr %0, i64 7636
  %3763 = load i32, ptr %3762, align 4, !tbaa !204
  %3764 = icmp ult i32 %3763, 400
  br i1 %3764, label %3765, label %3770

3765:                                             ; preds = %3761
  %3766 = tail call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %3766, ptr noundef nonnull @.str.1411)
          to label %3767 unwind label %3768

3767:                                             ; preds = %3765
  tail call void @__cxa_throw(ptr nonnull %3766, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
  unreachable

3768:                                             ; preds = %3765
  %3769 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %3766) #8
  br label %6424

3770:                                             ; preds = %3761
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %243) #8
  %3771 = load i32, ptr %545, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %243, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3771, i1 noundef zeroext true)
  %3772 = load i32, ptr %545, align 4, !tbaa !125
  %3773 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %3772)
          to label %3774 unwind label %3780

3774:                                             ; preds = %3770
  %3775 = getelementptr inbounds i8, ptr %3773, i64 16
  %3776 = load i32, ptr %3775, align 8, !tbaa !145
  %.not2786 = icmp eq i32 %3776, 7
  br i1 %.not2786, label %3784, label %3777

3777:                                             ; preds = %3774
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %244) #8
  invoke void @_ZN11spirv_cross4joinIJRA5_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %244, ptr noundef nonnull align 1 dereferenceable(5) @.str.1412, ptr noundef nonnull align 8 dereferenceable(32) %243, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %3778 unwind label %3782

3778:                                             ; preds = %3777
  %3779 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %243, ptr noundef nonnull align 8 dereferenceable(32) %244) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %244) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %244) #8
  br label %3784

3780:                                             ; preds = %3784, %3770
  %3781 = landingpad { ptr, i32 }
          cleanup
  br label %3786

3782:                                             ; preds = %3777
  %3783 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %244) #8
  br label %3786

3784:                                             ; preds = %3778, %3774
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA20_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(20) @.str.1414, ptr noundef nonnull align 8 dereferenceable(32) %243, ptr noundef nonnull align 1 dereferenceable(3) @.str.751)
          to label %3785 unwind label %3780

3785:                                             ; preds = %3784
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %243) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %243) #8
  br label %.thread3374

3786:                                             ; preds = %3782, %3780
  %.pn2787 = phi { ptr, i32 } [ %3781, %3780 ], [ %3783, %3782 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %243) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %243) #8
  br label %6424

3787:                                             ; preds = %566, %566, %566, %566, %566, %566, %566, %566, %566, %566, %566
  %3788 = load ptr, ptr %0, align 8, !tbaa !142
  %3789 = getelementptr inbounds i8, ptr %3788, i64 128
  %3790 = load ptr, ptr %3789, align 8
  tail call void %3790(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 4 dereferenceable(12) %1, i1 noundef zeroext false)
  br label %.thread3374

3791:                                             ; preds = %566, %566, %566, %566, %566, %566, %566, %566, %566, %566, %566
  %3792 = load ptr, ptr %0, align 8, !tbaa !142
  %3793 = getelementptr inbounds i8, ptr %3792, i64 128
  %3794 = load ptr, ptr %3793, align 8
  tail call void %3794(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 4 dereferenceable(12) %1, i1 noundef zeroext true)
  br label %.thread3374

3795:                                             ; preds = %566
  %3796 = getelementptr inbounds i8, ptr %0, i64 7640
  %3797 = load i8, ptr %3796, align 8, !tbaa !207, !range !123, !noundef !124
  %3798 = trunc nuw i8 %3797 to i1
  br i1 %3798, label %3799, label %3804

3799:                                             ; preds = %3795
  %3800 = tail call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %3800, ptr noundef nonnull @.str.1415)
          to label %3801 unwind label %3802

3801:                                             ; preds = %3799
  tail call void @__cxa_throw(ptr nonnull %3800, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
  unreachable

3802:                                             ; preds = %3799
  %3803 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %3800) #8
  br label %6424

3804:                                             ; preds = %3795
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %245) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %246) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %246) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %245, ptr noundef nonnull @.str.1061, ptr noundef nonnull align 1 dereferenceable(1) %246)
          to label %3805 unwind label %3812

3805:                                             ; preds = %3804
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %245)
          to label %3806 unwind label %3814

3806:                                             ; preds = %3805
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %245) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %246) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %246) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %245) #8
  %3807 = load i32, ptr %545, align 4, !tbaa !125
  %3808 = getelementptr inbounds i8, ptr %545, i64 4
  %3809 = load i32, ptr %3808, align 4, !tbaa !125
  %3810 = getelementptr inbounds i8, ptr %545, i64 8
  %3811 = load i32, ptr %3810, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL23emit_unary_func_op_castEjjjPKcNS_8SPIRType8BaseTypeES4_(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3807, i32 noundef %3809, i32 noundef %3811, ptr noundef nonnull @.str.1416, i32 noundef %551, i32 noundef 2)
  br label %.thread3374

3812:                                             ; preds = %3804
  %3813 = landingpad { ptr, i32 }
          cleanup
  br label %3816

3814:                                             ; preds = %3805
  %3815 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %245) #8
  br label %3816

3816:                                             ; preds = %3814, %3812
  %.pn2784 = phi { ptr, i32 } [ %3815, %3814 ], [ %3813, %3812 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %246) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %246) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %245) #8
  br label %6424

3817:                                             ; preds = %566
  %3818 = load i32, ptr %545, align 4, !tbaa !125
  %3819 = getelementptr inbounds i8, ptr %545, i64 4
  %3820 = load i32, ptr %3819, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %247) #8
  %3821 = getelementptr inbounds i8, ptr %545, i64 8
  %3822 = load i32, ptr %3821, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(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 %3822, i1 noundef zeroext true)
  %3823 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3818, i32 noundef %3820, ptr noundef nonnull align 8 dereferenceable(32) %247, i1 noundef zeroext true, i1 noundef zeroext true)
          to label %3824 unwind label %3833

3824:                                             ; preds = %3817
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %247) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %247) #8
  %3825 = load i32, ptr %3821, align 4, !tbaa !125
  %3826 = call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %3825)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %248) #8
  %.not2783 = icmp eq ptr %3826, null
  br i1 %.not2783, label %3829, label %3827

3827:                                             ; preds = %3824
  %3828 = getelementptr inbounds i8, ptr %3826, i64 8
  br label %3830

3829:                                             ; preds = %3824
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %248, i32 noundef 0)
  br label %3830

3830:                                             ; preds = %3829, %3827
  %.in3376 = phi ptr [ %248, %3829 ], [ %3828, %3827 ]
  %3831 = load i32, ptr %.in3376, align 4, !tbaa !125
  %3832 = getelementptr inbounds i8, ptr %3823, i64 52
  store i32 %3831, ptr %3832, align 4, !tbaa !125
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %248) #8
  br label %.thread3374

3833:                                             ; preds = %3817
  %3834 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %247) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %247) #8
  br label %6424

3835:                                             ; preds = %566
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %249) #8
  %3836 = getelementptr inbounds i8, ptr %0, i64 7636
  %3837 = getelementptr inbounds i8, ptr %0, i64 7640
  %3838 = load i8, ptr %3837, align 8, !tbaa !207, !range !123, !noundef !124
  %3839 = trunc nuw i8 %3838 to i1
  %3840 = load i32, ptr %3836, align 4
  %3841 = icmp ugt i32 %3840, 399
  %or.cond3103.not = select i1 %3839, i1 true, i1 %3841
  br i1 %or.cond3103.not, label %3850, label %3842

3842:                                             ; preds = %3835
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %250) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %251) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %251) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %250, ptr noundef nonnull @.str.1417, ptr noundef nonnull align 1 dereferenceable(1) %251)
          to label %3843 unwind label %3845

3843:                                             ; preds = %3842
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %250)
          to label %3844 unwind label %3847

3844:                                             ; preds = %3843
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %250) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %251) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %251) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %250) #8
  store ptr @.str.1418, ptr %249, align 8, !tbaa !208
  br label %3867

3845:                                             ; preds = %3842
  %3846 = landingpad { ptr, i32 }
          cleanup
  br label %3849

3847:                                             ; preds = %3843
  %3848 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %250) #8
  br label %3849

3849:                                             ; preds = %3847, %3845
  %.pn2769 = phi { ptr, i32 } [ %3848, %3847 ], [ %3846, %3845 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %251) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %251) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %250) #8
  br label %3923

3850:                                             ; preds = %3835
  br i1 %3839, label %3851, label %3866

3851:                                             ; preds = %3850
  %3852 = icmp ult i32 %3840, 300
  br i1 %3852, label %3853, label %3858

3853:                                             ; preds = %3851
  %3854 = tail call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %3854, ptr noundef nonnull @.str.1419)
          to label %3855 unwind label %3856

3855:                                             ; preds = %3853
  tail call void @__cxa_throw(ptr nonnull %3854, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
  unreachable

3856:                                             ; preds = %3853
  %3857 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %3854) #8
  br label %3923

3858:                                             ; preds = %3851
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %252) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %253) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %253) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %252, ptr noundef nonnull @.str.1420, ptr noundef nonnull align 1 dereferenceable(1) %253)
          to label %3859 unwind label %3861

3859:                                             ; preds = %3858
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %252)
          to label %3860 unwind label %3863

3860:                                             ; preds = %3859
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %252) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %253) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %253) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %252) #8
  store ptr @.str.1418, ptr %249, align 8, !tbaa !208
  br label %3867

3861:                                             ; preds = %3858
  %3862 = landingpad { ptr, i32 }
          cleanup
  br label %3865

3863:                                             ; preds = %3859
  %3864 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %252) #8
  br label %3865

3865:                                             ; preds = %3863, %3861
  %.pn2771 = phi { ptr, i32 } [ %3864, %3863 ], [ %3862, %3861 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %253) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %253) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %252) #8
  br label %3923

3866:                                             ; preds = %3850
  store ptr @.str.490, ptr %249, align 8, !tbaa !208
  br label %3867

3867:                                             ; preds = %3860, %3866, %3844
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %254) #8
  %3868 = getelementptr inbounds i8, ptr %545, i64 8
  %3869 = load i32, ptr %3868, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL13to_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 %3869, i1 noundef zeroext true)
  %3870 = load i32, ptr %3868, align 4, !tbaa !125
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %255, i32 noundef %3870)
  %3871 = load i32, ptr %255, align 4
  %3872 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %3871, i32 noundef 5300)
          to label %3873 unwind label %3880

3873:                                             ; preds = %3867
  br i1 %3872, label %3874, label %3891

3874:                                             ; preds = %3873
  %3875 = load i32, ptr %3868, align 4, !tbaa !125
  %3876 = invoke noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %3875)
          to label %3877 unwind label %3880

3877:                                             ; preds = %3874
  %.not2773 = icmp eq ptr %3876, null
  br i1 %.not2773, label %3882, label %3878

3878:                                             ; preds = %3877
  %3879 = load i32, ptr %3868, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL30convert_non_uniform_expressionERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %254, i32 noundef %3879)
          to label %3891 unwind label %3880

3880:                                             ; preds = %3878, %3874, %3867
  %3881 = landingpad { ptr, i32 }
          cleanup
  br label %3922

3882:                                             ; preds = %3877
  %3883 = getelementptr inbounds i8, ptr %0, i64 8360
  %3884 = load ptr, ptr %3883, align 8, !tbaa !211
  %3885 = load i8, ptr %3884, align 1, !tbaa !206
  %.not2774 = icmp eq i8 %3885, 0
  br i1 %.not2774, label %3891, label %3886

3886:                                             ; preds = %3882
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %256) #8
  invoke void @_ZN11spirv_cross4joinIJRPKcRA2_S1_RNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EEESB_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %256, ptr noundef nonnull align 8 dereferenceable(8) %3883, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %254, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %3887 unwind label %3889

3887:                                             ; preds = %3886
  %3888 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %254, ptr noundef nonnull align 8 dereferenceable(32) %256) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %256) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %256) #8
  br label %3891

3889:                                             ; preds = %3886
  %3890 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %256) #8
  br label %3922

3891:                                             ; preds = %3878, %3887, %3882, %3873
  %3892 = getelementptr inbounds i8, ptr %545, i64 12
  %3893 = load i32, ptr %3892, align 4, !tbaa !125
  %3894 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3893)
          to label %3895 unwind label %3912

3895:                                             ; preds = %3891
  %3896 = load i32, ptr %545, align 4, !tbaa !125
  %3897 = getelementptr inbounds i8, ptr %545, i64 4
  %3898 = load i32, ptr %3897, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %257) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %258) #8
  %3899 = load i32, ptr %3892, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %258, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3899, i1 noundef zeroext true)
          to label %3900 unwind label %3914

3900:                                             ; preds = %3895
  invoke void @_ZN11spirv_cross4joinIJRPKcRA2_S1_RNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_SB_S5_EEESB_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %257, ptr noundef nonnull align 8 dereferenceable(8) %249, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %254, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %258, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %3901 unwind label %3916

3901:                                             ; preds = %3900
  %3902 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3896, i32 noundef %3898, ptr noundef nonnull align 8 dereferenceable(32) %257, i1 noundef zeroext %3894, i1 noundef zeroext false)
          to label %3903 unwind label %3918

3903:                                             ; preds = %3901
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %257) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %258) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %258) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %257) #8
  %3904 = load i32, ptr %3897, align 4, !tbaa !125
  %3905 = load i32, ptr %3868, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %3904, i32 noundef %3905)
          to label %3906 unwind label %3912

3906:                                             ; preds = %3903
  %3907 = load i32, ptr %3897, align 4, !tbaa !125
  %3908 = load i32, ptr %3892, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %3907, i32 noundef %3908)
          to label %3909 unwind label %3912

3909:                                             ; preds = %3906
  %3910 = load i32, ptr %3897, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3910)
          to label %3911 unwind label %3912

3911:                                             ; preds = %3909
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %254) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %254) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %249) #8
  br label %.thread3374

3912:                                             ; preds = %3909, %3906, %3903, %3891
  %3913 = landingpad { ptr, i32 }
          cleanup
  br label %3922

3914:                                             ; preds = %3895
  %3915 = landingpad { ptr, i32 }
          cleanup
  br label %3921

3916:                                             ; preds = %3900
  %3917 = landingpad { ptr, i32 }
          cleanup
  br label %3920

3918:                                             ; preds = %3901
  %3919 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %257) #8
  br label %3920

3920:                                             ; preds = %3918, %3916
  %.pn2775 = phi { ptr, i32 } [ %3919, %3918 ], [ %3917, %3916 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %258) #8
  br label %3921

3921:                                             ; preds = %3920, %3914
  %.pn2775.pn = phi { ptr, i32 } [ %.pn2775, %3920 ], [ %3915, %3914 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %258) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %257) #8
  br label %3922

3922:                                             ; preds = %3912, %3921, %3889, %3880
  %.pn2778.pn = phi { ptr, i32 } [ %3881, %3880 ], [ %3890, %3889 ], [ %3913, %3912 ], [ %.pn2775.pn, %3921 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %254) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %254) #8
  br label %3923

3923:                                             ; preds = %3922, %3865, %3856, %3849
  %.pn2781 = phi { ptr, i32 } [ %3857, %3856 ], [ %.pn2778.pn, %3922 ], [ %.pn2771, %3865 ], [ %.pn2769, %3849 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %249) #8
  br label %6424

3924:                                             ; preds = %566
  %3925 = load i32, ptr %545, align 4, !tbaa !125
  %3926 = getelementptr inbounds i8, ptr %545, i64 4
  %3927 = load i32, ptr %3926, align 4, !tbaa !125
  %3928 = getelementptr inbounds i8, ptr %0, i64 7640
  %3929 = load i8, ptr %3928, align 8, !tbaa !207, !range !123, !noundef !124
  %3930 = trunc nuw i8 %3929 to i1
  %3931 = getelementptr inbounds i8, ptr %0, i64 7636
  %3932 = load i32, ptr %3931, align 4
  %3933 = icmp ugt i32 %3932, 429
  %or.cond3107.not = select i1 %3930, i1 true, i1 %3933
  br i1 %or.cond3107.not, label %3942, label %3934

3934:                                             ; preds = %3924
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %259) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %260) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %260) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %259, ptr noundef nonnull @.str.1421, ptr noundef nonnull align 1 dereferenceable(1) %260)
          to label %3935 unwind label %3937

3935:                                             ; preds = %3934
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %259)
          to label %3936 unwind label %3939

3936:                                             ; preds = %3935
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %259) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %260) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %260) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %259) #8
  %.pre3346 = load i8, ptr %3928, align 8, !tbaa !207, !range !123
  br label %3942

3937:                                             ; preds = %3934
  %3938 = landingpad { ptr, i32 }
          cleanup
  br label %3941

3939:                                             ; preds = %3935
  %3940 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %259) #8
  br label %3941

3941:                                             ; preds = %3939, %3937
  %.pn2762 = phi { ptr, i32 } [ %3940, %3939 ], [ %3938, %3937 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %260) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %260) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %259) #8
  br label %6424

3942:                                             ; preds = %3936, %3924
  %3943 = phi i8 [ %.pre3346, %3936 ], [ %3929, %3924 ]
  %3944 = trunc nuw i8 %3943 to i1
  br i1 %3944, label %3945, label %3950

3945:                                             ; preds = %3942
  %3946 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %3946, ptr noundef nonnull @.str.1422)
          to label %3947 unwind label %3948

3947:                                             ; preds = %3945
  call void @__cxa_throw(ptr nonnull %3946, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
  unreachable

3948:                                             ; preds = %3945
  %3949 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %3946) #8
  br label %6424

3950:                                             ; preds = %3942
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %261) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %262) #8
  %3951 = getelementptr inbounds i8, ptr %545, i64 8
  %3952 = load i32, ptr %3951, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL36convert_separate_image_to_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %262, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3952)
  invoke void @_ZN11spirv_cross4joinIJRA20_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %261, ptr noundef nonnull align 1 dereferenceable(20) @.str.1423, ptr noundef nonnull align 8 dereferenceable(32) %262, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %3953 unwind label %3961

3953:                                             ; preds = %3950
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %262) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %262) #8
  %3954 = load i32, ptr %545, align 4, !tbaa !125
  %3955 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %3954)
          to label %3956 unwind label %3963

3956:                                             ; preds = %3953
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %263) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionERKNS_8SPIRTypeENS1_8BaseTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %263, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %3955, i32 noundef 7, ptr noundef nonnull align 8 dereferenceable(32) %261)
          to label %3957 unwind label %3965

3957:                                             ; preds = %3956
  %3958 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %261, ptr noundef nonnull align 8 dereferenceable(32) %263) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %263) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %263) #8
  %3959 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3925, i32 noundef %3927, ptr noundef nonnull align 8 dereferenceable(32) %261, i1 noundef zeroext true, i1 noundef zeroext false)
          to label %3960 unwind label %3963

3960:                                             ; preds = %3957
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %261) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %261) #8
  br label %.thread3374

3961:                                             ; preds = %3950
  %3962 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %262) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %262) #8
  br label %3968

3963:                                             ; preds = %3957, %3953
  %3964 = landingpad { ptr, i32 }
          cleanup
  br label %3967

3965:                                             ; preds = %3956
  %3966 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %263) #8
  br label %3967

3967:                                             ; preds = %3965, %3963
  %.pn2764 = phi { ptr, i32 } [ %3964, %3963 ], [ %3966, %3965 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %261) #8
  br label %3968

3968:                                             ; preds = %3967, %3961
  %.pn2764.pn = phi { ptr, i32 } [ %.pn2764, %3967 ], [ %3962, %3961 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %261) #8
  br label %6424

3969:                                             ; preds = %566
  %3970 = getelementptr inbounds i8, ptr %545, i64 8
  %3971 = load i32, ptr %3970, align 4, !tbaa !125
  %3972 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %3971)
  %3973 = load i32, ptr %545, align 4, !tbaa !125
  %3974 = getelementptr inbounds i8, ptr %545, i64 4
  %3975 = load i32, ptr %3974, align 4, !tbaa !125
  %3976 = getelementptr inbounds i8, ptr %0, i64 7640
  %3977 = load i8, ptr %3976, align 8, !tbaa !207, !range !123, !noundef !124
  %3978 = trunc nuw i8 %3977 to i1
  br i1 %3978, label %3979, label %3984

3979:                                             ; preds = %3969
  %3980 = tail call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %3980, ptr noundef nonnull @.str.1424)
          to label %3981 unwind label %3982

3981:                                             ; preds = %3979
  tail call void @__cxa_throw(ptr nonnull %3980, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
  unreachable

3982:                                             ; preds = %3979
  %3983 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %3980) #8
  br label %6424

3984:                                             ; preds = %3969
  %3985 = getelementptr inbounds i8, ptr %0, i64 7636
  %3986 = load i32, ptr %3985, align 4, !tbaa !204
  %3987 = icmp ult i32 %3986, 450
  br i1 %3987, label %3988, label %3996

3988:                                             ; preds = %3984
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %264) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %265) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %265) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %264, ptr noundef nonnull @.str.1425, ptr noundef nonnull align 1 dereferenceable(1) %265)
          to label %3989 unwind label %3991

3989:                                             ; preds = %3988
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %264)
          to label %3990 unwind label %3993

3990:                                             ; preds = %3989
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %264) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %265) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %265) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %264) #8
  br label %3996

3991:                                             ; preds = %3988
  %3992 = landingpad { ptr, i32 }
          cleanup
  br label %3995

3993:                                             ; preds = %3989
  %3994 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %264) #8
  br label %3995

3995:                                             ; preds = %3993, %3991
  %.pn2751 = phi { ptr, i32 } [ %3994, %3993 ], [ %3992, %3991 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %265) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %265) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %264) #8
  br label %6424

3996:                                             ; preds = %3984, %3990
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %266) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %266) #8
  %3997 = getelementptr inbounds i8, ptr %3972, i64 260
  %3998 = load i32, ptr %3997, align 4, !tbaa !212
  %3999 = icmp eq i32 %3998, 2
  br i1 %3999, label %4000, label %4010

4000:                                             ; preds = %3996
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %267) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %268) #8
  %4001 = load i32, ptr %3970, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %268, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4001)
          to label %4002 unwind label %4005

4002:                                             ; preds = %4000
  invoke void @_ZN11spirv_cross4joinIJRA14_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %267, ptr noundef nonnull align 1 dereferenceable(14) @.str.1426, ptr noundef nonnull align 8 dereferenceable(32) %268, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %4003 unwind label %4007

4003:                                             ; preds = %4002
  %4004 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %266, ptr noundef nonnull align 8 dereferenceable(32) %267) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %267) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %268) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %268) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %267) #8
  br label %4020

4005:                                             ; preds = %4000
  %4006 = landingpad { ptr, i32 }
          cleanup
  br label %4009

4007:                                             ; preds = %4002
  %4008 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %268) #8
  br label %4009

4009:                                             ; preds = %4007, %4005
  %.pn2755 = phi { ptr, i32 } [ %4008, %4007 ], [ %4006, %4005 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %268) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %267) #8
  br label %4032

4010:                                             ; preds = %3996
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %269) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %270) #8
  %4011 = load i32, ptr %3970, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL36convert_separate_image_to_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %270, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4011)
          to label %4012 unwind label %4015

4012:                                             ; preds = %4010
  invoke void @_ZN11spirv_cross4joinIJRA16_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %269, ptr noundef nonnull align 1 dereferenceable(16) @.str.1427, ptr noundef nonnull align 8 dereferenceable(32) %270, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %4013 unwind label %4017

4013:                                             ; preds = %4012
  %4014 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %266, ptr noundef nonnull align 8 dereferenceable(32) %269) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %269) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %270) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %270) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %269) #8
  br label %4020

4015:                                             ; preds = %4010
  %4016 = landingpad { ptr, i32 }
          cleanup
  br label %4019

4017:                                             ; preds = %4012
  %4018 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %270) #8
  br label %4019

4019:                                             ; preds = %4017, %4015
  %.pn2753 = phi { ptr, i32 } [ %4018, %4017 ], [ %4016, %4015 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %270) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %269) #8
  br label %4032

4020:                                             ; preds = %4013, %4003
  %4021 = load i32, ptr %545, align 4, !tbaa !125
  %4022 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %4021)
          to label %4023 unwind label %4028

4023:                                             ; preds = %4020
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %271) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionERKNS_8SPIRTypeENS1_8BaseTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %271, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %4022, i32 noundef 7, ptr noundef nonnull align 8 dereferenceable(32) %266)
          to label %4024 unwind label %4030

4024:                                             ; preds = %4023
  %4025 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %266, ptr noundef nonnull align 8 dereferenceable(32) %271) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %271) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %271) #8
  %4026 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3973, i32 noundef %3975, ptr noundef nonnull align 8 dereferenceable(32) %266, i1 noundef zeroext true, i1 noundef zeroext false)
          to label %4027 unwind label %4028

4027:                                             ; preds = %4024
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %266) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %266) #8
  br label %.thread3374

4028:                                             ; preds = %4024, %4020
  %4029 = landingpad { ptr, i32 }
          cleanup
  br label %4032

4030:                                             ; preds = %4023
  %4031 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %271) #8
  br label %4032

4032:                                             ; preds = %4028, %4030, %4019, %4009
  %.pn2757.pn = phi { ptr, i32 } [ %.pn2755, %4009 ], [ %.pn2753, %4019 ], [ %4029, %4028 ], [ %4031, %4030 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %266) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %266) #8
  br label %6424

4033:                                             ; preds = %566
  %4034 = load i32, ptr %545, align 4, !tbaa !125
  %4035 = getelementptr inbounds i8, ptr %545, i64 4
  %4036 = load i32, ptr %4035, align 4, !tbaa !125
  %4037 = getelementptr inbounds i8, ptr %545, i64 8
  %4038 = load i32, ptr %4037, align 4, !tbaa !125
  %4039 = getelementptr inbounds i8, ptr %545, i64 12
  %4040 = load i32, ptr %4039, align 4, !tbaa !125
  %4041 = load ptr, ptr %0, align 8, !tbaa !142
  %4042 = getelementptr inbounds i8, ptr %4041, i64 120
  %4043 = load ptr, ptr %4042, align 8
  tail call void %4043(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4034, i32 noundef %4036, i32 noundef %4038, i32 noundef %4040)
  %4044 = load i32, ptr %4037, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %4036, i32 noundef %4044)
  %4045 = load i32, ptr %4039, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %4036, i32 noundef %4045)
  br label %.thread3374

4046:                                             ; preds = %566
  %4047 = load i32, ptr %545, align 4, !tbaa !125
  %4048 = getelementptr inbounds i8, ptr %545, i64 4
  %4049 = load i32, ptr %4048, align 4, !tbaa !125
  %4050 = getelementptr inbounds i8, ptr %545, i64 8
  %4051 = load i32, ptr %4050, align 4, !tbaa !125
  %4052 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %4051)
  %4053 = getelementptr inbounds i8, ptr %4052, i64 8
  %4054 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %4053)
  %4055 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %4054)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %272) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %273) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %273) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %272, ptr noundef nonnull @.str.492, ptr noundef nonnull align 1 dereferenceable(1) %273)
          to label %4056 unwind label %4061

4056:                                             ; preds = %4046
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %273) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %273) #8
  %4057 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL17is_legacy_desktopEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
  br i1 %4057, label %4058, label %4067

4058:                                             ; preds = %4056
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %274) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL13legacy_tex_opERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_8SPIRTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %274, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %272, ptr noundef nonnull align 8 dereferenceable(336) %4055, i32 noundef %4051)
          to label %4059 unwind label %4065

4059:                                             ; preds = %4058
  %4060 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %272, ptr noundef nonnull align 8 dereferenceable(32) %274) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %274) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %274) #8
  br label %4074

4061:                                             ; preds = %4046
  %4062 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %273) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %273) #8
  br label %4115

4063:                                             ; preds = %4071
  %4064 = landingpad { ptr, i32 }
          cleanup
  br label %4114

4065:                                             ; preds = %4058
  %4066 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %274) #8
  br label %4114

4067:                                             ; preds = %4056
  %4068 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL12is_legacy_esEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
  br i1 %4068, label %4069, label %4074

4069:                                             ; preds = %4067
  %4070 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %4070, ptr noundef nonnull @.str.1428)
          to label %4071 unwind label %4072

4071:                                             ; preds = %4069
  invoke void @__cxa_throw(ptr nonnull %4070, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
          to label %6425 unwind label %4063

4072:                                             ; preds = %4069
  %4073 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %4070) #8
  br label %4114

4074:                                             ; preds = %4067, %4059
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %275) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %276) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL36convert_separate_image_to_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %276, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4051)
          to label %4075 unwind label %4090

4075:                                             ; preds = %4074
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %277) #8
  %4076 = getelementptr inbounds i8, ptr %545, i64 12
  %4077 = load i32, ptr %4076, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionB5cxx11ENS_8SPIRType8BaseTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %277, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef 7, i32 noundef %4077)
          to label %4078 unwind label %4092

4078:                                             ; preds = %4075
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS6_RA3_S8_S6_SA_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %275, ptr noundef nonnull align 8 dereferenceable(32) %272, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %276, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %277, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %4079 unwind label %4094

4079:                                             ; preds = %4078
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %277) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %277) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %276) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %276) #8
  %4080 = getelementptr inbounds i8, ptr %4052, i64 252
  %4081 = load i32, ptr %4080, align 4, !tbaa !213
  %4082 = icmp eq i32 %4081, 0
  br i1 %4082, label %4083, label %4100

4083:                                             ; preds = %4079
  %4084 = getelementptr inbounds i8, ptr %0, i64 7640
  %4085 = load i8, ptr %4084, align 8, !tbaa !207, !range !123, !noundef !124
  %4086 = trunc nuw i8 %4085 to i1
  br i1 %4086, label %4087, label %4100

4087:                                             ; preds = %4083
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %278) #8
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_KcEEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %278, ptr noundef nonnull align 8 dereferenceable(32) %275, ptr noundef nonnull align 1 dereferenceable(3) @.str)
          to label %4088 unwind label %4098

4088:                                             ; preds = %4087
  %4089 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %275, ptr noundef nonnull align 8 dereferenceable(32) %278) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %278) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %278) #8
  br label %4100

4090:                                             ; preds = %4074
  %4091 = landingpad { ptr, i32 }
          cleanup
  br label %4097

4092:                                             ; preds = %4075
  %4093 = landingpad { ptr, i32 }
          cleanup
  br label %4096

4094:                                             ; preds = %4078
  %4095 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %277) #8
  br label %4096

4096:                                             ; preds = %4094, %4092
  %.pn2742 = phi { ptr, i32 } [ %4095, %4094 ], [ %4093, %4092 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %277) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %276) #8
  br label %4097

4097:                                             ; preds = %4096, %4090
  %.pn2742.pn = phi { ptr, i32 } [ %.pn2742, %4096 ], [ %4091, %4090 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %276) #8
  br label %4113

4098:                                             ; preds = %4087
  %4099 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %278) #8
  br label %4112

4100:                                             ; preds = %4088, %4083, %4079
  %4101 = load i32, ptr %545, align 4, !tbaa !125
  %4102 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %4101)
          to label %4103 unwind label %4108

4103:                                             ; preds = %4100
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %279) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionERKNS_8SPIRTypeENS1_8BaseTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %279, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %4102, i32 noundef 7, ptr noundef nonnull align 8 dereferenceable(32) %275)
          to label %4104 unwind label %4110

4104:                                             ; preds = %4103
  %4105 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %275, ptr noundef nonnull align 8 dereferenceable(32) %279) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %279) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %279) #8
  %4106 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4047, i32 noundef %4049, ptr noundef nonnull align 8 dereferenceable(32) %275, i1 noundef zeroext true, i1 noundef zeroext false)
          to label %4107 unwind label %4108

4107:                                             ; preds = %4104
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %275) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %275) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %272) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %272) #8
  br label %.thread3374

4108:                                             ; preds = %4104, %4100
  %4109 = landingpad { ptr, i32 }
          cleanup
  br label %4112

4110:                                             ; preds = %4103
  %4111 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %279) #8
  br label %4112

4112:                                             ; preds = %4108, %4110, %4098
  %.pn2745.pn = phi { ptr, i32 } [ %4099, %4098 ], [ %4109, %4108 ], [ %4111, %4110 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %275) #8
  br label %4113

4113:                                             ; preds = %4112, %4097
  %.pn2745.pn.pn = phi { ptr, i32 } [ %.pn2745.pn, %4112 ], [ %.pn2742.pn, %4097 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %275) #8
  br label %4114

4114:                                             ; preds = %4113, %4072, %4065, %4063
  %.pn2745.pn.pn.pn = phi { ptr, i32 } [ %.pn2745.pn.pn, %4113 ], [ %4066, %4065 ], [ %4064, %4063 ], [ %4073, %4072 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %272) #8
  br label %4115

4115:                                             ; preds = %4114, %4061
  %.pn2745.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn2745.pn.pn.pn, %4114 ], [ %4062, %4061 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %272) #8
  br label %6424

4116:                                             ; preds = %566, %566
  %4117 = getelementptr inbounds i8, ptr %545, i64 8
  %4118 = load i32, ptr %4117, align 4, !tbaa !125
  %4119 = tail call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %4118)
  %.not2689 = icmp eq ptr %4119, null
  br i1 %.not2689, label %4125, label %4120

4120:                                             ; preds = %4116
  %4121 = getelementptr inbounds i8, ptr %4119, i64 8
  %.sroa.0227.0.copyload = load i32, ptr %4121, align 8, !tbaa !125
  %4122 = tail call noundef nonnull align 8 dereferenceable(64) ptr @_ZNK11spirv_cross8Compiler21get_decoration_bitsetENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.0227.0.copyload)
  %4123 = tail call noundef zeroext i1 @_ZNK11spirv_cross6Bitset3getEj(ptr noundef nonnull align 8 dereferenceable(64) %4122, i32 noundef 25)
  br i1 %4123, label %4124, label %4125

4124:                                             ; preds = %4120
  %.sroa.0226.0.copyload = load i32, ptr %4121, align 8, !tbaa !125
  tail call void @_ZN11spirv_cross8Compiler16unset_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.0226.0.copyload, i32 noundef 25)
  tail call void @_ZN11spirv_cross8Compiler15force_recompileEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
  br label %4125

4125:                                             ; preds = %4120, %4124, %4116
  %4126 = load i32, ptr %545, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %280) #8
  %4127 = getelementptr inbounds i8, ptr %545, i64 4
  %4128 = load i32, ptr %4127, align 4, !tbaa !125
  store i32 %4128, ptr %280, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %281) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %281) #8
  %4129 = load i32, ptr %4117, align 4, !tbaa !125
  %4130 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %4129)
          to label %4131 unwind label %4143

4131:                                             ; preds = %4125
  br i1 %.not2689, label %4201, label %4132

4132:                                             ; preds = %4131
  %4133 = getelementptr inbounds i8, ptr %4119, i64 155
  %4134 = load i8, ptr %4133, align 1, !tbaa !170, !range !123, !noundef !124
  %4135 = trunc nuw i8 %4134 to i1
  br i1 %4135, label %4136, label %.thread3142

4136:                                             ; preds = %4132
  %4137 = getelementptr inbounds i8, ptr %4130, i64 258
  %4138 = load i8, ptr %4137, align 2, !tbaa !214, !range !123, !noundef !124
  %4139 = trunc nuw i8 %4138 to i1
  br i1 %4139, label %4140, label %4147

4140:                                             ; preds = %4136
  %4141 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %4141, ptr noundef nonnull @.str.1429)
          to label %4142 unwind label %4145

4142:                                             ; preds = %4140
  invoke void @__cxa_throw(ptr nonnull %4141, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
          to label %6425 unwind label %4143

4143:                                             ; preds = %4518, %4511, %4509, %4208, %4142, %4125
  %4144 = landingpad { ptr, i32 }
          cleanup
  br label %4523

4145:                                             ; preds = %4140
  %4146 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %4141) #8
  br label %4523

4147:                                             ; preds = %4136
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %282) #8
  %4148 = getelementptr inbounds i8, ptr %0, i64 9400
  %4149 = call ptr @_ZSt5beginISt6vectorIN11spirv_cross8PlsRemapESaIS2_EEEDTcldtfp_5beginEERT_(ptr noundef nonnull align 8 dereferenceable(24) %4148)
  %4150 = call ptr @_ZSt3endISt6vectorIN11spirv_cross8PlsRemapESaIS2_EEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(24) %4148)
  %4151 = invoke ptr @"_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPN11spirv_cross8PlsRemapESt6vectorIS3_SaIS3_EEEEZNS2_12CompilerGLSL16emit_instructionERKNS2_11InstructionEE3$_0ET_SE_SE_T0_"(ptr %4149, ptr %4150, ptr nonnull %4119)
          to label %4152 unwind label %4161

4152:                                             ; preds = %4147
  store ptr %4151, ptr %282, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %283) #8
  %4153 = call ptr @_ZSt3endISt6vectorIN11spirv_cross8PlsRemapESaIS2_EEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(24) %4148)
  store ptr %4153, ptr %283, align 8
  %4154 = call noundef zeroext i1 @_ZN9__gnu_cxxeqIPN11spirv_cross8PlsRemapESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %282, ptr noundef nonnull align 8 dereferenceable(8) %283) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %283) #8
  br i1 %4154, label %4155, label %4181

4155:                                             ; preds = %4152
  %4156 = getelementptr inbounds i8, ptr %4119, i64 156
  %4157 = load i32, ptr %4156, align 4, !tbaa !215
  %.not2733 = icmp eq i32 %4157, 0
  br i1 %.not2733, label %4158, label %4165

4158:                                             ; preds = %4155
  %4159 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %4159, ptr noundef nonnull @.str.1430)
          to label %4160 unwind label %4163

4160:                                             ; preds = %4158
  invoke void @__cxa_throw(ptr nonnull %4159, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
          to label %6425 unwind label %4161

4161:                                             ; preds = %4160, %4147
  %4162 = landingpad { ptr, i32 }
          cleanup
  br label %4200

4163:                                             ; preds = %4158
  %4164 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %4159) #8
  br label %4200

4165:                                             ; preds = %4155
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %284) #8
  %4166 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %4126)
          to label %4167 unwind label %4173

4167:                                             ; preds = %4165
  %4168 = load i32, ptr %4156, align 4, !tbaa !215
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %285) #8
  %4169 = load i32, ptr %4117, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %285, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4169, i1 noundef zeroext true)
          to label %4170 unwind label %4175

4170:                                             ; preds = %4167
  invoke void @_ZN11spirv_cross12CompilerGLSL13remap_swizzleERKNS_8SPIRTypeEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %284, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %4166, i32 noundef %4168, ptr noundef nonnull align 8 dereferenceable(32) %285)
          to label %4171 unwind label %4177

4171:                                             ; preds = %4170
  %4172 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %281, ptr noundef nonnull align 8 dereferenceable(32) %284) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %284) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %285) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %285) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %284) #8
  br label %.thread3146

4173:                                             ; preds = %4165
  %4174 = landingpad { ptr, i32 }
          cleanup
  br label %4180

4175:                                             ; preds = %4167
  %4176 = landingpad { ptr, i32 }
          cleanup
  br label %4179

4177:                                             ; preds = %4170
  %4178 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %285) #8
  br label %4179

4179:                                             ; preds = %4177, %4175
  %.pn2734 = phi { ptr, i32 } [ %4178, %4177 ], [ %4176, %4175 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %285) #8
  br label %4180

4180:                                             ; preds = %4179, %4173
  %.pn2734.pn = phi { ptr, i32 } [ %.pn2734, %4179 ], [ %4174, %4173 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %284) #8
  br label %4200

4181:                                             ; preds = %4152
  %4182 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN11spirv_cross8PlsRemapESt6vectorIS2_SaIS2_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %282) #8
  %4183 = getelementptr inbounds i8, ptr %4182, i64 4
  %4184 = load i32, ptr %4183, align 4, !tbaa !216
  %4185 = call noundef i32 @_ZL24pls_format_to_componentsN11spirv_cross9PlsFormatE(i32 noundef %4184)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %286) #8
  %4186 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %4126)
          to label %4187 unwind label %4192

4187:                                             ; preds = %4181
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %287) #8
  %4188 = load i32, ptr %4117, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %287, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4188, i1 noundef zeroext true)
          to label %4189 unwind label %4194

4189:                                             ; preds = %4187
  invoke void @_ZN11spirv_cross12CompilerGLSL13remap_swizzleERKNS_8SPIRTypeEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %286, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %4186, i32 noundef %4185, ptr noundef nonnull align 8 dereferenceable(32) %287)
          to label %4190 unwind label %4196

4190:                                             ; preds = %4189
  %4191 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %281, ptr noundef nonnull align 8 dereferenceable(32) %286) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %286) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %287) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %287) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %286) #8
  br label %.thread3146

4192:                                             ; preds = %4181
  %4193 = landingpad { ptr, i32 }
          cleanup
  br label %4199

4194:                                             ; preds = %4187
  %4195 = landingpad { ptr, i32 }
          cleanup
  br label %4198

4196:                                             ; preds = %4189
  %4197 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %287) #8
  br label %4198

4198:                                             ; preds = %4196, %4194
  %.pn2730 = phi { ptr, i32 } [ %4197, %4196 ], [ %4195, %4194 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %287) #8
  br label %4199

4199:                                             ; preds = %4198, %4192
  %.pn2730.pn = phi { ptr, i32 } [ %.pn2730, %4198 ], [ %4193, %4192 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %286) #8
  br label %4200

.thread3146:                                      ; preds = %4171, %4190
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %282) #8
  br label %4489

4200:                                             ; preds = %4199, %4180, %4163, %4161
  %.pn2734.pn.pn = phi { ptr, i32 } [ %.pn2734.pn, %4180 ], [ %4162, %4161 ], [ %4164, %4163 ], [ %.pn2730.pn, %4199 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %282) #8
  br label %4523

4201:                                             ; preds = %4131
  %4202 = getelementptr inbounds i8, ptr %4130, i64 252
  %4203 = load i32, ptr %4202, align 4, !tbaa !213
  %4204 = icmp eq i32 %4203, 6
  br i1 %4204, label %4219, label %4311

.thread3142:                                      ; preds = %4132
  %4205 = getelementptr inbounds i8, ptr %4130, i64 252
  %4206 = load i32, ptr %4205, align 4, !tbaa !213
  %4207 = icmp eq i32 %4206, 6
  br i1 %4207, label %4208, label %4311

4208:                                             ; preds = %.thread3142
  %4209 = getelementptr inbounds i8, ptr %4119, i64 8
  %4210 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %4209)
  %4211 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL34subpass_input_is_framebuffer_fetchEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4210)
          to label %4212 unwind label %4143

4212:                                             ; preds = %4208
  br i1 %4211, label %4213, label %4219

4213:                                             ; preds = %4212
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %288) #8
  %4214 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %4209)
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %288, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4214, i1 noundef zeroext true)
          to label %4215 unwind label %4217

4215:                                             ; preds = %4213
  %4216 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %281, ptr noundef nonnull align 8 dereferenceable(32) %288) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %288) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %288) #8
  br label %4304

4217:                                             ; preds = %4213
  %4218 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %288) #8
  br label %4523

4219:                                             ; preds = %4201, %4212
  %4220 = getelementptr inbounds i8, ptr %0, i64 7648
  %4221 = load i8, ptr %4220, align 8, !tbaa !219, !range !123, !noundef !124
  %4222 = trunc nuw i8 %4221 to i1
  %4223 = getelementptr inbounds i8, ptr %4130, i64 258
  %4224 = load i8, ptr %4223, align 2, !tbaa !214, !range !123, !noundef !124
  %4225 = trunc nuw i8 %4224 to i1
  br i1 %4222, label %4226, label %4265

4226:                                             ; preds = %4219
  br i1 %4225, label %4227, label %4255

4227:                                             ; preds = %4226
  %4228 = getelementptr inbounds i8, ptr %545, i64 16
  %4229 = load i32, ptr %4228, align 4, !tbaa !125
  %4230 = icmp ne i32 %4229, 64
  %4231 = icmp ne i32 %549, 6
  %or.cond16 = select i1 %4230, i1 true, i1 %4231
  br i1 %or.cond16, label %4232, label %4239

4232:                                             ; preds = %4227
  %4233 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %4233, ptr noundef nonnull @.str.1431)
          to label %4234 unwind label %4235

4234:                                             ; preds = %4232
  invoke void @__cxa_throw(ptr nonnull %4233, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
          to label %6425 unwind label %4237

4235:                                             ; preds = %4232
  %4236 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %4233) #8
  br label %4523

4237:                                             ; preds = %4234
  %4238 = landingpad { ptr, i32 }
          cleanup
  br label %4523

4239:                                             ; preds = %4227
  %4240 = getelementptr inbounds i8, ptr %545, i64 20
  %4241 = load i32, ptr %4240, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %289) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %290) #8
  %4242 = load i32, ptr %4117, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %290, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4242)
          to label %4243 unwind label %4247

4243:                                             ; preds = %4239
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %291) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %291, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4241, i1 noundef zeroext true)
          to label %4244 unwind label %4249

4244:                                             ; preds = %4243
  invoke void @_ZN11spirv_cross4joinIJRA13_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_S9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %289, ptr noundef nonnull align 1 dereferenceable(13) @.str.1432, ptr noundef nonnull align 8 dereferenceable(32) %290, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %291, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %4245 unwind label %4251

4245:                                             ; preds = %4244
  %4246 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %281, ptr noundef nonnull align 8 dereferenceable(32) %289) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %289) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %291) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %291) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %290) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %290) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %289) #8
  br label %4304

4247:                                             ; preds = %4239
  %4248 = landingpad { ptr, i32 }
          cleanup
  br label %4254

4249:                                             ; preds = %4243
  %4250 = landingpad { ptr, i32 }
          cleanup
  br label %4253

4251:                                             ; preds = %4244
  %4252 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %291) #8
  br label %4253

4253:                                             ; preds = %4251, %4249
  %.pn2725 = phi { ptr, i32 } [ %4252, %4251 ], [ %4250, %4249 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %291) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %290) #8
  br label %4254

4254:                                             ; preds = %4253, %4247
  %.pn2725.pn = phi { ptr, i32 } [ %.pn2725, %4253 ], [ %4248, %4247 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %290) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %289) #8
  br label %4523

4255:                                             ; preds = %4226
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %292) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %293) #8
  %4256 = load i32, ptr %4117, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %293, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4256)
          to label %4257 unwind label %4260

4257:                                             ; preds = %4255
  invoke void @_ZN11spirv_cross4joinIJRA13_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %292, ptr noundef nonnull align 1 dereferenceable(13) @.str.1432, ptr noundef nonnull align 8 dereferenceable(32) %293, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %4258 unwind label %4262

4258:                                             ; preds = %4257
  %4259 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %281, ptr noundef nonnull align 8 dereferenceable(32) %292) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %292) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %293) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %293) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %292) #8
  br label %4304

4260:                                             ; preds = %4255
  %4261 = landingpad { ptr, i32 }
          cleanup
  br label %4264

4262:                                             ; preds = %4257
  %4263 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %293) #8
  br label %4264

4264:                                             ; preds = %4262, %4260
  %.pn2723 = phi { ptr, i32 } [ %4263, %4262 ], [ %4261, %4260 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %293) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %292) #8
  br label %4523

4265:                                             ; preds = %4219
  br i1 %4225, label %4266, label %4294

4266:                                             ; preds = %4265
  %4267 = getelementptr inbounds i8, ptr %545, i64 16
  %4268 = load i32, ptr %4267, align 4, !tbaa !125
  %4269 = icmp ne i32 %4268, 64
  %4270 = icmp ne i32 %549, 6
  %or.cond18 = select i1 %4269, i1 true, i1 %4270
  br i1 %or.cond18, label %4271, label %4278

4271:                                             ; preds = %4266
  %4272 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %4272, ptr noundef nonnull @.str.1431)
          to label %4273 unwind label %4274

4273:                                             ; preds = %4271
  invoke void @__cxa_throw(ptr nonnull %4272, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
          to label %6425 unwind label %4276

4274:                                             ; preds = %4271
  %4275 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %4272) #8
  br label %4523

4276:                                             ; preds = %4273
  %4277 = landingpad { ptr, i32 }
          cleanup
  br label %4523

4278:                                             ; preds = %4266
  %4279 = getelementptr inbounds i8, ptr %545, i64 20
  %4280 = load i32, ptr %4279, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %294) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %295) #8
  %4281 = load i32, ptr %4117, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %295, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4281)
          to label %4282 unwind label %4286

4282:                                             ; preds = %4278
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %296) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %296, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4280, i1 noundef zeroext true)
          to label %4283 unwind label %4288

4283:                                             ; preds = %4282
  invoke void @_ZN11spirv_cross4joinIJRA12_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA27_S1_S9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %294, ptr noundef nonnull align 1 dereferenceable(12) @.str.1433, ptr noundef nonnull align 8 dereferenceable(32) %295, ptr noundef nonnull align 1 dereferenceable(27) @.str.1434, ptr noundef nonnull align 8 dereferenceable(32) %296, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %4284 unwind label %4290

4284:                                             ; preds = %4283
  %4285 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %281, ptr noundef nonnull align 8 dereferenceable(32) %294) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %294) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %296) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %296) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %295) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %295) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %294) #8
  br label %4304

4286:                                             ; preds = %4278
  %4287 = landingpad { ptr, i32 }
          cleanup
  br label %4293

4288:                                             ; preds = %4282
  %4289 = landingpad { ptr, i32 }
          cleanup
  br label %4292

4290:                                             ; preds = %4283
  %4291 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %296) #8
  br label %4292

4292:                                             ; preds = %4290, %4288
  %.pn2718 = phi { ptr, i32 } [ %4291, %4290 ], [ %4289, %4288 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %296) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %295) #8
  br label %4293

4293:                                             ; preds = %4292, %4286
  %.pn2718.pn = phi { ptr, i32 } [ %.pn2718, %4292 ], [ %4287, %4286 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %295) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %294) #8
  br label %4523

4294:                                             ; preds = %4265
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %297) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %298) #8
  %4295 = load i32, ptr %4117, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %298, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4295)
          to label %4296 unwind label %4299

4296:                                             ; preds = %4294
  invoke void @_ZN11spirv_cross4joinIJRA12_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA29_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %297, ptr noundef nonnull align 1 dereferenceable(12) @.str.1433, ptr noundef nonnull align 8 dereferenceable(32) %298, ptr noundef nonnull align 1 dereferenceable(29) @.str.1435)
          to label %4297 unwind label %4301

4297:                                             ; preds = %4296
  %4298 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %281, ptr noundef nonnull align 8 dereferenceable(32) %297) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %297) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %298) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %298) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %297) #8
  br label %4304

4299:                                             ; preds = %4294
  %4300 = landingpad { ptr, i32 }
          cleanup
  br label %4303

4301:                                             ; preds = %4296
  %4302 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %298) #8
  br label %4303

4303:                                             ; preds = %4301, %4299
  %.pn2716 = phi { ptr, i32 } [ %4302, %4301 ], [ %4300, %4299 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %298) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %297) #8
  br label %4523

4304:                                             ; preds = %4258, %4245, %4297, %4284, %4215
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %299) #8
  %4305 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %4126)
          to label %4306 unwind label %4309

4306:                                             ; preds = %4304
  invoke void @_ZN11spirv_cross12CompilerGLSL13remap_swizzleERKNS_8SPIRTypeEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %299, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %4305, i32 noundef 4, ptr noundef nonnull align 8 dereferenceable(32) %281)
          to label %4307 unwind label %4309

4307:                                             ; preds = %4306
  %4308 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %281, ptr noundef nonnull align 8 dereferenceable(32) %299) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %299) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %299) #8
  br label %4488

4309:                                             ; preds = %4306, %4304
  %4310 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %299) #8
  br label %4523

4311:                                             ; preds = %.thread3142, %4201
  %4312 = phi ptr [ %4205, %.thread3142 ], [ %4202, %4201 ]
  %4313 = icmp eq i32 %568, 320
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %300) #8
  store i32 0, ptr %300, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %301) #8
  store i32 0, ptr %301, align 4, !tbaa !125
  br i1 %4313, label %4314, label %4319

4314:                                             ; preds = %4311
  %4315 = load i32, ptr %545, align 4, !tbaa !125
  %4316 = load i32, ptr %4127, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL32emit_sparse_feedback_temporariesEjjRjS1_(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4315, i32 noundef %4316, ptr noundef nonnull align 4 dereferenceable(4) %300, ptr noundef nonnull align 4 dereferenceable(4) %301)
          to label %4319 unwind label %4317

4317:                                             ; preds = %4314
  %4318 = landingpad { ptr, i32 }
          cleanup
  br label %4487

4319:                                             ; preds = %4314, %4311
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %302) #8
  %4320 = getelementptr inbounds i8, ptr %545, i64 12
  %4321 = load i32, ptr %4320, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %302, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4321, i1 noundef zeroext true)
          to label %4322 unwind label %4344

4322:                                             ; preds = %4319
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %303) #8
  %4323 = load i32, ptr %4320, align 4, !tbaa !125
  %4324 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %4323)
          to label %4325 unwind label %4346

4325:                                             ; preds = %4322
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %303, ptr noundef nonnull align 8 dereferenceable(336) %4324)
          to label %4326 unwind label %4346

4326:                                             ; preds = %4325
  %4327 = getelementptr inbounds i8, ptr %303, i64 16
  store i32 7, ptr %4327, align 8, !tbaa !145
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %304) #8
  %4328 = load i32, ptr %4320, align 4, !tbaa !125
  %4329 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %4328)
          to label %4330 unwind label %4348

4330:                                             ; preds = %4326
  %4331 = getelementptr inbounds i8, ptr %4329, i64 16
  %4332 = load i32, ptr %4331, align 8, !tbaa !145
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionERKNS_8SPIRTypeENS1_8BaseTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %304, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %303, i32 noundef %4332, ptr noundef nonnull align 8 dereferenceable(32) %302)
          to label %4333 unwind label %4348

4333:                                             ; preds = %4330
  %4334 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %302, ptr noundef nonnull align 8 dereferenceable(32) %304) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %304) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %304) #8
  %4335 = load i32, ptr %4312, align 4, !tbaa !213
  %4336 = icmp eq i32 %4335, 0
  br i1 %4336, label %4337, label %4352

4337:                                             ; preds = %4333
  %4338 = getelementptr inbounds i8, ptr %0, i64 7640
  %4339 = load i8, ptr %4338, align 8, !tbaa !207, !range !123, !noundef !124
  %4340 = trunc nuw i8 %4339 to i1
  br i1 %4340, label %4341, label %4352

4341:                                             ; preds = %4337
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %305) #8
  invoke void @_ZN11spirv_cross4joinIJRA7_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA5_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %305, ptr noundef nonnull align 1 dereferenceable(7) @.str.1095, ptr noundef nonnull align 8 dereferenceable(32) %302, ptr noundef nonnull align 1 dereferenceable(5) @.str.1096)
          to label %4342 unwind label %4350

4342:                                             ; preds = %4341
  %4343 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %302, ptr noundef nonnull align 8 dereferenceable(32) %305) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %305) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %305) #8
  br label %4352

4344:                                             ; preds = %4319
  %4345 = landingpad { ptr, i32 }
          cleanup
  br label %4486

4346:                                             ; preds = %4325, %4322
  %4347 = landingpad { ptr, i32 }
          cleanup
  br label %4485

4348:                                             ; preds = %4330, %4326
  %4349 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %304) #8
  br label %4484

4350:                                             ; preds = %4341
  %4351 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %305) #8
  br label %4484

4352:                                             ; preds = %4342, %4337, %4333
  %4353 = getelementptr inbounds i8, ptr %4130, i64 258
  %4354 = load i8, ptr %4353, align 2, !tbaa !214, !range !123, !noundef !124
  %4355 = trunc nuw i8 %4354 to i1
  br i1 %4313, label %4356, label %4435

4356:                                             ; preds = %4352
  br i1 %4355, label %4357, label %4394

4357:                                             ; preds = %4356
  %4358 = getelementptr inbounds i8, ptr %545, i64 16
  %4359 = load i32, ptr %4358, align 4, !tbaa !125
  %4360 = icmp ne i32 %4359, 64
  %4361 = icmp ne i32 %549, 6
  %or.cond20 = select i1 %4360, i1 true, i1 %4361
  br i1 %or.cond20, label %4362, label %4369

4362:                                             ; preds = %4357
  %4363 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %4363, ptr noundef nonnull @.str.1431)
          to label %4364 unwind label %4365

4364:                                             ; preds = %4362
  invoke void @__cxa_throw(ptr nonnull %4363, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
          to label %6425 unwind label %4367

4365:                                             ; preds = %4362
  %4366 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %4363) #8
  br label %4484

4367:                                             ; preds = %4364
  %4368 = landingpad { ptr, i32 }
          cleanup
  br label %4484

4369:                                             ; preds = %4357
  %4370 = getelementptr inbounds i8, ptr %545, i64 20
  %4371 = load i32, ptr %4370, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %306) #8
  %4372 = load i32, ptr %300, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %306, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4372, i1 noundef zeroext true)
          to label %4373 unwind label %4380

4373:                                             ; preds = %4369
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %307) #8
  %4374 = load i32, ptr %4117, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %307, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4374)
          to label %4375 unwind label %4382

4375:                                             ; preds = %4373
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %308) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %308, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4371, i1 noundef zeroext true)
          to label %4376 unwind label %4384

4376:                                             ; preds = %4375
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %309) #8
  %4377 = load i32, ptr %301, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %309, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4377, i1 noundef zeroext true)
          to label %4378 unwind label %4386

4378:                                             ; preds = %4376
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA23_KcS7_RA3_S8_RS7_SC_S7_SC_S7_SC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %306, ptr noundef nonnull align 1 dereferenceable(23) @.str.1436, ptr noundef nonnull align 8 dereferenceable(32) %307, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %302, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %308, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %309, ptr noundef nonnull align 1 dereferenceable(3) @.str.751)
          to label %4379 unwind label %4388

4379:                                             ; preds = %4378
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %309) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %309) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %308) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %308) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %307) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %307) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %306) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %306) #8
  br label %4413

4380:                                             ; preds = %4369
  %4381 = landingpad { ptr, i32 }
          cleanup
  br label %4393

4382:                                             ; preds = %4373
  %4383 = landingpad { ptr, i32 }
          cleanup
  br label %4392

4384:                                             ; preds = %4375
  %4385 = landingpad { ptr, i32 }
          cleanup
  br label %4391

4386:                                             ; preds = %4376
  %4387 = landingpad { ptr, i32 }
          cleanup
  br label %4390

4388:                                             ; preds = %4378
  %4389 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %309) #8
  br label %4390

4390:                                             ; preds = %4388, %4386
  %.pn2701 = phi { ptr, i32 } [ %4389, %4388 ], [ %4387, %4386 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %309) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %308) #8
  br label %4391

4391:                                             ; preds = %4390, %4384
  %.pn2701.pn = phi { ptr, i32 } [ %.pn2701, %4390 ], [ %4385, %4384 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %308) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %307) #8
  br label %4392

4392:                                             ; preds = %4391, %4382
  %.pn2701.pn.pn = phi { ptr, i32 } [ %.pn2701.pn, %4391 ], [ %4383, %4382 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %307) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %306) #8
  br label %4393

4393:                                             ; preds = %4392, %4380
  %.pn2701.pn.pn.pn = phi { ptr, i32 } [ %.pn2701.pn.pn, %4392 ], [ %4381, %4380 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %306) #8
  br label %4484

4394:                                             ; preds = %4356
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %310) #8
  %4395 = load i32, ptr %300, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %310, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4395, i1 noundef zeroext true)
          to label %4396 unwind label %4402

4396:                                             ; preds = %4394
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %311) #8
  %4397 = load i32, ptr %4117, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %311, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4397)
          to label %4398 unwind label %4404

4398:                                             ; preds = %4396
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %312) #8
  %4399 = load i32, ptr %301, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %312, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4399, i1 noundef zeroext true)
          to label %4400 unwind label %4406

4400:                                             ; preds = %4398
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA23_KcS7_RA3_S8_RS7_SC_S7_SC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %310, ptr noundef nonnull align 1 dereferenceable(23) @.str.1436, ptr noundef nonnull align 8 dereferenceable(32) %311, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %302, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %312, ptr noundef nonnull align 1 dereferenceable(3) @.str.751)
          to label %4401 unwind label %4408

4401:                                             ; preds = %4400
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %312) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %312) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %311) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %311) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %310) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %310) #8
  br label %4413

4402:                                             ; preds = %4394
  %4403 = landingpad { ptr, i32 }
          cleanup
  br label %4412

4404:                                             ; preds = %4396
  %4405 = landingpad { ptr, i32 }
          cleanup
  br label %4411

4406:                                             ; preds = %4398
  %4407 = landingpad { ptr, i32 }
          cleanup
  br label %4410

4408:                                             ; preds = %4400
  %4409 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %312) #8
  br label %4410

4410:                                             ; preds = %4408, %4406
  %.pn2697 = phi { ptr, i32 } [ %4409, %4408 ], [ %4407, %4406 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %312) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %311) #8
  br label %4411

4411:                                             ; preds = %4410, %4404
  %.pn2697.pn = phi { ptr, i32 } [ %.pn2697, %4410 ], [ %4405, %4404 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %311) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %310) #8
  br label %4412

4412:                                             ; preds = %4411, %4402
  %.pn2697.pn.pn = phi { ptr, i32 } [ %.pn2697.pn, %4411 ], [ %4403, %4402 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %310) #8
  br label %4484

4413:                                             ; preds = %4401, %4379
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %313) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %314) #8
  %4414 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %4126)
          to label %4415 unwind label %4424

4415:                                             ; preds = %4413
  %4416 = load ptr, ptr %0, align 8, !tbaa !142
  %4417 = getelementptr inbounds i8, ptr %4416, i64 152
  %4418 = load ptr, ptr %4417, align 8
  invoke void %4418(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %314, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %4414, i32 noundef 0)
          to label %4419 unwind label %4424

4419:                                             ; preds = %4415
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %315) #8
  %4420 = load i32, ptr %300, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %315, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4420, i1 noundef zeroext true)
          to label %4421 unwind label %4426

4421:                                             ; preds = %4419
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %316) #8
  %4422 = load i32, ptr %301, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %316, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4422, i1 noundef zeroext true)
          to label %4423 unwind label %4428

4423:                                             ; preds = %4421
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS6_RA3_S7_S6_S9_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %313, ptr noundef nonnull align 8 dereferenceable(32) %314, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %315, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %316, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %4474 unwind label %4430

4424:                                             ; preds = %4415, %4413
  %4425 = landingpad { ptr, i32 }
          cleanup
  br label %4434

4426:                                             ; preds = %4419
  %4427 = landingpad { ptr, i32 }
          cleanup
  br label %4433

4428:                                             ; preds = %4421
  %4429 = landingpad { ptr, i32 }
          cleanup
  br label %4432

4430:                                             ; preds = %4423
  %4431 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %316) #8
  br label %4432

4432:                                             ; preds = %4430, %4428
  %.pn2706 = phi { ptr, i32 } [ %4431, %4430 ], [ %4429, %4428 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %316) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %315) #8
  br label %4433

4433:                                             ; preds = %4432, %4426
  %.pn2706.pn = phi { ptr, i32 } [ %.pn2706, %4432 ], [ %4427, %4426 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %315) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %314) #8
  br label %4434

4434:                                             ; preds = %4433, %4424
  %.pn2706.pn.pn = phi { ptr, i32 } [ %.pn2706.pn, %4433 ], [ %4425, %4424 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %314) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %313) #8
  br label %4484

4435:                                             ; preds = %4352
  br i1 %4355, label %4436, label %4464

4436:                                             ; preds = %4435
  %4437 = getelementptr inbounds i8, ptr %545, i64 16
  %4438 = load i32, ptr %4437, align 4, !tbaa !125
  %4439 = icmp ne i32 %4438, 64
  %4440 = icmp ne i32 %549, 6
  %or.cond22 = select i1 %4439, i1 true, i1 %4440
  br i1 %or.cond22, label %4441, label %4448

4441:                                             ; preds = %4436
  %4442 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %4442, ptr noundef nonnull @.str.1431)
          to label %4443 unwind label %4444

4443:                                             ; preds = %4441
  invoke void @__cxa_throw(ptr nonnull %4442, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
          to label %6425 unwind label %4446

4444:                                             ; preds = %4441
  %4445 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %4442) #8
  br label %4484

4446:                                             ; preds = %4443
  %4447 = landingpad { ptr, i32 }
          cleanup
  br label %4484

4448:                                             ; preds = %4436
  %4449 = getelementptr inbounds i8, ptr %545, i64 20
  %4450 = load i32, ptr %4449, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %317) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %318) #8
  %4451 = load i32, ptr %4117, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %318, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4451)
          to label %4452 unwind label %4456

4452:                                             ; preds = %4448
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %319) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %319, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4450, i1 noundef zeroext true)
          to label %4453 unwind label %4458

4453:                                             ; preds = %4452
  invoke void @_ZN11spirv_cross4joinIJRA11_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_SB_S9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %317, ptr noundef nonnull align 1 dereferenceable(11) @.str.1437, ptr noundef nonnull align 8 dereferenceable(32) %318, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %302, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %319, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %4454 unwind label %4460

4454:                                             ; preds = %4453
  %4455 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %281, ptr noundef nonnull align 8 dereferenceable(32) %317) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %317) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %319) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %319) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %318) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %318) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %317) #8
  br label %4476

4456:                                             ; preds = %4448
  %4457 = landingpad { ptr, i32 }
          cleanup
  br label %4463

4458:                                             ; preds = %4452
  %4459 = landingpad { ptr, i32 }
          cleanup
  br label %4462

4460:                                             ; preds = %4453
  %4461 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %319) #8
  br label %4462

4462:                                             ; preds = %4460, %4458
  %.pn2692 = phi { ptr, i32 } [ %4461, %4460 ], [ %4459, %4458 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %319) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %318) #8
  br label %4463

4463:                                             ; preds = %4462, %4456
  %.pn2692.pn = phi { ptr, i32 } [ %.pn2692, %4462 ], [ %4457, %4456 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %318) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %317) #8
  br label %4484

4464:                                             ; preds = %4435
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %320) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %321) #8
  %4465 = load i32, ptr %4117, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %321, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4465)
          to label %4466 unwind label %4469

4466:                                             ; preds = %4464
  invoke void @_ZN11spirv_cross4joinIJRA11_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %320, ptr noundef nonnull align 1 dereferenceable(11) @.str.1437, ptr noundef nonnull align 8 dereferenceable(32) %321, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %302, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %4467 unwind label %4471

4467:                                             ; preds = %4466
  %4468 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %281, ptr noundef nonnull align 8 dereferenceable(32) %320) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %320) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %321) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %321) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %320) #8
  br label %4476

4469:                                             ; preds = %4464
  %4470 = landingpad { ptr, i32 }
          cleanup
  br label %4473

4471:                                             ; preds = %4466
  %4472 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %321) #8
  br label %4473

4473:                                             ; preds = %4471, %4469
  %.pn2690 = phi { ptr, i32 } [ %4472, %4471 ], [ %4470, %4469 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %321) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %320) #8
  br label %4484

4474:                                             ; preds = %4423
  %4475 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %281, ptr noundef nonnull align 8 dereferenceable(32) %313) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %313) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %316) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %316) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %315) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %315) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %314) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %314) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %313) #8
  br label %4483

4476:                                             ; preds = %4454, %4467
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %322) #8
  %4477 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %4126)
          to label %4478 unwind label %4481

4478:                                             ; preds = %4476
  invoke void @_ZN11spirv_cross12CompilerGLSL13remap_swizzleERKNS_8SPIRTypeEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %322, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %4477, i32 noundef 4, ptr noundef nonnull align 8 dereferenceable(32) %281)
          to label %4479 unwind label %4481

4479:                                             ; preds = %4478
  %4480 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %281, ptr noundef nonnull align 8 dereferenceable(32) %322) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %322) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %322) #8
  br label %4483

4481:                                             ; preds = %4478, %4476
  %4482 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %322) #8
  br label %4484

4483:                                             ; preds = %4474, %4479
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %303) #8
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %303) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %302) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %302) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %301) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %300) #8
  br label %4488

4484:                                             ; preds = %4444, %4446, %4463, %4365, %4367, %4393, %4481, %4473, %4434, %4412, %4350, %4348
  %.pn2710.pn = phi { ptr, i32 } [ %4482, %4481 ], [ %.pn2706.pn.pn, %4434 ], [ %.pn2697.pn.pn, %4412 ], [ %.pn2690, %4473 ], [ %4351, %4350 ], [ %4349, %4348 ], [ %4368, %4367 ], [ %4366, %4365 ], [ %.pn2701.pn.pn.pn, %4393 ], [ %4447, %4446 ], [ %4445, %4444 ], [ %.pn2692.pn, %4463 ]
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %303) #8
  br label %4485

4485:                                             ; preds = %4484, %4346
  %.pn2710.pn.pn = phi { ptr, i32 } [ %.pn2710.pn, %4484 ], [ %4347, %4346 ]
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %303) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %302) #8
  br label %4486

4486:                                             ; preds = %4485, %4344
  %.pn2710.pn.pn.pn = phi { ptr, i32 } [ %.pn2710.pn.pn, %4485 ], [ %4345, %4344 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %302) #8
  br label %4487

4487:                                             ; preds = %4486, %4317
  %.pn2710.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn2710.pn.pn.pn, %4486 ], [ %4318, %4317 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %301) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %300) #8
  br label %4523

4488:                                             ; preds = %4307, %4483
  %.02361 = phi i1 [ true, %4307 ], [ false, %4483 ]
  br i1 %.not2689, label %4509, label %4489

4489:                                             ; preds = %.thread3146, %4488
  %.023613148 = phi i1 [ true, %.thread3146 ], [ %.02361, %4488 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %323) #8
  %4490 = getelementptr inbounds i8, ptr %0, i64 2400
  %4491 = invoke ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE4findERKj(ptr noundef nonnull align 8 dereferenceable(56) %4490, ptr noundef nonnull align 4 dereferenceable(4) %280)
          to label %4492 unwind label %4505

4492:                                             ; preds = %4489
  store ptr %4491, ptr %323, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %324) #8
  %4493 = call ptr @_ZSt3endISt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(56) %4490)
  store ptr %4493, ptr %324, align 8
  %4494 = call noundef zeroext i1 @_ZNSt8__detaileqERKNS_19_Node_iterator_baseIjLb0EEES3_(ptr noundef nonnull align 8 dereferenceable(8) %323, ptr noundef nonnull align 8 dereferenceable(8) %324) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %324) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %323) #8
  %4495 = load i32, ptr %280, align 4, !tbaa !125
  %4496 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4126, i32 noundef %4495, ptr noundef nonnull align 8 dereferenceable(32) %281, i1 noundef zeroext %4494, i1 noundef zeroext false)
          to label %4497 unwind label %4507

4497:                                             ; preds = %4492
  br i1 %.023613148, label %4511, label %4498

4498:                                             ; preds = %4497
  %4499 = getelementptr inbounds i8, ptr %4119, i64 8
  %4500 = getelementptr inbounds i8, ptr %4496, i64 52
  %4501 = load i32, ptr %4499, align 8, !tbaa !125
  store i32 %4501, ptr %4500, align 4, !tbaa !125
  br i1 %4494, label %4502, label %4511

4502:                                             ; preds = %4498
  %4503 = getelementptr inbounds i8, ptr %4119, i64 96
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %325) #8
  %4504 = load i32, ptr %280, align 4, !tbaa !125
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %325, i32 noundef %4504)
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %4503, ptr noundef nonnull align 4 dereferenceable(4) %325) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %325) #8
  br label %4511

4505:                                             ; preds = %4489
  %4506 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %323) #8
  br label %4523

4507:                                             ; preds = %4492
  %4508 = landingpad { ptr, i32 }
          cleanup
  br label %4523

4509:                                             ; preds = %4488
  %4510 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4126, i32 noundef %4128, ptr noundef nonnull align 8 dereferenceable(32) %281, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %4511 unwind label %4143

4511:                                             ; preds = %4497, %4502, %4498, %4509
  %4512 = load i32, ptr %280, align 4, !tbaa !125
  %4513 = load i32, ptr %4117, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %4512, i32 noundef %4513)
          to label %4514 unwind label %4143

4514:                                             ; preds = %4511
  %4515 = getelementptr inbounds i8, ptr %4130, i64 258
  %4516 = load i8, ptr %4515, align 2, !tbaa !214, !range !123, !noundef !124
  %4517 = trunc nuw i8 %4516 to i1
  br i1 %4517, label %4518, label %4522

4518:                                             ; preds = %4514
  %4519 = load i32, ptr %280, align 4, !tbaa !125
  %4520 = getelementptr inbounds i8, ptr %545, i64 20
  %4521 = load i32, ptr %4520, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %4519, i32 noundef %4521)
          to label %4522 unwind label %4143

4522:                                             ; preds = %4518, %4514
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %281) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %281) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %280) #8
  br label %.thread3374

4523:                                             ; preds = %4505, %4507, %4274, %4276, %4293, %4235, %4237, %4254, %4487, %4309, %4303, %4264, %4217, %4200, %4145, %4143
  %.pn2740 = phi { ptr, i32 } [ %4144, %4143 ], [ %4146, %4145 ], [ %.pn2734.pn.pn, %4200 ], [ %4310, %4309 ], [ %4218, %4217 ], [ %.pn2723, %4264 ], [ %.pn2716, %4303 ], [ %.pn2710.pn.pn.pn.pn, %4487 ], [ %4238, %4237 ], [ %4236, %4235 ], [ %.pn2725.pn, %4254 ], [ %4277, %4276 ], [ %4275, %4274 ], [ %.pn2718.pn, %4293 ], [ %4508, %4507 ], [ %4506, %4505 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %281) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %281) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %280) #8
  br label %6424

4524:                                             ; preds = %566
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %326) #8
  %4525 = load i32, ptr %545, align 4, !tbaa !125
  store i32 %4525, ptr %326, align 4, !tbaa !125
  %4526 = getelementptr inbounds i8, ptr %545, i64 4
  %4527 = load i32, ptr %4526, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %327) #8
  %4528 = getelementptr inbounds i8, ptr %545, i64 12
  %4529 = load i32, ptr %4528, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %327, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4529, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %328) #8
  %4530 = load i32, ptr %4528, align 4, !tbaa !125
  %4531 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %4530)
          to label %4532 unwind label %4559

4532:                                             ; preds = %4524
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %328, ptr noundef nonnull align 8 dereferenceable(336) %4531)
          to label %4533 unwind label %4559

4533:                                             ; preds = %4532
  %4534 = getelementptr inbounds i8, ptr %328, i64 16
  store i32 7, ptr %4534, align 8, !tbaa !145
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %329) #8
  %4535 = load i32, ptr %4528, align 4, !tbaa !125
  %4536 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %4535)
          to label %4537 unwind label %4561

4537:                                             ; preds = %4533
  %4538 = getelementptr inbounds i8, ptr %4536, i64 16
  %4539 = load i32, ptr %4538, align 8, !tbaa !145
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionERKNS_8SPIRTypeENS1_8BaseTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %329, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %328, i32 noundef %4539, ptr noundef nonnull align 8 dereferenceable(32) %327)
          to label %4540 unwind label %4561

4540:                                             ; preds = %4537
  %4541 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %327, ptr noundef nonnull align 8 dereferenceable(32) %329) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %329) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %329) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %330) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %331) #8
  %4542 = getelementptr inbounds i8, ptr %545, i64 8
  %4543 = load i32, ptr %4542, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %331, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4543, i1 noundef zeroext true)
          to label %4544 unwind label %4563

4544:                                             ; preds = %4540
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_KcRS6_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %330, ptr noundef nonnull align 8 dereferenceable(32) %331, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %327)
          to label %4545 unwind label %4565

4545:                                             ; preds = %4544
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %331) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %331) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %332) #8
  store i8 1, ptr %332, align 1, !tbaa !147
  %4546 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross8Compiler3setINS_14SPIRExpressionEJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERjbEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %4527, ptr noundef nonnull align 8 dereferenceable(32) %330, ptr noundef nonnull align 4 dereferenceable(4) %326, ptr noundef nonnull align 1 dereferenceable(1) %332)
          to label %4547 unwind label %4568

4547:                                             ; preds = %4545
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %332) #8
  %4548 = load i32, ptr %4542, align 4, !tbaa !125
  %4549 = invoke noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %4548)
          to label %4550 unwind label %4570

4550:                                             ; preds = %4547
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %333) #8
  %.not2683 = icmp eq ptr %4549, null
  br i1 %.not2683, label %4553, label %4551

4551:                                             ; preds = %4550
  %4552 = getelementptr inbounds i8, ptr %4549, i64 8
  br label %4554

4553:                                             ; preds = %4550
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %333, i32 noundef 0)
  br label %4554

4554:                                             ; preds = %4553, %4551
  %.in = phi ptr [ %333, %4553 ], [ %4552, %4551 ]
  %4555 = load i32, ptr %.in, align 4, !tbaa !125
  %4556 = getelementptr inbounds i8, ptr %4546, i64 52
  store i32 %4555, ptr %4556, align 4, !tbaa !125
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %333) #8
  %4557 = load i32, ptr %4528, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %4527, i32 noundef %4557)
          to label %4558 unwind label %4570

4558:                                             ; preds = %4554
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %330) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %330) #8
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %328) #8
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %328) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %327) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %327) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %326) #8
  br label %.thread3374

4559:                                             ; preds = %4532, %4524
  %4560 = landingpad { ptr, i32 }
          cleanup
  br label %4575

4561:                                             ; preds = %4537, %4533
  %4562 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %329) #8
  br label %4574

4563:                                             ; preds = %4540
  %4564 = landingpad { ptr, i32 }
          cleanup
  br label %4567

4565:                                             ; preds = %4544
  %4566 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %331) #8
  br label %4567

4567:                                             ; preds = %4565, %4563
  %.pn2681 = phi { ptr, i32 } [ %4566, %4565 ], [ %4564, %4563 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %331) #8
  br label %4573

4568:                                             ; preds = %4545
  %4569 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %332) #8
  br label %4572

4570:                                             ; preds = %4554, %4547
  %4571 = landingpad { ptr, i32 }
          cleanup
  br label %4572

4572:                                             ; preds = %4570, %4568
  %.pn2684 = phi { ptr, i32 } [ %4571, %4570 ], [ %4569, %4568 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %330) #8
  br label %4573

4573:                                             ; preds = %4572, %4567
  %.pn2684.pn = phi { ptr, i32 } [ %.pn2684, %4572 ], [ %.pn2681, %4567 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %330) #8
  br label %4574

4574:                                             ; preds = %4573, %4561
  %.pn2684.pn.pn = phi { ptr, i32 } [ %.pn2684.pn, %4573 ], [ %4562, %4561 ]
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %328) #8
  br label %4575

4575:                                             ; preds = %4574, %4559
  %.pn2684.pn.pn.pn = phi { ptr, i32 } [ %.pn2684.pn.pn, %4574 ], [ %4560, %4559 ]
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %328) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %327) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %327) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %326) #8
  br label %6424

4576:                                             ; preds = %566
  %4577 = load i32, ptr %545, align 4, !tbaa !125
  %4578 = tail call noundef ptr @_ZN11spirv_cross8Compiler26maybe_get_backing_variableEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %4577)
  %.not2666 = icmp eq ptr %4578, null
  br i1 %.not2666, label %4583, label %4579

4579:                                             ; preds = %4576
  %4580 = getelementptr inbounds i8, ptr %4578, i64 8
  %.sroa.0181.0.copyload = load i32, ptr %4580, align 8, !tbaa !125
  %4581 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.0181.0.copyload, i32 noundef 24)
  br i1 %4581, label %4582, label %4583

4582:                                             ; preds = %4579
  %.sroa.0180.0.copyload = load i32, ptr %4580, align 8, !tbaa !125
  tail call void @_ZN11spirv_cross8Compiler16unset_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %.sroa.0180.0.copyload, i32 noundef 24)
  tail call void @_ZN11spirv_cross8Compiler15force_recompileEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
  br label %4583

4583:                                             ; preds = %4579, %4582, %4576
  %4584 = load i32, ptr %545, align 4, !tbaa !125
  %4585 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %4584)
  %4586 = getelementptr inbounds i8, ptr %545, i64 8
  %4587 = load i32, ptr %4586, align 4, !tbaa !125
  %4588 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %4587)
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %334) #8
  call void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %334, ptr noundef nonnull align 8 dereferenceable(336) %4588)
  %4589 = getelementptr inbounds i8, ptr %334, i64 24
  store i32 4, ptr %4589, align 8, !tbaa !126
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %335) #8
  %4590 = getelementptr inbounds i8, ptr %545, i64 4
  %4591 = load i32, ptr %4590, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %335, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4591, i1 noundef zeroext true)
          to label %4592 unwind label %4615

4592:                                             ; preds = %4583
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %336) #8
  %4593 = load i32, ptr %4590, align 4, !tbaa !125
  %4594 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %4593)
          to label %4595 unwind label %4617

4595:                                             ; preds = %4592
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %336, ptr noundef nonnull align 8 dereferenceable(336) %4594)
          to label %4596 unwind label %4617

4596:                                             ; preds = %4595
  %4597 = getelementptr inbounds i8, ptr %336, i64 16
  store i32 7, ptr %4597, align 8, !tbaa !145
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %337) #8
  %4598 = load i32, ptr %4590, align 4, !tbaa !125
  %4599 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %4598)
          to label %4600 unwind label %4619

4600:                                             ; preds = %4596
  %4601 = getelementptr inbounds i8, ptr %4599, i64 16
  %4602 = load i32, ptr %4601, align 8, !tbaa !145
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionERKNS_8SPIRTypeENS1_8BaseTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %337, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %336, i32 noundef %4602, ptr noundef nonnull align 8 dereferenceable(32) %335)
          to label %4603 unwind label %4619

4603:                                             ; preds = %4600
  %4604 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %335, ptr noundef nonnull align 8 dereferenceable(32) %337) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %337) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %337) #8
  %4605 = getelementptr inbounds i8, ptr %4585, i64 252
  %4606 = load i32, ptr %4605, align 4, !tbaa !213
  %4607 = icmp eq i32 %4606, 0
  br i1 %4607, label %4608, label %4623

4608:                                             ; preds = %4603
  %4609 = getelementptr inbounds i8, ptr %0, i64 7640
  %4610 = load i8, ptr %4609, align 8, !tbaa !207, !range !123, !noundef !124
  %4611 = trunc nuw i8 %4610 to i1
  br i1 %4611, label %4612, label %4623

4612:                                             ; preds = %4608
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %338) #8
  invoke void @_ZN11spirv_cross4joinIJRA7_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA5_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %338, ptr noundef nonnull align 1 dereferenceable(7) @.str.1095, ptr noundef nonnull align 8 dereferenceable(32) %335, ptr noundef nonnull align 1 dereferenceable(5) @.str.1096)
          to label %4613 unwind label %4621

4613:                                             ; preds = %4612
  %4614 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %335, ptr noundef nonnull align 8 dereferenceable(32) %338) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %338) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %338) #8
  br label %4623

4615:                                             ; preds = %4583
  %4616 = landingpad { ptr, i32 }
          cleanup
  br label %4695

4617:                                             ; preds = %4595, %4592
  %4618 = landingpad { ptr, i32 }
          cleanup
  br label %4694

4619:                                             ; preds = %4600, %4596
  %4620 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %337) #8
  br label %4693

4621:                                             ; preds = %4612
  %4622 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %338) #8
  br label %4693

4623:                                             ; preds = %4613, %4608, %4603
  %4624 = getelementptr inbounds i8, ptr %4585, i64 258
  %4625 = load i8, ptr %4624, align 2, !tbaa !214, !range !123, !noundef !124
  %4626 = trunc nuw i8 %4625 to i1
  br i1 %4626, label %4627, label %4665

4627:                                             ; preds = %4623
  %4628 = getelementptr inbounds i8, ptr %545, i64 12
  %4629 = load i32, ptr %4628, align 4, !tbaa !125
  %4630 = icmp ne i32 %4629, 64
  %4631 = icmp ne i32 %549, 5
  %or.cond24 = select i1 %4630, i1 true, i1 %4631
  br i1 %or.cond24, label %4632, label %4639

4632:                                             ; preds = %4627
  %4633 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %4633, ptr noundef nonnull @.str.1438)
          to label %4634 unwind label %4635

4634:                                             ; preds = %4632
  invoke void @__cxa_throw(ptr nonnull %4633, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
          to label %6425 unwind label %4637

4635:                                             ; preds = %4632
  %4636 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %4633) #8
  br label %4693

4637:                                             ; preds = %4634
  %4638 = landingpad { ptr, i32 }
          cleanup
  br label %4693

4639:                                             ; preds = %4627
  %4640 = getelementptr inbounds i8, ptr %545, i64 16
  %4641 = load i32, ptr %4640, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %339) #8
  %4642 = load i32, ptr %545, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %339, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4642)
          to label %4643 unwind label %4651

4643:                                             ; preds = %4639
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %340) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %340, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4641, i1 noundef zeroext true)
          to label %4644 unwind label %4653

4644:                                             ; preds = %4643
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %341) #8
  %4645 = getelementptr inbounds i8, ptr %4588, i64 24
  %4646 = load i32, ptr %4645, align 8, !tbaa !126
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %342) #8
  %4647 = load i32, ptr %4586, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %342, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4647, i1 noundef zeroext true)
          to label %4648 unwind label %4655

4648:                                             ; preds = %4644
  invoke void @_ZN11spirv_cross12CompilerGLSL13remap_swizzleERKNS_8SPIRTypeEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %341, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %334, i32 noundef %4646, ptr noundef nonnull align 8 dereferenceable(32) %342)
          to label %4649 unwind label %4657

4649:                                             ; preds = %4648
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA12_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_RSA_SC_SA_SC_SA_SC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(12) @.str.1439, ptr noundef nonnull align 8 dereferenceable(32) %339, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %335, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %340, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %341, ptr noundef nonnull align 1 dereferenceable(3) @.str.751)
          to label %4650 unwind label %4659

4650:                                             ; preds = %4649
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %341) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %342) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %342) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %341) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %340) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %340) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %339) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %339) #8
  br label %4685

4651:                                             ; preds = %4639
  %4652 = landingpad { ptr, i32 }
          cleanup
  br label %4664

4653:                                             ; preds = %4643
  %4654 = landingpad { ptr, i32 }
          cleanup
  br label %4663

4655:                                             ; preds = %4644
  %4656 = landingpad { ptr, i32 }
          cleanup
  br label %4662

4657:                                             ; preds = %4648
  %4658 = landingpad { ptr, i32 }
          cleanup
  br label %4661

4659:                                             ; preds = %4649
  %4660 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %341) #8
  br label %4661

4661:                                             ; preds = %4659, %4657
  %.pn2671 = phi { ptr, i32 } [ %4660, %4659 ], [ %4658, %4657 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %342) #8
  br label %4662

4662:                                             ; preds = %4661, %4655
  %.pn2671.pn = phi { ptr, i32 } [ %.pn2671, %4661 ], [ %4656, %4655 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %342) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %341) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %340) #8
  br label %4663

4663:                                             ; preds = %4662, %4653
  %.pn2671.pn.pn = phi { ptr, i32 } [ %.pn2671.pn, %4662 ], [ %4654, %4653 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %340) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %339) #8
  br label %4664

4664:                                             ; preds = %4663, %4651
  %.pn2671.pn.pn.pn = phi { ptr, i32 } [ %.pn2671.pn.pn, %4663 ], [ %4652, %4651 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %339) #8
  br label %4693

4665:                                             ; preds = %4623
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %343) #8
  %4666 = load i32, ptr %545, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %343, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4666)
          to label %4667 unwind label %4674

4667:                                             ; preds = %4665
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %344) #8
  %4668 = getelementptr inbounds i8, ptr %4588, i64 24
  %4669 = load i32, ptr %4668, align 8, !tbaa !126
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %345) #8
  %4670 = load i32, ptr %4586, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %345, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4670, i1 noundef zeroext true)
          to label %4671 unwind label %4676

4671:                                             ; preds = %4667
  invoke void @_ZN11spirv_cross12CompilerGLSL13remap_swizzleERKNS_8SPIRTypeEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %344, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %334, i32 noundef %4669, ptr noundef nonnull align 8 dereferenceable(32) %345)
          to label %4672 unwind label %4678

4672:                                             ; preds = %4671
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA12_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_RSA_SC_SA_SC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(12) @.str.1439, ptr noundef nonnull align 8 dereferenceable(32) %343, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %335, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %344, ptr noundef nonnull align 1 dereferenceable(3) @.str.751)
          to label %4673 unwind label %4680

4673:                                             ; preds = %4672
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %344) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %345) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %345) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %344) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %343) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %343) #8
  br label %4685

4674:                                             ; preds = %4665
  %4675 = landingpad { ptr, i32 }
          cleanup
  br label %4684

4676:                                             ; preds = %4667
  %4677 = landingpad { ptr, i32 }
          cleanup
  br label %4683

4678:                                             ; preds = %4671
  %4679 = landingpad { ptr, i32 }
          cleanup
  br label %4682

4680:                                             ; preds = %4672
  %4681 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %344) #8
  br label %4682

4682:                                             ; preds = %4680, %4678
  %.pn2667 = phi { ptr, i32 } [ %4681, %4680 ], [ %4679, %4678 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %345) #8
  br label %4683

4683:                                             ; preds = %4682, %4676
  %.pn2667.pn = phi { ptr, i32 } [ %.pn2667, %4682 ], [ %4677, %4676 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %345) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %344) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %343) #8
  br label %4684

4684:                                             ; preds = %4683, %4674
  %.pn2667.pn.pn = phi { ptr, i32 } [ %.pn2667.pn, %4683 ], [ %4675, %4674 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %343) #8
  br label %4693

4685:                                             ; preds = %4673, %4650
  br i1 %.not2666, label %4692, label %4686

4686:                                             ; preds = %4685
  %4687 = 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) %4578)
          to label %4688 unwind label %4690

4688:                                             ; preds = %4686
  br i1 %4687, label %4689, label %4692

4689:                                             ; preds = %4688
  invoke void @_ZN11spirv_cross8Compiler27flush_all_aliased_variablesEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
          to label %4692 unwind label %4690

4690:                                             ; preds = %4689, %4686
  %4691 = landingpad { ptr, i32 }
          cleanup
  br label %4693

4692:                                             ; preds = %4689, %4688, %4685
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %336) #8
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %336) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %335) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %335) #8
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %334) #8
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %334) #8
  br label %.thread3374

4693:                                             ; preds = %4635, %4637, %4664, %4690, %4684, %4621, %4619
  %.pn2676.pn = phi { ptr, i32 } [ %4691, %4690 ], [ %.pn2667.pn.pn, %4684 ], [ %4622, %4621 ], [ %4620, %4619 ], [ %4638, %4637 ], [ %4636, %4635 ], [ %.pn2671.pn.pn.pn, %4664 ]
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %336) #8
  br label %4694

4694:                                             ; preds = %4693, %4617
  %.pn2676.pn.pn = phi { ptr, i32 } [ %.pn2676.pn, %4693 ], [ %4618, %4617 ]
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %336) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %335) #8
  br label %4695

4695:                                             ; preds = %4694, %4615
  %.pn2676.pn.pn.pn = phi { ptr, i32 } [ %.pn2676.pn.pn, %4694 ], [ %4616, %4615 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %335) #8
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %334) #8
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %334) #8
  br label %6424

4696:                                             ; preds = %566
  %4697 = getelementptr inbounds i8, ptr %545, i64 8
  %4698 = load i32, ptr %4697, align 4, !tbaa !125
  %4699 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %4698)
  %4700 = load i32, ptr %545, align 4, !tbaa !125
  %4701 = getelementptr inbounds i8, ptr %545, i64 4
  %4702 = load i32, ptr %4701, align 4, !tbaa !125
  %4703 = getelementptr inbounds i8, ptr %4699, i64 16
  %4704 = load i32, ptr %4703, align 8, !tbaa !145
  %4705 = icmp eq i32 %4704, 16
  br i1 %4705, label %4706, label %4786

4706:                                             ; preds = %4696
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %346) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %346) #8
  %4707 = getelementptr inbounds i8, ptr %4699, i64 260
  %4708 = load i32, ptr %4707, align 4, !tbaa !212
  %4709 = icmp eq i32 %4708, 2
  br i1 %4709, label %4710, label %4744

4710:                                             ; preds = %4706
  %4711 = getelementptr inbounds i8, ptr %0, i64 7636
  %4712 = getelementptr inbounds i8, ptr %0, i64 7640
  %4713 = load i8, ptr %4712, align 8, !tbaa !207, !range !123, !noundef !124
  %4714 = trunc nuw i8 %4713 to i1
  %4715 = load i32, ptr %4711, align 4
  %4716 = icmp ugt i32 %4715, 429
  %or.cond3110.not = select i1 %4714, i1 true, i1 %4716
  br i1 %or.cond3110.not, label %4725, label %4717

4717:                                             ; preds = %4710
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %347) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %348) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %348) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %347, ptr noundef nonnull @.str.1440, ptr noundef nonnull align 1 dereferenceable(1) %348)
          to label %4718 unwind label %4720

4718:                                             ; preds = %4717
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %347)
          to label %4719 unwind label %4722

4719:                                             ; preds = %4718
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %347) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %348) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %348) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %347) #8
  br label %4734

4720:                                             ; preds = %4717
  %4721 = landingpad { ptr, i32 }
          cleanup
  br label %4724

4722:                                             ; preds = %4718
  %4723 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %347) #8
  br label %4724

4724:                                             ; preds = %4722, %4720
  %.pn2657 = phi { ptr, i32 } [ %4723, %4722 ], [ %4721, %4720 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %348) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %348) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %347) #8
  br label %4785

4725:                                             ; preds = %4710
  %4726 = icmp ult i32 %4715, 310
  %or.cond3112 = select i1 %4714, i1 %4726, i1 false
  br i1 %or.cond3112, label %4727, label %4734

4727:                                             ; preds = %4725
  %4728 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %4728, ptr noundef nonnull @.str.1441)
          to label %4729 unwind label %4730

4729:                                             ; preds = %4727
  invoke void @__cxa_throw(ptr nonnull %4728, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
          to label %6425 unwind label %4732

4730:                                             ; preds = %4727
  %4731 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %4728) #8
  br label %4785

4732:                                             ; preds = %4729
  %4733 = landingpad { ptr, i32 }
          cleanup
  br label %4785

4734:                                             ; preds = %4725, %4719
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %349) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %350) #8
  %4735 = load i32, ptr %4697, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %350, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4735)
          to label %4736 unwind label %4739

4736:                                             ; preds = %4734
  invoke void @_ZN11spirv_cross4joinIJRA11_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %349, ptr noundef nonnull align 1 dereferenceable(11) @.str.1442, ptr noundef nonnull align 8 dereferenceable(32) %350, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %4737 unwind label %4741

4737:                                             ; preds = %4736
  %4738 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %346, ptr noundef nonnull align 8 dereferenceable(32) %349) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %349) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %350) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %350) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %349) #8
  br label %4773

4739:                                             ; preds = %4734
  %4740 = landingpad { ptr, i32 }
          cleanup
  br label %4743

4741:                                             ; preds = %4736
  %4742 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %350) #8
  br label %4743

4743:                                             ; preds = %4741, %4739
  %.pn2659 = phi { ptr, i32 } [ %4742, %4741 ], [ %4740, %4739 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %350) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %349) #8
  br label %4785

4744:                                             ; preds = %4706
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %351) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %352) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %352) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %351, ptr noundef nonnull @.str.492, ptr noundef nonnull align 1 dereferenceable(1) %352)
          to label %4745 unwind label %4755

4745:                                             ; preds = %4744
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %352) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %352) #8
  %4746 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
  br i1 %4746, label %4747, label %4761

4747:                                             ; preds = %4745
  %4748 = getelementptr inbounds i8, ptr %4699, i64 8
  %4749 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %4748)
  %4750 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %4749)
          to label %4751 unwind label %4757

4751:                                             ; preds = %4747
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %353) #8
  %4752 = load i32, ptr %4697, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13legacy_tex_opERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_8SPIRTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %353, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %351, ptr noundef nonnull align 8 dereferenceable(336) %4750, i32 noundef %4752)
          to label %4753 unwind label %4759

4753:                                             ; preds = %4751
  %4754 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %351, ptr noundef nonnull align 8 dereferenceable(32) %353) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %353) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %353) #8
  br label %4761

4755:                                             ; preds = %4744
  %4756 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %352) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %352) #8
  br label %4772

4757:                                             ; preds = %4747
  %4758 = landingpad { ptr, i32 }
          cleanup
  br label %4771

4759:                                             ; preds = %4751
  %4760 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %353) #8
  br label %4771

4761:                                             ; preds = %4753, %4745
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %354) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %355) #8
  %4762 = load i32, ptr %4697, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL36convert_separate_image_to_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %355, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4762)
          to label %4763 unwind label %4766

4763:                                             ; preds = %4761
  invoke void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS6_SA_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %354, ptr noundef nonnull align 8 dereferenceable(32) %351, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %355, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %4764 unwind label %4768

4764:                                             ; preds = %4763
  %4765 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %346, ptr noundef nonnull align 8 dereferenceable(32) %354) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %354) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %355) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %355) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %354) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %351) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %351) #8
  br label %4773

4766:                                             ; preds = %4761
  %4767 = landingpad { ptr, i32 }
          cleanup
  br label %4770

4768:                                             ; preds = %4763
  %4769 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %355) #8
  br label %4770

4770:                                             ; preds = %4768, %4766
  %.pn2653 = phi { ptr, i32 } [ %4769, %4768 ], [ %4767, %4766 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %355) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %354) #8
  br label %4771

4771:                                             ; preds = %4757, %4759, %4770
  %.pn2653.pn = phi { ptr, i32 } [ %.pn2653, %4770 ], [ %4760, %4759 ], [ %4758, %4757 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %351) #8
  br label %4772

4772:                                             ; preds = %4771, %4755
  %.pn2653.pn.pn = phi { ptr, i32 } [ %.pn2653.pn, %4771 ], [ %4756, %4755 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %351) #8
  br label %4785

4773:                                             ; preds = %4764, %4737
  %4774 = load i32, ptr %545, align 4, !tbaa !125
  %4775 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %4774)
          to label %4776 unwind label %4781

4776:                                             ; preds = %4773
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %356) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL18bitcast_expressionERKNS_8SPIRTypeENS1_8BaseTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %356, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %4775, i32 noundef 7, ptr noundef nonnull align 8 dereferenceable(32) %346)
          to label %4777 unwind label %4783

4777:                                             ; preds = %4776
  %4778 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %346, ptr noundef nonnull align 8 dereferenceable(32) %356) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %356) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %356) #8
  %4779 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4700, i32 noundef %4702, ptr noundef nonnull align 8 dereferenceable(32) %346, i1 noundef zeroext true, i1 noundef zeroext false)
          to label %4780 unwind label %4781

4780:                                             ; preds = %4777
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %346) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %346) #8
  br label %.thread3374

4781:                                             ; preds = %4777, %4773
  %4782 = landingpad { ptr, i32 }
          cleanup
  br label %4785

4783:                                             ; preds = %4776
  %4784 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %356) #8
  br label %4785

4785:                                             ; preds = %4781, %4783, %4772, %4743, %4732, %4730, %4724
  %.pn2663 = phi { ptr, i32 } [ %4733, %4732 ], [ %4731, %4730 ], [ %.pn2659, %4743 ], [ %.pn2657, %4724 ], [ %.pn2653.pn.pn, %4772 ], [ %4782, %4781 ], [ %4784, %4783 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %346) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %346) #8
  br label %6424

4786:                                             ; preds = %4696
  %4787 = tail call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %4787, ptr noundef nonnull @.str.1443)
          to label %4788 unwind label %4789

4788:                                             ; preds = %4786
  tail call void @__cxa_throw(ptr nonnull %4787, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
  unreachable

4789:                                             ; preds = %4786
  %4790 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %4787) #8
  br label %6424

4791:                                             ; preds = %566, %566, %566, %566
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %357) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %358) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %358) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %357, ptr noundef nonnull @.str.1444, ptr noundef nonnull align 1 dereferenceable(1) %358)
          to label %4792 unwind label %4798

4792:                                             ; preds = %4791
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %357)
          to label %switch.lookup unwind label %4800

switch.lookup:                                    ; preds = %4792
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %357) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %358) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %358) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %357) #8
  %4793 = load i32, ptr %545, align 4, !tbaa !125
  %4794 = getelementptr inbounds i8, ptr %545, i64 4
  %4795 = load i32, ptr %4794, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %359) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %359) #8
  %switch.tableidx = add nsw i32 %568, -4480
  %4796 = sext i32 %switch.tableidx to i64
  %switch.gep = getelementptr inbounds [4 x ptr], ptr @switch.table._ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE, i64 0, i64 %4796
  %switch.load = load ptr, ptr %switch.gep, align 8
  %4797 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %359, ptr noundef nonnull %switch.load)
          to label %4805 unwind label %4803

4798:                                             ; preds = %4791
  %4799 = landingpad { ptr, i32 }
          cleanup
  br label %4802

4800:                                             ; preds = %4792
  %4801 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %357) #8
  br label %4802

4802:                                             ; preds = %4800, %4798
  %.pn2625 = phi { ptr, i32 } [ %4801, %4800 ], [ %4799, %4798 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %358) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %358) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %357) #8
  br label %6424

4803:                                             ; preds = %switch.lookup, %4805
  %4804 = landingpad { ptr, i32 }
          cleanup
  br label %4919

4805:                                             ; preds = %switch.lookup
  %4806 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %359, ptr noundef nonnull @.str.718)
          to label %4807 unwind label %4803

4807:                                             ; preds = %4805
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %360) #8
  %4808 = getelementptr inbounds i8, ptr %545, i64 8
  %4809 = load i32, ptr %4808, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %360, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4809, i1 noundef zeroext true)
          to label %4810 unwind label %4819

4810:                                             ; preds = %4807
  %4811 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %359, ptr noundef nonnull align 8 dereferenceable(32) %360)
          to label %4812 unwind label %4821

4812:                                             ; preds = %4810
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %360) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %360) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %361) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %362) #8
  %4813 = getelementptr inbounds i8, ptr %545, i64 12
  %4814 = load i32, ptr %4813, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %362, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4814, i1 noundef zeroext true)
          to label %4815 unwind label %4824

4815:                                             ; preds = %4812
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %361, ptr noundef nonnull @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %362)
          to label %4816 unwind label %4826

4816:                                             ; preds = %4815
  %4817 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %359, ptr noundef nonnull align 8 dereferenceable(32) %361)
          to label %4818 unwind label %4828

4818:                                             ; preds = %4816
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %361) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %362) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %362) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %361) #8
  switch i32 %568, label %default.unreachable3210 [
    i32 4480, label %4832
    i32 4481, label %4847
    i32 4482, label %4862
    i32 4483, label %4862
  ]

4819:                                             ; preds = %4807
  %4820 = landingpad { ptr, i32 }
          cleanup
  br label %4823

4821:                                             ; preds = %4810
  %4822 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %360) #8
  br label %4823

4823:                                             ; preds = %4821, %4819
  %.pn2627 = phi { ptr, i32 } [ %4822, %4821 ], [ %4820, %4819 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %360) #8
  br label %4919

4824:                                             ; preds = %4812
  %4825 = landingpad { ptr, i32 }
          cleanup
  br label %4831

4826:                                             ; preds = %4815
  %4827 = landingpad { ptr, i32 }
          cleanup
  br label %4830

4828:                                             ; preds = %4816
  %4829 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %361) #8
  br label %4830

4830:                                             ; preds = %4828, %4826
  %.pn2629 = phi { ptr, i32 } [ %4829, %4828 ], [ %4827, %4826 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %362) #8
  br label %4831

4831:                                             ; preds = %4830, %4824
  %.pn2629.pn = phi { ptr, i32 } [ %.pn2629, %4830 ], [ %4825, %4824 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %362) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %361) #8
  br label %4919

4832:                                             ; preds = %4818
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %363) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %364) #8
  %4833 = getelementptr inbounds i8, ptr %545, i64 16
  %4834 = load i32, ptr %4833, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %364, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4834)
          to label %4835 unwind label %4839

4835:                                             ; preds = %4832
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %363, ptr noundef nonnull @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %364)
          to label %4836 unwind label %4841

4836:                                             ; preds = %4835
  %4837 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %359, ptr noundef nonnull align 8 dereferenceable(32) %363)
          to label %4838 unwind label %4843

4838:                                             ; preds = %4836
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %363) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %364) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %364) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %363) #8
  br label %4907

4839:                                             ; preds = %4832
  %4840 = landingpad { ptr, i32 }
          cleanup
  br label %4846

4841:                                             ; preds = %4835
  %4842 = landingpad { ptr, i32 }
          cleanup
  br label %4845

4843:                                             ; preds = %4836
  %4844 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %363) #8
  br label %4845

4845:                                             ; preds = %4843, %4841
  %.pn2644 = phi { ptr, i32 } [ %4844, %4843 ], [ %4842, %4841 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %364) #8
  br label %4846

4846:                                             ; preds = %4845, %4839
  %.pn2644.pn = phi { ptr, i32 } [ %.pn2644, %4845 ], [ %4840, %4839 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %364) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %363) #8
  br label %4919

4847:                                             ; preds = %4818
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %365) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %366) #8
  %4848 = getelementptr inbounds i8, ptr %545, i64 16
  %4849 = load i32, ptr %4848, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %366, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4849, i1 noundef zeroext true)
          to label %4850 unwind label %4854

4850:                                             ; preds = %4847
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %365, ptr noundef nonnull @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %366)
          to label %4851 unwind label %4856

4851:                                             ; preds = %4850
  %4852 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %359, ptr noundef nonnull align 8 dereferenceable(32) %365)
          to label %4853 unwind label %4858

4853:                                             ; preds = %4851
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %365) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %366) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %366) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %365) #8
  br label %4907

4854:                                             ; preds = %4847
  %4855 = landingpad { ptr, i32 }
          cleanup
  br label %4861

4856:                                             ; preds = %4850
  %4857 = landingpad { ptr, i32 }
          cleanup
  br label %4860

4858:                                             ; preds = %4851
  %4859 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %365) #8
  br label %4860

4860:                                             ; preds = %4858, %4856
  %.pn2641 = phi { ptr, i32 } [ %4859, %4858 ], [ %4857, %4856 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %366) #8
  br label %4861

4861:                                             ; preds = %4860, %4854
  %.pn2641.pn = phi { ptr, i32 } [ %.pn2641, %4860 ], [ %4855, %4854 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %366) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %365) #8
  br label %4919

4862:                                             ; preds = %4818, %4818
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %367) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %368) #8
  %4863 = getelementptr inbounds i8, ptr %545, i64 16
  %4864 = load i32, ptr %4863, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %368, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4864)
          to label %4865 unwind label %4881

4865:                                             ; preds = %4862
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %367, ptr noundef nonnull @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %368)
          to label %4866 unwind label %4883

4866:                                             ; preds = %4865
  %4867 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %359, ptr noundef nonnull align 8 dereferenceable(32) %367)
          to label %4868 unwind label %4885

4868:                                             ; preds = %4866
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %367) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %368) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %368) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %367) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %369) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %370) #8
  %4869 = getelementptr inbounds i8, ptr %545, i64 20
  %4870 = load i32, ptr %4869, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %370, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4870, i1 noundef zeroext true)
          to label %4871 unwind label %4889

4871:                                             ; preds = %4868
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %369, ptr noundef nonnull @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %370)
          to label %4872 unwind label %4891

4872:                                             ; preds = %4871
  %4873 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %359, ptr noundef nonnull align 8 dereferenceable(32) %369)
          to label %4874 unwind label %4893

4874:                                             ; preds = %4872
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %369) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %370) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %370) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %369) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %371) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %372) #8
  %4875 = getelementptr inbounds i8, ptr %545, i64 24
  %4876 = load i32, ptr %4875, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %372, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4876, i1 noundef zeroext true)
          to label %4877 unwind label %4897

4877:                                             ; preds = %4874
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %371, ptr noundef nonnull @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %372)
          to label %4878 unwind label %4899

4878:                                             ; preds = %4877
  %4879 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %359, ptr noundef nonnull align 8 dereferenceable(32) %371)
          to label %4880 unwind label %4901

4880:                                             ; preds = %4878
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %371) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %372) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %372) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %371) #8
  br label %4907

4881:                                             ; preds = %4862
  %4882 = landingpad { ptr, i32 }
          cleanup
  br label %4888

4883:                                             ; preds = %4865
  %4884 = landingpad { ptr, i32 }
          cleanup
  br label %4887

4885:                                             ; preds = %4866
  %4886 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %367) #8
  br label %4887

4887:                                             ; preds = %4885, %4883
  %.pn2632 = phi { ptr, i32 } [ %4886, %4885 ], [ %4884, %4883 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %368) #8
  br label %4888

4888:                                             ; preds = %4887, %4881
  %.pn2632.pn = phi { ptr, i32 } [ %.pn2632, %4887 ], [ %4882, %4881 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %368) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %367) #8
  br label %4919

4889:                                             ; preds = %4868
  %4890 = landingpad { ptr, i32 }
          cleanup
  br label %4896

4891:                                             ; preds = %4871
  %4892 = landingpad { ptr, i32 }
          cleanup
  br label %4895

4893:                                             ; preds = %4872
  %4894 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %369) #8
  br label %4895

4895:                                             ; preds = %4893, %4891
  %.pn2635 = phi { ptr, i32 } [ %4894, %4893 ], [ %4892, %4891 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %370) #8
  br label %4896

4896:                                             ; preds = %4895, %4889
  %.pn2635.pn = phi { ptr, i32 } [ %.pn2635, %4895 ], [ %4890, %4889 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %370) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %369) #8
  br label %4919

4897:                                             ; preds = %4874
  %4898 = landingpad { ptr, i32 }
          cleanup
  br label %4904

4899:                                             ; preds = %4877
  %4900 = landingpad { ptr, i32 }
          cleanup
  br label %4903

4901:                                             ; preds = %4878
  %4902 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %371) #8
  br label %4903

4903:                                             ; preds = %4901, %4899
  %.pn2638 = phi { ptr, i32 } [ %4902, %4901 ], [ %4900, %4899 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %372) #8
  br label %4904

4904:                                             ; preds = %4903, %4897
  %.pn2638.pn = phi { ptr, i32 } [ %.pn2638, %4903 ], [ %4898, %4897 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %372) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %371) #8
  br label %4919

default.unreachable3210:                          ; preds = %4818
  unreachable

4905:                                             ; preds = %4915, %4911, %4909, %4907
  %4906 = landingpad { ptr, i32 }
          cleanup
  br label %4919

4907:                                             ; preds = %4880, %4853, %4838
  %4908 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %359, ptr noundef nonnull @.str.135)
          to label %4909 unwind label %4905

4909:                                             ; preds = %4907
  %4910 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4793, i32 noundef %4795, ptr noundef nonnull align 8 dereferenceable(32) %359, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %4911 unwind label %4905

4911:                                             ; preds = %4909
  %4912 = load i32, ptr %4813, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %4795, i32 noundef %4912)
          to label %4913 unwind label %4905

4913:                                             ; preds = %4911
  %4914 = and i32 %568, -2
  %or.cond26 = icmp eq i32 %4914, 4482
  br i1 %or.cond26, label %4915, label %4918

4915:                                             ; preds = %4913
  %4916 = getelementptr inbounds i8, ptr %545, i64 20
  %4917 = load i32, ptr %4916, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %4795, i32 noundef %4917)
          to label %4918 unwind label %4905

4918:                                             ; preds = %4915, %4913
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %359) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %359) #8
  br label %.thread3374

4919:                                             ; preds = %4823, %4831, %4846, %4861, %4888, %4896, %4904, %4905, %4803
  %.pn2649 = phi { ptr, i32 } [ %4804, %4803 ], [ %4906, %4905 ], [ %.pn2638.pn, %4904 ], [ %.pn2635.pn, %4896 ], [ %.pn2632.pn, %4888 ], [ %.pn2641.pn, %4861 ], [ %.pn2644.pn, %4846 ], [ %.pn2629.pn, %4831 ], [ %.pn2627, %4823 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %359) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %359) #8
  br label %6424

4920:                                             ; preds = %566, %566, %566, %566
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %373) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %374) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %374) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %373, ptr noundef nonnull @.str.1450, ptr noundef nonnull align 1 dereferenceable(1) %374)
          to label %4921 unwind label %4927

4921:                                             ; preds = %4920
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %373)
          to label %switch.lookup3409 unwind label %4929

switch.lookup3409:                                ; preds = %4921
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %373) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %374) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %374) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %373) #8
  %4922 = load i32, ptr %545, align 4, !tbaa !125
  %4923 = getelementptr inbounds i8, ptr %545, i64 4
  %4924 = load i32, ptr %4923, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %375) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %375) #8
  %switch.tableidx3410 = add nsw i32 %568, -4500
  %4925 = sext i32 %switch.tableidx3410 to i64
  %switch.gep3411 = getelementptr inbounds [4 x ptr], ptr @switch.table._ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE.1, i64 0, i64 %4925
  %switch.load3412 = load ptr, ptr %switch.gep3411, align 8
  %4926 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %375, ptr noundef nonnull %switch.load3412)
          to label %4934 unwind label %4932

4927:                                             ; preds = %4920
  %4928 = landingpad { ptr, i32 }
          cleanup
  br label %4931

4929:                                             ; preds = %4921
  %4930 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %373) #8
  br label %4931

4931:                                             ; preds = %4929, %4927
  %.pn2605 = phi { ptr, i32 } [ %4930, %4929 ], [ %4928, %4927 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %374) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %374) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %373) #8
  br label %6424

4932:                                             ; preds = %switch.lookup3409, %4934
  %4933 = landingpad { ptr, i32 }
          cleanup
  br label %5013

4934:                                             ; preds = %switch.lookup3409
  %4935 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %375, ptr noundef nonnull @.str.718)
          to label %4936 unwind label %4932

4936:                                             ; preds = %4934
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %376) #8
  %4937 = getelementptr inbounds i8, ptr %545, i64 8
  %4938 = load i32, ptr %4937, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %376, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4938, i1 noundef zeroext true)
          to label %4939 unwind label %4974

4939:                                             ; preds = %4936
  %4940 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %375, ptr noundef nonnull align 8 dereferenceable(32) %376)
          to label %4941 unwind label %4976

4941:                                             ; preds = %4939
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %376) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %376) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %377) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %378) #8
  %4942 = getelementptr inbounds i8, ptr %545, i64 12
  %4943 = load i32, ptr %4942, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %378, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4943, i1 noundef zeroext true)
          to label %4944 unwind label %4979

4944:                                             ; preds = %4941
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %377, ptr noundef nonnull @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %378)
          to label %4945 unwind label %4981

4945:                                             ; preds = %4944
  %4946 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %375, ptr noundef nonnull align 8 dereferenceable(32) %377)
          to label %4947 unwind label %4983

4947:                                             ; preds = %4945
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %377) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %378) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %378) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %377) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %379) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %380) #8
  %4948 = getelementptr inbounds i8, ptr %545, i64 16
  %4949 = load i32, ptr %4948, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %380, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4949)
          to label %4950 unwind label %4987

4950:                                             ; preds = %4947
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %379, ptr noundef nonnull @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %380)
          to label %4951 unwind label %4989

4951:                                             ; preds = %4950
  %4952 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %375, ptr noundef nonnull align 8 dereferenceable(32) %379)
          to label %4953 unwind label %4991

4953:                                             ; preds = %4951
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %379) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %380) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %380) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %379) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %381) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %382) #8
  %4954 = getelementptr inbounds i8, ptr %545, i64 20
  %4955 = load i32, ptr %4954, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %382, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4955, i1 noundef zeroext true)
          to label %4956 unwind label %4995

4956:                                             ; preds = %4953
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %381, ptr noundef nonnull @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %382)
          to label %4957 unwind label %4997

4957:                                             ; preds = %4956
  %4958 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %375, ptr noundef nonnull align 8 dereferenceable(32) %381)
          to label %4959 unwind label %4999

4959:                                             ; preds = %4957
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %381) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %382) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %382) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %381) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %383) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %384) #8
  %4960 = getelementptr inbounds i8, ptr %545, i64 24
  %4961 = load i32, ptr %4960, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %384, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4961, i1 noundef zeroext true)
          to label %4962 unwind label %5003

4962:                                             ; preds = %4959
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %383, ptr noundef nonnull @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %384)
          to label %4963 unwind label %5005

4963:                                             ; preds = %4962
  %4964 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %375, ptr noundef nonnull align 8 dereferenceable(32) %383)
          to label %4965 unwind label %5007

4965:                                             ; preds = %4963
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %383) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %384) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %384) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %383) #8
  %4966 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %375, ptr noundef nonnull @.str.135)
          to label %4967 unwind label %5011

4967:                                             ; preds = %4965
  %4968 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %4922, i32 noundef %4924, ptr noundef nonnull align 8 dereferenceable(32) %375, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %4969 unwind label %5011

4969:                                             ; preds = %4967
  %4970 = load i32, ptr %4942, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %4924, i32 noundef %4970)
          to label %4971 unwind label %5011

4971:                                             ; preds = %4969
  %4972 = load i32, ptr %4954, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %4924, i32 noundef %4972)
          to label %4973 unwind label %5011

4973:                                             ; preds = %4971
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %375) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %375) #8
  br label %.thread3374

4974:                                             ; preds = %4936
  %4975 = landingpad { ptr, i32 }
          cleanup
  br label %4978

4976:                                             ; preds = %4939
  %4977 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %376) #8
  br label %4978

4978:                                             ; preds = %4976, %4974
  %.pn2607 = phi { ptr, i32 } [ %4977, %4976 ], [ %4975, %4974 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %376) #8
  br label %5013

4979:                                             ; preds = %4941
  %4980 = landingpad { ptr, i32 }
          cleanup
  br label %4986

4981:                                             ; preds = %4944
  %4982 = landingpad { ptr, i32 }
          cleanup
  br label %4985

4983:                                             ; preds = %4945
  %4984 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %377) #8
  br label %4985

4985:                                             ; preds = %4983, %4981
  %.pn2609 = phi { ptr, i32 } [ %4984, %4983 ], [ %4982, %4981 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %378) #8
  br label %4986

4986:                                             ; preds = %4985, %4979
  %.pn2609.pn = phi { ptr, i32 } [ %.pn2609, %4985 ], [ %4980, %4979 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %378) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %377) #8
  br label %5013

4987:                                             ; preds = %4947
  %4988 = landingpad { ptr, i32 }
          cleanup
  br label %4994

4989:                                             ; preds = %4950
  %4990 = landingpad { ptr, i32 }
          cleanup
  br label %4993

4991:                                             ; preds = %4951
  %4992 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %379) #8
  br label %4993

4993:                                             ; preds = %4991, %4989
  %.pn2612 = phi { ptr, i32 } [ %4992, %4991 ], [ %4990, %4989 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %380) #8
  br label %4994

4994:                                             ; preds = %4993, %4987
  %.pn2612.pn = phi { ptr, i32 } [ %.pn2612, %4993 ], [ %4988, %4987 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %380) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %379) #8
  br label %5013

4995:                                             ; preds = %4953
  %4996 = landingpad { ptr, i32 }
          cleanup
  br label %5002

4997:                                             ; preds = %4956
  %4998 = landingpad { ptr, i32 }
          cleanup
  br label %5001

4999:                                             ; preds = %4957
  %5000 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %381) #8
  br label %5001

5001:                                             ; preds = %4999, %4997
  %.pn2615 = phi { ptr, i32 } [ %5000, %4999 ], [ %4998, %4997 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %382) #8
  br label %5002

5002:                                             ; preds = %5001, %4995
  %.pn2615.pn = phi { ptr, i32 } [ %.pn2615, %5001 ], [ %4996, %4995 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %382) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %381) #8
  br label %5013

5003:                                             ; preds = %4959
  %5004 = landingpad { ptr, i32 }
          cleanup
  br label %5010

5005:                                             ; preds = %4962
  %5006 = landingpad { ptr, i32 }
          cleanup
  br label %5009

5007:                                             ; preds = %4963
  %5008 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %383) #8
  br label %5009

5009:                                             ; preds = %5007, %5005
  %.pn2618 = phi { ptr, i32 } [ %5008, %5007 ], [ %5006, %5005 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %384) #8
  br label %5010

5010:                                             ; preds = %5009, %5003
  %.pn2618.pn = phi { ptr, i32 } [ %.pn2618, %5009 ], [ %5004, %5003 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %384) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %383) #8
  br label %5013

5011:                                             ; preds = %4971, %4969, %4967, %4965
  %5012 = landingpad { ptr, i32 }
          cleanup
  br label %5013

5013:                                             ; preds = %4978, %4986, %4994, %5002, %5010, %5011, %4932
  %.pn2623 = phi { ptr, i32 } [ %4933, %4932 ], [ %5012, %5011 ], [ %.pn2618.pn, %5010 ], [ %.pn2615.pn, %5002 ], [ %.pn2612.pn, %4994 ], [ %.pn2609.pn, %4986 ], [ %.pn2607, %4978 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %375) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %375) #8
  br label %6424

5014:                                             ; preds = %566, %566
  %5015 = icmp eq i32 %568, 225
  %5016 = load i32, ptr %545, align 4, !tbaa !125
  %5017 = tail call noundef i32 @_ZNK11spirv_cross8Compiler21evaluate_constant_u32Ej(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %5016)
  %5018 = getelementptr inbounds i8, ptr %545, i64 4
  %5019 = load i32, ptr %5018, align 4, !tbaa !125
  %5020 = tail call noundef i32 @_ZNK11spirv_cross8Compiler21evaluate_constant_u32Ej(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %5019)
  br i1 %5015, label %.thread3149, label %5021

5021:                                             ; preds = %5014
  %5022 = getelementptr inbounds i8, ptr %545, i64 8
  %5023 = load i32, ptr %5022, align 4, !tbaa !125
  %5024 = tail call noundef i32 @_ZNK11spirv_cross8Compiler21evaluate_constant_u32Ej(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %5023)
  %5025 = icmp eq i32 %5017, 3
  %5026 = icmp eq i32 %5020, 3
  %or.cond28 = or i1 %5025, %5026
  br i1 %or.cond28, label %5028, label %.thread3170

.thread3149:                                      ; preds = %5014
  %5027 = icmp eq i32 %5017, 3
  br i1 %5027, label %.thread3162, label %.thread3170

.thread3162:                                      ; preds = %.thread3149
  tail call void @_ZN11spirv_cross12CompilerGLSL24request_subgroup_featureENS0_27ShaderSubgroupSupportHelper7FeatureE(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef 11)
  br label %.thread3170

5028:                                             ; preds = %5021
  tail call void @_ZN11spirv_cross12CompilerGLSL24request_subgroup_featureENS0_27ShaderSubgroupSupportHelper7FeatureE(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef 10)
  br i1 %5025, label %.thread3199.thread, label %.thread3170

.thread3170:                                      ; preds = %5021, %.thread3162, %.thread3149, %5028
  %.0236431543178 = phi i32 [ %5020, %.thread3162 ], [ %5024, %5028 ], [ %5020, %.thread3149 ], [ %5024, %5021 ]
  %.0236331563176 = phi i32 [ 3, %.thread3162 ], [ %5020, %5028 ], [ %5017, %.thread3149 ], [ %5020, %5021 ]
  %.0236231603174 = phi i32 [ 0, %.thread3162 ], [ %5017, %5028 ], [ 0, %.thread3149 ], [ %5017, %5021 ]
  %5029 = phi i1 [ true, %.thread3162 ], [ %5026, %5028 ], [ false, %.thread3149 ], [ false, %5021 ]
  %5030 = tail call noundef nonnull align 8 dereferenceable(237) ptr @_ZN11spirv_cross8Compiler15get_entry_pointEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
  %5031 = getelementptr inbounds i8, ptr %5030, i64 232
  %5032 = load i32, ptr %5031, align 8, !tbaa !220
  %5033 = icmp eq i32 %5032, 1
  br i1 %5033, label %5034, label %5039

5034:                                             ; preds = %.thread3170
  %5035 = icmp eq i32 %568, 224
  br i1 %5035, label %5036, label %.thread3374

5036:                                             ; preds = %5034
  tail call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA11_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(11) @.str.1456)
  br label %.thread3374

.thread3199.thread:                               ; preds = %5028
  %5037 = tail call noundef i32 @_ZN11spirv_cross12CompilerGLSL30mask_relevant_memory_semanticsEj(i32 noundef %5024)
  %5038 = icmp ne i32 %5037, 0
  br label %5070

5039:                                             ; preds = %.thread3170
  %5040 = tail call noundef i32 @_ZN11spirv_cross12CompilerGLSL30mask_relevant_memory_semanticsEj(i32 noundef %.0236431543178)
  br i1 %5015, label %5042, label %.thread3202

.thread3202:                                      ; preds = %5039
  %5041 = icmp ne i32 %5040, 0
  br label %5070

5042:                                             ; preds = %5039
  %5043 = tail call noundef ptr @_ZN11spirv_cross12CompilerGLSL29get_next_instruction_in_blockERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 4 dereferenceable(12) %1)
  %.not2595 = icmp eq ptr %5043, null
  br i1 %.not2595, label %.thread3199, label %5044

5044:                                             ; preds = %5042
  %5045 = load i16, ptr %5043, align 4, !tbaa !5
  %5046 = icmp eq i16 %5045, 224
  br i1 %5046, label %5047, label %.thread3199

5047:                                             ; preds = %5044
  %5048 = tail call noundef ptr @_ZNK11spirv_cross8Compiler6streamERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 4 dereferenceable(12) %5043)
  %5049 = getelementptr inbounds i8, ptr %5048, i64 4
  %5050 = load i32, ptr %5049, align 4, !tbaa !125
  %5051 = tail call noundef i32 @_ZNK11spirv_cross8Compiler21evaluate_constant_u32Ej(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %5050)
  %5052 = getelementptr inbounds i8, ptr %5048, i64 8
  %5053 = load i32, ptr %5052, align 4, !tbaa !125
  %5054 = tail call noundef i32 @_ZNK11spirv_cross8Compiler21evaluate_constant_u32Ej(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %5053)
  %5055 = tail call noundef i32 @_ZN11spirv_cross12CompilerGLSL30mask_relevant_memory_semanticsEj(i32 noundef %5054)
  %5056 = icmp eq i32 %5051, %.0236331563176
  br i1 %5056, label %.critedge3116, label %5057

5057:                                             ; preds = %5047
  %5058 = icmp eq i32 %5055, 256
  br i1 %5058, label %5059, label %5064

5059:                                             ; preds = %5057
  %5060 = add i32 %5051, -1
  %5061 = add i32 %.0236331563176, -1
  %5062 = or i32 %5060, %5061
  %or.cond3113 = icmp ult i32 %5062, 2
  %5063 = and i32 %5040, -257
  %.old3119 = icmp eq i32 %5063, 0
  %or.cond3128 = and i1 %.old3119, %or.cond3113
  br i1 %or.cond3128, label %.thread3374, label %.thread3199

5064:                                             ; preds = %5057
  %5065 = icmp eq i32 %.0236331563176, 2
  %5066 = icmp eq i32 %5051, 1
  %or.cond34 = and i1 %5065, %5066
  %5067 = and i32 %5055, %5040
  %5068 = icmp eq i32 %5067, %5040
  %or.cond3120 = and i1 %or.cond34, %5068
  br i1 %or.cond3120, label %.thread3374, label %.thread3199

.critedge3116:                                    ; preds = %5047
  %.old.old = and i32 %5055, %5040
  %.old3119.old = icmp eq i32 %.old.old, %5040
  br i1 %.old3119.old, label %.thread3374, label %.thread3199

.thread3199:                                      ; preds = %5042, %5044, %5064, %.critedge3116, %5059
  %5069 = icmp ne i32 %5040, 0
  br i1 %5069, label %5070, label %.thread3367

5070:                                             ; preds = %.thread3199.thread, %.thread3202, %.thread3199
  %5071 = phi i1 [ true, %.thread3202 ], [ false, %.thread3199 ], [ true, %.thread3199.thread ]
  %5072 = phi i1 [ %5041, %.thread3202 ], [ %5069, %.thread3199 ], [ %5038, %.thread3199.thread ]
  %.0236331583209 = phi i32 [ %.0236331563176, %.thread3202 ], [ %.0236331563176, %.thread3199 ], [ %5020, %.thread3199.thread ]
  %.023623160317531873207 = phi i32 [ %.0236231603174, %.thread3202 ], [ %.0236231603174, %.thread3199 ], [ 3, %.thread3199.thread ]
  %5073 = phi i1 [ false, %.thread3202 ], [ false, %.thread3199 ], [ true, %.thread3199.thread ]
  %5074 = phi i1 [ %5029, %.thread3202 ], [ %5029, %.thread3199 ], [ %5026, %.thread3199.thread ]
  %5075 = phi i32 [ %5040, %.thread3202 ], [ %5040, %.thread3199 ], [ %5037, %.thread3199.thread ]
  %5076 = getelementptr inbounds i8, ptr %0, i64 3176
  %5077 = load ptr, ptr %5076, align 8, !tbaa !227
  %.not2596 = icmp eq ptr %5077, null
  br i1 %.not2596, label %5078, label %5079

5078:                                             ; preds = %5070
  tail call void @__assert_fail(ptr noundef nonnull @.str.1383, ptr noundef nonnull @.str.11, i32 noundef 14638, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE) #9
  unreachable

5079:                                             ; preds = %5070
  %5080 = getelementptr inbounds i8, ptr %5077, i64 8
  %5081 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %5080)
  tail call void @_ZN11spirv_cross8Compiler35flush_control_dependent_expressionsEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %5081)
  tail call void @_ZN11spirv_cross8Compiler26flush_all_active_variablesEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
  %5082 = icmp eq i32 %.0236331583209, 2
  br i1 %5082, label %5084, label %5092

.thread3367:                                      ; preds = %.thread3199
  %5083 = icmp eq i32 %.0236331563176, 2
  br i1 %5083, label %.thread3374, label %5092

5084:                                             ; preds = %5079
  %5085 = icmp eq i32 %5075, 256
  br i1 %5085, label %5086, label %5090

5086:                                             ; preds = %5084
  %5087 = icmp eq i32 %.023623160317531873207, 2
  %5088 = and i1 %5071, %5087
  br i1 %5088, label %5131, label %5089

5089:                                             ; preds = %5086
  tail call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA23_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(23) @.str.1457)
  br i1 %5071, label %5134, label %.thread3374

5090:                                             ; preds = %5084
  br i1 %5072, label %5091, label %5131

5091:                                             ; preds = %5090
  tail call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA22_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(22) @.str.1458)
  br i1 %5071, label %5134, label %.thread3374

5092:                                             ; preds = %.thread3367, %5079
  %5093 = phi i32 [ 0, %.thread3367 ], [ %5075, %5079 ]
  %5094 = phi i1 [ %5029, %.thread3367 ], [ %5074, %5079 ]
  %5095 = phi i1 [ false, %.thread3367 ], [ %5073, %5079 ]
  %5096 = phi i1 [ false, %.thread3367 ], [ %5071, %5079 ]
  %5097 = tail call noundef i32 @_ZN3spvorENS_19MemorySemanticsMaskES0_(i32 noundef 256, i32 noundef 64)
  %5098 = tail call noundef i32 @_ZN3spvorENS_19MemorySemanticsMaskES0_(i32 noundef %5097, i32 noundef 2048)
  %5099 = tail call noundef i32 @_ZN3spvorENS_19MemorySemanticsMaskES0_(i32 noundef 512, i32 noundef 128)
  %5100 = and i32 %5099, %5093
  %.not2601 = icmp eq i32 %5100, 0
  br i1 %5094, label %5101, label %5116

5101:                                             ; preds = %5092
  br i1 %.not2601, label %5103, label %5102

5102:                                             ; preds = %5101
  tail call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA25_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(25) @.str.1459)
  br i1 %5096, label %5134, label %.thread3374

5103:                                             ; preds = %5101
  %5104 = and i32 %5098, %5093
  %5105 = icmp eq i32 %5104, %5098
  br i1 %5105, label %5106, label %5107

5106:                                             ; preds = %5103
  tail call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA25_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(25) @.str.1459)
  br i1 %5096, label %5134, label %.thread3374

5107:                                             ; preds = %5103
  %5108 = and i32 %5093, 256
  %.not2602 = icmp eq i32 %5108, 0
  br i1 %.not2602, label %5110, label %5109

5109:                                             ; preds = %5107
  tail call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA31_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(31) @.str.1460)
  br label %5110

5110:                                             ; preds = %5109, %5107
  %5111 = and i32 %5093, 64
  %.not2603 = icmp eq i32 %5111, 0
  br i1 %.not2603, label %5113, label %5112

5112:                                             ; preds = %5110
  tail call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA31_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(31) @.str.1461)
  br label %5113

5113:                                             ; preds = %5112, %5110
  %5114 = and i32 %5093, 2048
  %.not2604 = icmp eq i32 %5114, 0
  br i1 %.not2604, label %5131, label %5115

5115:                                             ; preds = %5113
  tail call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA30_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(30) @.str.1462)
  br i1 %5096, label %5134, label %.thread3374

5116:                                             ; preds = %5092
  br i1 %.not2601, label %5118, label %5117

5117:                                             ; preds = %5116
  tail call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA17_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(17) @.str.1463)
  br i1 %5096, label %5134, label %.thread3374

5118:                                             ; preds = %5116
  %5119 = and i32 %5098, %5093
  %5120 = icmp eq i32 %5119, %5098
  br i1 %5120, label %5121, label %5122

5121:                                             ; preds = %5118
  tail call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA17_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(17) @.str.1463)
  br i1 %5096, label %5134, label %.thread3374

5122:                                             ; preds = %5118
  %5123 = and i32 %5093, 256
  %.not2598 = icmp eq i32 %5123, 0
  br i1 %.not2598, label %5125, label %5124

5124:                                             ; preds = %5122
  tail call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA23_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(23) @.str.1457)
  br label %5125

5125:                                             ; preds = %5124, %5122
  %5126 = and i32 %5093, 64
  %.not2599 = icmp eq i32 %5126, 0
  br i1 %.not2599, label %5128, label %5127

5127:                                             ; preds = %5125
  tail call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA23_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(23) @.str.1464)
  br label %5128

5128:                                             ; preds = %5127, %5125
  %5129 = and i32 %5093, 2048
  %.not2600 = icmp eq i32 %5129, 0
  br i1 %.not2600, label %5131, label %5130

5130:                                             ; preds = %5128
  tail call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA22_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(22) @.str.1465)
  br i1 %5096, label %5134, label %.thread3374

5131:                                             ; preds = %5128, %5113, %5086, %5090
  %5132 = phi i1 [ %5095, %5128 ], [ %5095, %5113 ], [ %5073, %5086 ], [ %5073, %5090 ]
  %5133 = phi i1 [ %5096, %5128 ], [ %5096, %5113 ], [ %5071, %5086 ], [ %5071, %5090 ]
  br i1 %5133, label %5134, label %.thread3374

5134:                                             ; preds = %5091, %5089, %5106, %5115, %5102, %5121, %5130, %5117, %5131
  %5135 = phi i1 [ %5095, %5117 ], [ %5132, %5131 ], [ %5095, %5130 ], [ %5095, %5121 ], [ %5095, %5102 ], [ %5095, %5115 ], [ %5095, %5106 ], [ %5073, %5089 ], [ %5073, %5091 ]
  br i1 %5135, label %5136, label %5137

5136:                                             ; preds = %5134
  tail call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA19_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(19) @.str.1466)
  br label %.thread3374

5137:                                             ; preds = %5134
  tail call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA11_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(11) @.str.1456)
  br label %.thread3374

5138:                                             ; preds = %566
  %5139 = getelementptr inbounds i8, ptr %545, i64 8
  %5140 = load i32, ptr %5139, align 4, !tbaa !125
  %5141 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZN11spirv_cross8Compiler3getINS_13SPIRExtensionEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %5140)
  %5142 = getelementptr inbounds i8, ptr %5141, i64 12
  %5143 = load i32, ptr %5142, align 4, !tbaa !228
  switch i32 %5143, label %5243 [
    i32 1, label %5144
    i32 3, label %5155
    i32 4, label %5166
    i32 5, label %5177
    i32 6, label %5188
    i32 9, label %.thread3374
    i32 8, label %.thread3374
    i32 2, label %.thread3374
    i32 7, label %5199
  ]

5144:                                             ; preds = %5138
  %5145 = load i32, ptr %545, align 4, !tbaa !125
  %5146 = getelementptr inbounds i8, ptr %545, i64 4
  %5147 = load i32, ptr %5146, align 4, !tbaa !125
  %5148 = getelementptr inbounds i8, ptr %545, i64 12
  %5149 = load i32, ptr %5148, align 4, !tbaa !125
  %5150 = getelementptr inbounds i8, ptr %545, i64 16
  %5151 = add i32 %549, -4
  %5152 = load ptr, ptr %0, align 8, !tbaa !142
  %5153 = getelementptr inbounds i8, ptr %5152, i64 72
  %5154 = load ptr, ptr %5153, align 8
  tail call void %5154(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5145, i32 noundef %5147, i32 noundef %5149, ptr noundef nonnull %5150, i32 noundef %5151)
  br label %.thread3374

5155:                                             ; preds = %5138
  %5156 = load i32, ptr %545, align 4, !tbaa !125
  %5157 = getelementptr inbounds i8, ptr %545, i64 4
  %5158 = load i32, ptr %5157, align 4, !tbaa !125
  %5159 = getelementptr inbounds i8, ptr %545, i64 12
  %5160 = load i32, ptr %5159, align 4, !tbaa !125
  %5161 = getelementptr inbounds i8, ptr %545, i64 16
  %5162 = add i32 %549, -4
  %5163 = load ptr, ptr %0, align 8, !tbaa !142
  %5164 = getelementptr inbounds i8, ptr %5163, i64 80
  %5165 = load ptr, ptr %5164, align 8
  tail call void %5165(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5156, i32 noundef %5158, i32 noundef %5160, ptr noundef nonnull %5161, i32 noundef %5162)
  br label %.thread3374

5166:                                             ; preds = %5138
  %5167 = load i32, ptr %545, align 4, !tbaa !125
  %5168 = getelementptr inbounds i8, ptr %545, i64 4
  %5169 = load i32, ptr %5168, align 4, !tbaa !125
  %5170 = getelementptr inbounds i8, ptr %545, i64 12
  %5171 = load i32, ptr %5170, align 4, !tbaa !125
  %5172 = getelementptr inbounds i8, ptr %545, i64 16
  %5173 = add i32 %549, -4
  %5174 = load ptr, ptr %0, align 8, !tbaa !142
  %5175 = getelementptr inbounds i8, ptr %5174, i64 88
  %5176 = load ptr, ptr %5175, align 8
  tail call void %5176(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5167, i32 noundef %5169, i32 noundef %5171, ptr noundef nonnull %5172, i32 noundef %5173)
  br label %.thread3374

5177:                                             ; preds = %5138
  %5178 = load i32, ptr %545, align 4, !tbaa !125
  %5179 = getelementptr inbounds i8, ptr %545, i64 4
  %5180 = load i32, ptr %5179, align 4, !tbaa !125
  %5181 = getelementptr inbounds i8, ptr %545, i64 12
  %5182 = load i32, ptr %5181, align 4, !tbaa !125
  %5183 = getelementptr inbounds i8, ptr %545, i64 16
  %5184 = add i32 %549, -4
  %5185 = load ptr, ptr %0, align 8, !tbaa !142
  %5186 = getelementptr inbounds i8, ptr %5185, i64 96
  %5187 = load ptr, ptr %5186, align 8
  tail call void %5187(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5178, i32 noundef %5180, i32 noundef %5182, ptr noundef nonnull %5183, i32 noundef %5184)
  br label %.thread3374

5188:                                             ; preds = %5138
  %5189 = load i32, ptr %545, align 4, !tbaa !125
  %5190 = getelementptr inbounds i8, ptr %545, i64 4
  %5191 = load i32, ptr %5190, align 4, !tbaa !125
  %5192 = getelementptr inbounds i8, ptr %545, i64 12
  %5193 = load i32, ptr %5192, align 4, !tbaa !125
  %5194 = getelementptr inbounds i8, ptr %545, i64 16
  %5195 = add i32 %549, -4
  %5196 = load ptr, ptr %0, align 8, !tbaa !142
  %5197 = getelementptr inbounds i8, ptr %5196, i64 104
  %5198 = load ptr, ptr %5197, align 8
  tail call void %5198(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5189, i32 noundef %5191, i32 noundef %5193, ptr noundef nonnull %5194, i32 noundef %5195)
  br label %.thread3374

5199:                                             ; preds = %5138
  %5200 = getelementptr inbounds i8, ptr %545, i64 12
  %5201 = load i32, ptr %5200, align 4, !tbaa !125
  %5202 = icmp eq i32 %5201, 1
  br i1 %5202, label %5203, label %.thread3374

5203:                                             ; preds = %5199
  %5204 = getelementptr inbounds i8, ptr %0, i64 7648
  %5205 = load i8, ptr %5204, align 8, !tbaa !219, !range !123, !noundef !124
  %5206 = trunc nuw i8 %5205 to i1
  br i1 %5206, label %5212, label %5207

5207:                                             ; preds = %5203
  %5208 = tail call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %5208, ptr noundef nonnull @.str.1467)
          to label %5209 unwind label %5210

5209:                                             ; preds = %5207
  tail call void @__cxa_throw(ptr nonnull %5208, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
  unreachable

5210:                                             ; preds = %5207
  %5211 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %5208) #8
  br label %6424

5212:                                             ; preds = %5203
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %385) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %386) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %386) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %385, ptr noundef nonnull @.str.1468, ptr noundef nonnull align 1 dereferenceable(1) %386)
          to label %5213 unwind label %5220

5213:                                             ; preds = %5212
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %385)
          to label %5214 unwind label %5222

5214:                                             ; preds = %5213
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %385) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %386) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %386) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %385) #8
  %5215 = getelementptr inbounds i8, ptr %545, i64 16
  %5216 = load i32, ptr %5215, align 4, !tbaa !125
  %5217 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZN11spirv_cross8Compiler3getINS_10SPIRStringEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %5216)
  %5218 = getelementptr inbounds i8, ptr %5217, i64 16
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %387) #8
  call void @_ZN11spirv_cross4joinIJRA17_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %387, ptr noundef nonnull align 1 dereferenceable(17) @.str.1469, ptr noundef nonnull align 8 dereferenceable(32) %5218, ptr noundef nonnull align 1 dereferenceable(2) @.str.1470)
  %5219 = icmp ugt i32 %549, 5
  br i1 %5219, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %5214
  %wide.trip.count = zext i32 %549 to i64
  br label %.lr.ph

._crit_edge:                                      ; preds = %5231, %5214
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %387, ptr noundef nonnull align 1 dereferenceable(3) @.str.751)
          to label %5239 unwind label %5240

5220:                                             ; preds = %5212
  %5221 = landingpad { ptr, i32 }
          cleanup
  br label %5224

5222:                                             ; preds = %5213
  %5223 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %385) #8
  br label %5224

5224:                                             ; preds = %5222, %5220
  %.pn2586 = phi { ptr, i32 } [ %5223, %5222 ], [ %5221, %5220 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %386) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %386) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %385) #8
  br label %6424

.lr.ph:                                           ; preds = %.lr.ph.preheader, %5231
  %indvars.iv = phi i64 [ 5, %.lr.ph.preheader ], [ %indvars.iv.next, %5231 ]
  %5225 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %387, ptr noundef nonnull @.str.177)
          to label %5226 unwind label %5232

5226:                                             ; preds = %.lr.ph
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %388) #8
  %5227 = getelementptr inbounds i32, ptr %545, i64 %indvars.iv
  %5228 = load i32, ptr %5227, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %388, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5228, i1 noundef zeroext true)
          to label %5229 unwind label %5234

5229:                                             ; preds = %5226
  %5230 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %387, ptr noundef nonnull align 8 dereferenceable(32) %388)
          to label %5231 unwind label %5236

5231:                                             ; preds = %5229
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %388) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %388) #8
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !231

5232:                                             ; preds = %.lr.ph
  %5233 = landingpad { ptr, i32 }
          cleanup
  br label %5242

5234:                                             ; preds = %5226
  %5235 = landingpad { ptr, i32 }
          cleanup
  br label %5238

5236:                                             ; preds = %5229
  %5237 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %388) #8
  br label %5238

5238:                                             ; preds = %5236, %5234
  %.pn2588 = phi { ptr, i32 } [ %5237, %5236 ], [ %5235, %5234 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %388) #8
  br label %5242

5239:                                             ; preds = %._crit_edge
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %387) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %387) #8
  br label %.thread3374

5240:                                             ; preds = %._crit_edge
  %5241 = landingpad { ptr, i32 }
          cleanup
  br label %5242

5242:                                             ; preds = %5232, %5238, %5240
  %.pn2588.pn.pn = phi { ptr, i32 } [ %5241, %5240 ], [ %.pn2588, %5238 ], [ %5233, %5232 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %387) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %387) #8
  br label %6424

5243:                                             ; preds = %5138
  tail call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA25_KcRKtEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(25) @.str.1471, ptr noundef nonnull align 2 dereferenceable(2) %1)
  br label %.thread3374

5244:                                             ; preds = %566
  %5245 = load i32, ptr %545, align 4, !tbaa !125
  %5246 = getelementptr inbounds i8, ptr %545, i64 4
  %5247 = load i32, ptr %5246, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %389) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %389) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %390) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %391) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %392) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %393) #8
  %5248 = getelementptr inbounds i8, ptr %545, i64 8
  %5249 = load i32, ptr %5248, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %393, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5249, i1 noundef zeroext true)
          to label %5250 unwind label %5266

5250:                                             ; preds = %5244
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %392, ptr noundef nonnull @.str.1472, ptr noundef nonnull align 8 dereferenceable(32) %393)
          to label %5251 unwind label %5268

5251:                                             ; preds = %5250
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %391, ptr noundef nonnull align 8 dereferenceable(32) %392, ptr noundef nonnull @.str.1473)
          to label %5252 unwind label %5270

5252:                                             ; preds = %5251
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %390, ptr noundef nonnull align 8 dereferenceable(32) %391)
          to label %5253 unwind label %5272

5253:                                             ; preds = %5252
  %5254 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %389, ptr noundef nonnull align 8 dereferenceable(32) %390) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %390) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %391) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %392) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %393) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %393) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %392) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %391) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %390) #8
  %5255 = load i32, ptr %5248, align 4, !tbaa !125
  %5256 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5255)
          to label %5257 unwind label %5277

5257:                                             ; preds = %5253
  %5258 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5245, i32 noundef %5247, ptr noundef nonnull align 8 dereferenceable(32) %389, i1 noundef zeroext %5256, i1 noundef zeroext false)
          to label %5259 unwind label %5277

5259:                                             ; preds = %5257
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %394) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %395) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %395) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %394, ptr noundef nonnull @.str.1474, ptr noundef nonnull align 1 dereferenceable(1) %395)
          to label %5260 unwind label %5279

5260:                                             ; preds = %5259
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %394)
          to label %5261 unwind label %5281

5261:                                             ; preds = %5260
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %394) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %395) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %395) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %394) #8
  %5262 = load i32, ptr %5248, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %5247, i32 noundef %5262)
          to label %5263 unwind label %5277

5263:                                             ; preds = %5261
  %5264 = load i32, ptr %5246, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5264)
          to label %5265 unwind label %5277

5265:                                             ; preds = %5263
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %389) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %389) #8
  br label %.thread3374

5266:                                             ; preds = %5244
  %5267 = landingpad { ptr, i32 }
          cleanup
  br label %5276

5268:                                             ; preds = %5250
  %5269 = landingpad { ptr, i32 }
          cleanup
  br label %5275

5270:                                             ; preds = %5251
  %5271 = landingpad { ptr, i32 }
          cleanup
  br label %5274

5272:                                             ; preds = %5252
  %5273 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %391) #8
  br label %5274

5274:                                             ; preds = %5272, %5270
  %.pn2578 = phi { ptr, i32 } [ %5273, %5272 ], [ %5271, %5270 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %392) #8
  br label %5275

5275:                                             ; preds = %5274, %5268
  %.pn2578.pn = phi { ptr, i32 } [ %.pn2578, %5274 ], [ %5269, %5268 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %393) #8
  br label %5276

5276:                                             ; preds = %5275, %5266
  %.pn2578.pn.pn = phi { ptr, i32 } [ %.pn2578.pn, %5275 ], [ %5267, %5266 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %393) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %392) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %391) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %390) #8
  br label %5284

5277:                                             ; preds = %5263, %5261, %5257, %5253
  %5278 = landingpad { ptr, i32 }
          cleanup
  br label %5284

5279:                                             ; preds = %5259
  %5280 = landingpad { ptr, i32 }
          cleanup
  br label %5283

5281:                                             ; preds = %5260
  %5282 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %394) #8
  br label %5283

5283:                                             ; preds = %5281, %5279
  %.pn2582 = phi { ptr, i32 } [ %5282, %5281 ], [ %5280, %5279 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %395) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %395) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %394) #8
  br label %5284

5284:                                             ; preds = %5283, %5277, %5276
  %.pn2584 = phi { ptr, i32 } [ %5278, %5277 ], [ %.pn2582, %5283 ], [ %.pn2578.pn.pn, %5276 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %389) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %389) #8
  br label %6424

5285:                                             ; preds = %566
  %5286 = load i32, ptr %545, align 4, !tbaa !125
  %5287 = getelementptr inbounds i8, ptr %545, i64 4
  %5288 = load i32, ptr %5287, align 4, !tbaa !125
  %5289 = getelementptr inbounds i8, ptr %545, i64 8
  %5290 = load i32, ptr %5289, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5286, i32 noundef %5288, i32 noundef %5290, ptr noundef nonnull @.str.1475)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %396) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %397) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %397) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %396, ptr noundef nonnull @.str.1474, ptr noundef nonnull align 1 dereferenceable(1) %397)
          to label %5291 unwind label %5294

5291:                                             ; preds = %5285
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %396)
          to label %5292 unwind label %5296

5292:                                             ; preds = %5291
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %396) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %397) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %397) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %396) #8
  %5293 = load i32, ptr %5287, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5293)
  br label %.thread3374

5294:                                             ; preds = %5285
  %5295 = landingpad { ptr, i32 }
          cleanup
  br label %5298

5296:                                             ; preds = %5291
  %5297 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %396) #8
  br label %5298

5298:                                             ; preds = %5296, %5294
  %.pn2576 = phi { ptr, i32 } [ %5297, %5296 ], [ %5295, %5294 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %397) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %397) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %396) #8
  br label %6424

5299:                                             ; preds = %566
  %5300 = load i32, ptr %545, align 4, !tbaa !125
  %5301 = getelementptr inbounds i8, ptr %545, i64 4
  %5302 = load i32, ptr %5301, align 4, !tbaa !125
  %5303 = getelementptr inbounds i8, ptr %545, i64 8
  %5304 = load i32, ptr %5303, align 4, !tbaa !125
  %5305 = getelementptr inbounds i8, ptr %545, i64 12
  %5306 = load i32, ptr %5305, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5300, i32 noundef %5302, i32 noundef %5304, i32 noundef %5306, ptr noundef nonnull @.str.1476)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %398) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %399) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %399) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %398, ptr noundef nonnull @.str.1474, ptr noundef nonnull align 1 dereferenceable(1) %399)
          to label %5307 unwind label %5310

5307:                                             ; preds = %5299
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %398)
          to label %5308 unwind label %5312

5308:                                             ; preds = %5307
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %398) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %399) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %399) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %398) #8
  %5309 = load i32, ptr %5301, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5309)
  br label %.thread3374

5310:                                             ; preds = %5299
  %5311 = landingpad { ptr, i32 }
          cleanup
  br label %5314

5312:                                             ; preds = %5307
  %5313 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %398) #8
  br label %5314

5314:                                             ; preds = %5312, %5310
  %.pn2574 = phi { ptr, i32 } [ %5313, %5312 ], [ %5311, %5310 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %399) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %399) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %398) #8
  br label %6424

5315:                                             ; preds = %566
  %5316 = load i32, ptr %545, align 4, !tbaa !125
  %5317 = getelementptr inbounds i8, ptr %545, i64 4
  %5318 = load i32, ptr %5317, align 4, !tbaa !125
  %5319 = getelementptr inbounds i8, ptr %545, i64 8
  %5320 = load i32, ptr %5319, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5316, i32 noundef %5318, i32 noundef %5320, ptr noundef nonnull @.str.1477)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %400) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %401) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %401) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %400, ptr noundef nonnull @.str.1478, ptr noundef nonnull align 1 dereferenceable(1) %401)
          to label %5321 unwind label %5324

5321:                                             ; preds = %5315
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %400)
          to label %5322 unwind label %5326

5322:                                             ; preds = %5321
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %400) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %401) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %401) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %400) #8
  %5323 = load i32, ptr %5317, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5323)
  br label %.thread3374

5324:                                             ; preds = %5315
  %5325 = landingpad { ptr, i32 }
          cleanup
  br label %5328

5326:                                             ; preds = %5321
  %5327 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %400) #8
  br label %5328

5328:                                             ; preds = %5326, %5324
  %.pn2572 = phi { ptr, i32 } [ %5327, %5326 ], [ %5325, %5324 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %401) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %401) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %400) #8
  br label %6424

5329:                                             ; preds = %566
  %5330 = load i32, ptr %545, align 4, !tbaa !125
  %5331 = getelementptr inbounds i8, ptr %545, i64 4
  %5332 = load i32, ptr %5331, align 4, !tbaa !125
  %5333 = getelementptr inbounds i8, ptr %545, i64 8
  %5334 = load i32, ptr %5333, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5330, i32 noundef %5332, i32 noundef %5334, ptr noundef nonnull @.str.1479)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %402) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %403) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %403) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %402, ptr noundef nonnull @.str.1478, ptr noundef nonnull align 1 dereferenceable(1) %403)
          to label %5335 unwind label %5338

5335:                                             ; preds = %5329
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %402)
          to label %5336 unwind label %5340

5336:                                             ; preds = %5335
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %402) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %403) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %403) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %402) #8
  %5337 = load i32, ptr %5331, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5337)
  br label %.thread3374

5338:                                             ; preds = %5329
  %5339 = landingpad { ptr, i32 }
          cleanup
  br label %5342

5340:                                             ; preds = %5335
  %5341 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %402) #8
  br label %5342

5342:                                             ; preds = %5340, %5338
  %.pn2570 = phi { ptr, i32 } [ %5341, %5340 ], [ %5339, %5338 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %403) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %403) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %402) #8
  br label %6424

5343:                                             ; preds = %566
  %5344 = load i32, ptr %545, align 4, !tbaa !125
  %5345 = getelementptr inbounds i8, ptr %545, i64 4
  %5346 = load i32, ptr %5345, align 4, !tbaa !125
  %5347 = getelementptr inbounds i8, ptr %545, i64 8
  %5348 = load i32, ptr %5347, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5344, i32 noundef %5346, i32 noundef %5348, ptr noundef nonnull @.str.1480)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %404) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %405) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %405) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %404, ptr noundef nonnull @.str.1478, ptr noundef nonnull align 1 dereferenceable(1) %405)
          to label %5349 unwind label %5352

5349:                                             ; preds = %5343
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %404)
          to label %5350 unwind label %5354

5350:                                             ; preds = %5349
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %404) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %405) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %405) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %404) #8
  %5351 = load i32, ptr %5345, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5351)
  br label %.thread3374

5352:                                             ; preds = %5343
  %5353 = landingpad { ptr, i32 }
          cleanup
  br label %5356

5354:                                             ; preds = %5349
  %5355 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %404) #8
  br label %5356

5356:                                             ; preds = %5354, %5352
  %.pn2568 = phi { ptr, i32 } [ %5355, %5354 ], [ %5353, %5352 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %405) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %405) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %404) #8
  br label %6424

5357:                                             ; preds = %566, %566
  %5358 = load i32, ptr %545, align 4, !tbaa !125
  %5359 = getelementptr inbounds i8, ptr %545, i64 4
  %5360 = load i32, ptr %5359, align 4, !tbaa !125
  %5361 = getelementptr inbounds i8, ptr %545, i64 16
  %5362 = load i32, ptr %5361, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5358, i32 noundef %5360, i32 noundef %5362, ptr noundef nonnull @.str.1481)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %406) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %407) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %407) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %406, ptr noundef nonnull @.str.1137, ptr noundef nonnull align 1 dereferenceable(1) %407)
          to label %5363 unwind label %5366

5363:                                             ; preds = %5357
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %406)
          to label %5364 unwind label %5368

5364:                                             ; preds = %5363
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %406) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %407) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %407) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %406) #8
  %5365 = load i32, ptr %5359, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5365)
  br label %.thread3374

5366:                                             ; preds = %5357
  %5367 = landingpad { ptr, i32 }
          cleanup
  br label %5370

5368:                                             ; preds = %5363
  %5369 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %406) #8
  br label %5370

5370:                                             ; preds = %5368, %5366
  %.pn2566 = phi { ptr, i32 } [ %5369, %5368 ], [ %5367, %5366 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %407) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %407) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %406) #8
  br label %6424

5371:                                             ; preds = %566, %566, %566
  %5372 = load i32, ptr %545, align 4, !tbaa !125
  %5373 = getelementptr inbounds i8, ptr %545, i64 4
  %5374 = load i32, ptr %5373, align 4, !tbaa !125
  %5375 = getelementptr inbounds i8, ptr %545, i64 16
  %5376 = load i32, ptr %5375, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5372, i32 noundef %5374, i32 noundef %5376, ptr noundef nonnull @.str.1482)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %408) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %409) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %409) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %408, ptr noundef nonnull @.str.1137, ptr noundef nonnull align 1 dereferenceable(1) %409)
          to label %5377 unwind label %5380

5377:                                             ; preds = %5371
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %408)
          to label %5378 unwind label %5382

5378:                                             ; preds = %5377
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %408) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %409) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %409) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %408) #8
  %5379 = load i32, ptr %5373, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5379)
  br label %.thread3374

5380:                                             ; preds = %5371
  %5381 = landingpad { ptr, i32 }
          cleanup
  br label %5384

5382:                                             ; preds = %5377
  %5383 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %408) #8
  br label %5384

5384:                                             ; preds = %5382, %5380
  %.pn2564 = phi { ptr, i32 } [ %5383, %5382 ], [ %5381, %5380 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %409) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %409) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %408) #8
  br label %6424

5385:                                             ; preds = %566, %566, %566
  %5386 = load i32, ptr %545, align 4, !tbaa !125
  %5387 = getelementptr inbounds i8, ptr %545, i64 4
  %5388 = load i32, ptr %5387, align 4, !tbaa !125
  %5389 = getelementptr inbounds i8, ptr %545, i64 16
  %5390 = load i32, ptr %5389, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5386, i32 noundef %5388, i32 noundef %5390, ptr noundef nonnull @.str.1483)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %410) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %411) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %411) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %410, ptr noundef nonnull @.str.1137, ptr noundef nonnull align 1 dereferenceable(1) %411)
          to label %5391 unwind label %5394

5391:                                             ; preds = %5385
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %410)
          to label %5392 unwind label %5396

5392:                                             ; preds = %5391
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %410) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %411) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %411) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %410) #8
  %5393 = load i32, ptr %5387, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL37register_control_dependent_expressionEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5393)
  br label %.thread3374

5394:                                             ; preds = %5385
  %5395 = landingpad { ptr, i32 }
          cleanup
  br label %5398

5396:                                             ; preds = %5391
  %5397 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %410) #8
  br label %5398

5398:                                             ; preds = %5396, %5394
  %.pn2562 = phi { ptr, i32 } [ %5397, %5396 ], [ %5395, %5394 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %411) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %411) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %410) #8
  br label %6424

5399:                                             ; preds = %566
  %5400 = getelementptr inbounds i8, ptr %545, i64 8
  %5401 = load i32, ptr %5400, align 4, !tbaa !125
  %5402 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %5401)
  %5403 = load i32, ptr %545, align 4, !tbaa !125
  %5404 = getelementptr inbounds i8, ptr %545, i64 4
  %5405 = load i32, ptr %5404, align 4, !tbaa !125
  %5406 = getelementptr inbounds i8, ptr %5402, i64 252
  %5407 = load i32, ptr %5406, align 4, !tbaa !213
  %5408 = icmp eq i32 %5407, 6
  %5409 = load i32, ptr %5400, align 4, !tbaa !125
  br i1 %5408, label %5410, label %5411

5410:                                             ; preds = %5399
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5403, i32 noundef %5405, i32 noundef %5409, ptr noundef nonnull @.str.1484)
  br label %5414

5411:                                             ; preds = %5399
  %5412 = getelementptr inbounds i8, ptr %545, i64 12
  %5413 = load i32, ptr %5412, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5403, i32 noundef %5405, i32 noundef %5409, i32 noundef %5413, ptr noundef nonnull @.str.1484)
  br label %5414

5414:                                             ; preds = %5411, %5410
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %412) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %413) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %413) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %412, ptr noundef nonnull @.str.1485, ptr noundef nonnull align 1 dereferenceable(1) %413)
          to label %5415 unwind label %5417

5415:                                             ; preds = %5414
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %412)
          to label %5416 unwind label %5419

5416:                                             ; preds = %5415
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %412) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %413) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %413) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %412) #8
  br label %.thread3374

5417:                                             ; preds = %5414
  %5418 = landingpad { ptr, i32 }
          cleanup
  br label %5421

5419:                                             ; preds = %5415
  %5420 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %412) #8
  br label %5421

5421:                                             ; preds = %5419, %5417
  %.pn2560 = phi { ptr, i32 } [ %5420, %5419 ], [ %5418, %5417 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %413) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %413) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %412) #8
  br label %6424

5422:                                             ; preds = %566
  %5423 = getelementptr inbounds i8, ptr %545, i64 8
  %5424 = load i32, ptr %5423, align 4, !tbaa !125
  %5425 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %5424)
  %5426 = load i32, ptr %545, align 4, !tbaa !125
  %5427 = getelementptr inbounds i8, ptr %545, i64 4
  %5428 = load i32, ptr %5427, align 4, !tbaa !125
  %5429 = getelementptr inbounds i8, ptr %5425, i64 252
  %5430 = load i32, ptr %5429, align 4, !tbaa !213
  %5431 = icmp eq i32 %5430, 6
  %5432 = load i32, ptr %5423, align 4, !tbaa !125
  br i1 %5431, label %5433, label %5436

5433:                                             ; preds = %5422
  %5434 = getelementptr inbounds i8, ptr %545, i64 16
  %5435 = load i32, ptr %5434, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5426, i32 noundef %5428, i32 noundef %5432, i32 noundef %5435, ptr noundef nonnull @.str.1486)
  br label %5441

5436:                                             ; preds = %5422
  %5437 = getelementptr inbounds i8, ptr %545, i64 12
  %5438 = load i32, ptr %5437, align 4, !tbaa !125
  %5439 = getelementptr inbounds i8, ptr %545, i64 16
  %5440 = load i32, ptr %5439, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL20emit_trinary_func_opEjjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5426, i32 noundef %5428, i32 noundef %5432, i32 noundef %5438, i32 noundef %5440, ptr noundef nonnull @.str.1486)
  br label %5441

5441:                                             ; preds = %5436, %5433
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %414) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %415) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %415) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %414, ptr noundef nonnull @.str.1485, ptr noundef nonnull align 1 dereferenceable(1) %415)
          to label %5442 unwind label %5444

5442:                                             ; preds = %5441
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %414)
          to label %5443 unwind label %5446

5443:                                             ; preds = %5442
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %414) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %415) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %415) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %414) #8
  br label %.thread3374

5444:                                             ; preds = %5441
  %5445 = landingpad { ptr, i32 }
          cleanup
  br label %5448

5446:                                             ; preds = %5442
  %5447 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %414) #8
  br label %5448

5448:                                             ; preds = %5446, %5444
  %.pn2558 = phi { ptr, i32 } [ %5447, %5446 ], [ %5445, %5444 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %415) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %415) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %414) #8
  br label %6424

5449:                                             ; preds = %566, %566, %566, %566, %566, %566, %566, %566, %566, %566, %566, %566, %566, %566, %566, %566, %566, %566, %566, %566, %566, %566, %566, %566, %566, %566, %566, %566, %566, %566, %566, %566, %566, %566
  %5450 = load ptr, ptr %0, align 8, !tbaa !142
  %5451 = getelementptr inbounds i8, ptr %5450, i64 144
  %5452 = load ptr, ptr %5451, align 8
  tail call void %5452(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 4 dereferenceable(12) %1)
  br label %.thread3374

5453:                                             ; preds = %566, %566, %566, %566, %566
  %5454 = getelementptr inbounds i8, ptr %545, i64 8
  %5455 = load i32, ptr %5454, align 4, !tbaa !125
  %5456 = getelementptr inbounds i8, ptr %545, i64 12
  %5457 = load i32, ptr %5456, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %416) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %416) #8
  %5458 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %5455)
          to label %5459 unwind label %5464

5459:                                             ; preds = %5453
  %5460 = getelementptr inbounds i8, ptr %5458, i64 24
  %5461 = load i32, ptr %5460, align 8, !tbaa !126
  %5462 = icmp ugt i32 %5461, 1
  br i1 %5462, label %5463, label %5485

5463:                                             ; preds = %5459
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %417) #8
  switch i32 %568, label %5471 [
    i32 181, label %5466
    i32 185, label %5467
    i32 189, label %5468
    i32 187, label %5469
    i32 191, label %5470
  ]

5464:                                             ; preds = %5518, %5516, %5513, %5511, %5505, %5453
  %5465 = landingpad { ptr, i32 }
          cleanup
  br label %5521

5466:                                             ; preds = %5463
  store ptr @.str.446, ptr %417, align 8, !tbaa !208
  br label %5472

5467:                                             ; preds = %5463
  store ptr @.str.398, ptr %417, align 8, !tbaa !208
  br label %5472

5468:                                             ; preds = %5463
  store ptr @.str.397, ptr %417, align 8, !tbaa !208
  br label %5472

5469:                                             ; preds = %5463
  store ptr @.str.425, ptr %417, align 8, !tbaa !208
  br label %5472

5470:                                             ; preds = %5463
  store ptr @.str.424, ptr %417, align 8, !tbaa !208
  br label %5472

5471:                                             ; preds = %5463
  call void @__assert_fail(ptr noundef nonnull @.str.760, ptr noundef nonnull @.str.11, i32 noundef 15002, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE) #9
  unreachable

5472:                                             ; preds = %5470, %5469, %5468, %5467, %5466
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %418) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %419) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %419, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5455, i1 noundef zeroext true)
          to label %5473 unwind label %5477

5473:                                             ; preds = %5472
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %420) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %420, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5457, i1 noundef zeroext true)
          to label %5474 unwind label %5479

5474:                                             ; preds = %5473
  invoke void @_ZN11spirv_cross4joinIJRA5_KcRPS1_RA2_S1_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_SD_SF_EEESD_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %418, ptr noundef nonnull align 1 dereferenceable(5) @.str.1487, ptr noundef nonnull align 8 dereferenceable(8) %417, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %419, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %420, ptr noundef nonnull align 1 dereferenceable(3) @.str.1016)
          to label %5475 unwind label %5481

5475:                                             ; preds = %5474
  %5476 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %416, ptr noundef nonnull align 8 dereferenceable(32) %418) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %418) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %420) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %420) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %419) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %419) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %418) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %417) #8
  br label %5505

5477:                                             ; preds = %5472
  %5478 = landingpad { ptr, i32 }
          cleanup
  br label %5484

5479:                                             ; preds = %5473
  %5480 = landingpad { ptr, i32 }
          cleanup
  br label %5483

5481:                                             ; preds = %5474
  %5482 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %420) #8
  br label %5483

5483:                                             ; preds = %5481, %5479
  %.pn2553 = phi { ptr, i32 } [ %5482, %5481 ], [ %5480, %5479 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %420) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %419) #8
  br label %5484

5484:                                             ; preds = %5483, %5477
  %.pn2553.pn = phi { ptr, i32 } [ %.pn2553, %5483 ], [ %5478, %5477 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %419) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %418) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %417) #8
  br label %5521

5485:                                             ; preds = %5459
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %421) #8
  switch i32 %568, label %5491 [
    i32 181, label %5486
    i32 185, label %5487
    i32 189, label %5488
    i32 187, label %5489
    i32 191, label %5490
  ]

5486:                                             ; preds = %5485
  store ptr @.str.1488, ptr %421, align 8, !tbaa !208
  br label %5492

5487:                                             ; preds = %5485
  store ptr @.str.1489, ptr %421, align 8, !tbaa !208
  br label %5492

5488:                                             ; preds = %5485
  store ptr @.str.1490, ptr %421, align 8, !tbaa !208
  br label %5492

5489:                                             ; preds = %5485
  store ptr @.str.1491, ptr %421, align 8, !tbaa !208
  br label %5492

5490:                                             ; preds = %5485
  store ptr @.str.1492, ptr %421, align 8, !tbaa !208
  br label %5492

5491:                                             ; preds = %5485
  call void @__assert_fail(ptr noundef nonnull @.str.760, ptr noundef nonnull @.str.11, i32 noundef 15034, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL16emit_instructionERKNS_11InstructionE) #9
  unreachable

5492:                                             ; preds = %5490, %5489, %5488, %5487, %5486
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %422) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %423) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %423, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5455, i1 noundef zeroext true)
          to label %5493 unwind label %5497

5493:                                             ; preds = %5492
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %424) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL31to_enclosed_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %424, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5457, i1 noundef zeroext true)
          to label %5494 unwind label %5499

5494:                                             ; preds = %5493
  invoke void @_ZN11spirv_cross4joinIJRA3_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERPS1_S9_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %422, ptr noundef nonnull align 1 dereferenceable(3) @.str.1014, ptr noundef nonnull align 8 dereferenceable(32) %423, ptr noundef nonnull align 8 dereferenceable(8) %421, ptr noundef nonnull align 8 dereferenceable(32) %424, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %5495 unwind label %5501

5495:                                             ; preds = %5494
  %5496 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %416, ptr noundef nonnull align 8 dereferenceable(32) %422) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %422) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %424) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %424) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %423) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %423) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %422) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %421) #8
  br label %5505

5497:                                             ; preds = %5492
  %5498 = landingpad { ptr, i32 }
          cleanup
  br label %5504

5499:                                             ; preds = %5493
  %5500 = landingpad { ptr, i32 }
          cleanup
  br label %5503

5501:                                             ; preds = %5494
  %5502 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %424) #8
  br label %5503

5503:                                             ; preds = %5501, %5499
  %.pn2550 = phi { ptr, i32 } [ %5502, %5501 ], [ %5500, %5499 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %424) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %423) #8
  br label %5504

5504:                                             ; preds = %5503, %5497
  %.pn2550.pn = phi { ptr, i32 } [ %.pn2550, %5503 ], [ %5498, %5497 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %423) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %422) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %421) #8
  br label %5521

5505:                                             ; preds = %5495, %5475
  %5506 = load i32, ptr %545, align 4, !tbaa !125
  %5507 = getelementptr inbounds i8, ptr %545, i64 4
  %5508 = load i32, ptr %5507, align 4, !tbaa !125
  %5509 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5455)
          to label %5510 unwind label %5464

5510:                                             ; preds = %5505
  br i1 %5509, label %5511, label %5513

5511:                                             ; preds = %5510
  %5512 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5457)
          to label %5513 unwind label %5464

5513:                                             ; preds = %5511, %5510
  %5514 = phi i1 [ false, %5510 ], [ %5512, %5511 ]
  %5515 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5506, i32 noundef %5508, ptr noundef nonnull align 8 dereferenceable(32) %416, i1 noundef zeroext %5514, i1 noundef zeroext false)
          to label %5516 unwind label %5464

5516:                                             ; preds = %5513
  %5517 = load i32, ptr %5507, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %5517, i32 noundef %5455)
          to label %5518 unwind label %5464

5518:                                             ; preds = %5516
  %5519 = load i32, ptr %5507, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %5519, i32 noundef %5457)
          to label %5520 unwind label %5464

5520:                                             ; preds = %5518
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %416) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %416) #8
  br label %.thread3374

5521:                                             ; preds = %5504, %5484, %5464
  %.pn2556 = phi { ptr, i32 } [ %5465, %5464 ], [ %.pn2553.pn, %5484 ], [ %.pn2550.pn, %5504 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %416) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %416) #8
  br label %6424

5522:                                             ; preds = %566
  %5523 = getelementptr inbounds i8, ptr %0, i64 2400
  %5524 = getelementptr inbounds i8, ptr %545, i64 4
  %5525 = tail call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %5523, ptr noundef nonnull align 4 dereferenceable(4) %5524)
  %5526 = getelementptr inbounds i8, ptr %0, i64 9396
  %5527 = load i8, ptr %5526, align 4, !tbaa !232, !range !123, !noundef !124
  %5528 = trunc nuw i8 %5527 to i1
  %5529 = load i32, ptr %545, align 4, !tbaa !125
  %5530 = load i32, ptr %5524, align 4, !tbaa !125
  %5531 = getelementptr inbounds i8, ptr %545, i64 8
  %5532 = load i32, ptr %5531, align 4, !tbaa !125
  %5533 = getelementptr inbounds i8, ptr %545, i64 12
  %5534 = load i32, ptr %5533, align 4, !tbaa !125
  %.str.1493..str.1494 = select i1 %5528, ptr @.str.1493, ptr @.str.1494
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5529, i32 noundef %5530, i32 noundef %5532, i32 noundef %5534, ptr noundef nonnull %.str.1493..str.1494)
  %5535 = getelementptr inbounds i8, ptr %0, i64 3176
  %5536 = load ptr, ptr %5535, align 8, !tbaa !227
  %5537 = getelementptr inbounds i8, ptr %5536, i64 8
  %5538 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %5537)
  tail call void @_ZN11spirv_cross8Compiler35flush_control_dependent_expressionsEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %5538)
  br label %.thread3374

5539:                                             ; preds = %566
  tail call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA24_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(24) @.str.1495)
  %5540 = getelementptr inbounds i8, ptr %0, i64 3176
  %5541 = load ptr, ptr %5540, align 8, !tbaa !227
  %5542 = getelementptr inbounds i8, ptr %5541, i64 8
  %5543 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %5542)
  tail call void @_ZN11spirv_cross8Compiler35flush_control_dependent_expressionsEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %5543)
  br label %.thread3374

5544:                                             ; preds = %566
  tail call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA18_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(18) @.str.1496)
  %5545 = getelementptr inbounds i8, ptr %0, i64 3176
  %5546 = load ptr, ptr %5545, align 8, !tbaa !227
  %5547 = getelementptr inbounds i8, ptr %5546, i64 8
  %5548 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %5547)
  tail call void @_ZN11spirv_cross8Compiler35flush_control_dependent_expressionsEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %5548)
  br label %.thread3374

5549:                                             ; preds = %566
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %425) #8
  %5550 = load i32, ptr %545, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %425, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5550)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %426) #8
  %5551 = getelementptr inbounds i8, ptr %545, i64 4
  %5552 = load i32, ptr %5551, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %426, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5552, i1 noundef zeroext true)
          to label %5553 unwind label %5586

5553:                                             ; preds = %5549
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %427) #8
  %5554 = getelementptr inbounds i8, ptr %545, i64 8
  %5555 = load i32, ptr %5554, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %427, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5555, i1 noundef zeroext true)
          to label %5556 unwind label %5588

5556:                                             ; preds = %5553
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %428) #8
  %5557 = getelementptr inbounds i8, ptr %545, i64 12
  %5558 = load i32, ptr %5557, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %428, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5558, i1 noundef zeroext true)
          to label %5559 unwind label %5590

5559:                                             ; preds = %5556
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %429) #8
  %5560 = getelementptr inbounds i8, ptr %545, i64 16
  %5561 = load i32, ptr %5560, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %429, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5561, i1 noundef zeroext true)
          to label %5562 unwind label %5592

5562:                                             ; preds = %5559
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %430) #8
  %5563 = getelementptr inbounds i8, ptr %545, i64 20
  %5564 = load i32, ptr %5563, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %430, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5564, i1 noundef zeroext true)
          to label %5565 unwind label %5594

5565:                                             ; preds = %5562
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %431) #8
  %5566 = getelementptr inbounds i8, ptr %545, i64 24
  %5567 = load i32, ptr %5566, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %431, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5567, i1 noundef zeroext true)
          to label %5568 unwind label %5596

5568:                                             ; preds = %5565
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %432) #8
  %5569 = getelementptr inbounds i8, ptr %545, i64 28
  %5570 = load i32, ptr %5569, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %432, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5570, i1 noundef zeroext true)
          to label %5571 unwind label %5598

5571:                                             ; preds = %5568
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %433) #8
  %5572 = getelementptr inbounds i8, ptr %545, i64 32
  %5573 = load i32, ptr %5572, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %433, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5573, i1 noundef zeroext true)
          to label %5574 unwind label %5600

5574:                                             ; preds = %5571
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %434) #8
  %5575 = getelementptr inbounds i8, ptr %545, i64 36
  %5576 = load i32, ptr %5575, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %434, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5576, i1 noundef zeroext true)
          to label %5577 unwind label %5602

5577:                                             ; preds = %5574
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %435) #8
  %5578 = getelementptr inbounds i8, ptr %545, i64 40
  %5579 = load i32, ptr %5578, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %435, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5579, i1 noundef zeroext true)
          to label %5580 unwind label %5604

5580:                                             ; preds = %5577
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA9_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_SA_SC_SA_SC_SA_SC_SA_SC_SA_SC_SA_SC_SA_SC_SA_SC_SA_SC_SA_SC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(9) @.str.1497, ptr noundef nonnull align 8 dereferenceable(32) %425, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %426, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %427, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %428, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %429, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %430, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %431, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %432, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %433, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %434, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %435, ptr noundef nonnull align 1 dereferenceable(3) @.str.751)
          to label %5581 unwind label %5606

5581:                                             ; preds = %5580
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %435) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %435) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %434) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %434) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %433) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %433) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %432) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %432) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %431) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %431) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %430) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %430) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %429) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %429) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %428) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %428) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %427) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %427) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %426) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %426) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %425) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %425) #8
  %5582 = getelementptr inbounds i8, ptr %0, i64 3176
  %5583 = load ptr, ptr %5582, align 8, !tbaa !227
  %5584 = getelementptr inbounds i8, ptr %5583, i64 8
  %5585 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %5584)
  call void @_ZN11spirv_cross8Compiler35flush_control_dependent_expressionsEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %5585)
  br label %.thread3374

5586:                                             ; preds = %5549
  %5587 = landingpad { ptr, i32 }
          cleanup
  br label %5617

5588:                                             ; preds = %5553
  %5589 = landingpad { ptr, i32 }
          cleanup
  br label %5616

5590:                                             ; preds = %5556
  %5591 = landingpad { ptr, i32 }
          cleanup
  br label %5615

5592:                                             ; preds = %5559
  %5593 = landingpad { ptr, i32 }
          cleanup
  br label %5614

5594:                                             ; preds = %5562
  %5595 = landingpad { ptr, i32 }
          cleanup
  br label %5613

5596:                                             ; preds = %5565
  %5597 = landingpad { ptr, i32 }
          cleanup
  br label %5612

5598:                                             ; preds = %5568
  %5599 = landingpad { ptr, i32 }
          cleanup
  br label %5611

5600:                                             ; preds = %5571
  %5601 = landingpad { ptr, i32 }
          cleanup
  br label %5610

5602:                                             ; preds = %5574
  %5603 = landingpad { ptr, i32 }
          cleanup
  br label %5609

5604:                                             ; preds = %5577
  %5605 = landingpad { ptr, i32 }
          cleanup
  br label %5608

5606:                                             ; preds = %5580
  %5607 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %435) #8
  br label %5608

5608:                                             ; preds = %5606, %5604
  %.pn2539 = phi { ptr, i32 } [ %5607, %5606 ], [ %5605, %5604 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %435) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %434) #8
  br label %5609

5609:                                             ; preds = %5608, %5602
  %.pn2539.pn = phi { ptr, i32 } [ %.pn2539, %5608 ], [ %5603, %5602 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %434) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %433) #8
  br label %5610

5610:                                             ; preds = %5609, %5600
  %.pn2539.pn.pn = phi { ptr, i32 } [ %.pn2539.pn, %5609 ], [ %5601, %5600 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %433) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %432) #8
  br label %5611

5611:                                             ; preds = %5610, %5598
  %.pn2539.pn.pn.pn = phi { ptr, i32 } [ %.pn2539.pn.pn, %5610 ], [ %5599, %5598 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %432) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %431) #8
  br label %5612

5612:                                             ; preds = %5611, %5596
  %.pn2539.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn2539.pn.pn.pn, %5611 ], [ %5597, %5596 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %431) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %430) #8
  br label %5613

5613:                                             ; preds = %5612, %5594
  %.pn2539.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn2539.pn.pn.pn.pn, %5612 ], [ %5595, %5594 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %430) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %429) #8
  br label %5614

5614:                                             ; preds = %5613, %5592
  %.pn2539.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn2539.pn.pn.pn.pn.pn, %5613 ], [ %5593, %5592 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %429) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %428) #8
  br label %5615

5615:                                             ; preds = %5614, %5590
  %.pn2539.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn2539.pn.pn.pn.pn.pn.pn, %5614 ], [ %5591, %5590 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %428) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %427) #8
  br label %5616

5616:                                             ; preds = %5615, %5588
  %.pn2539.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn2539.pn.pn.pn.pn.pn.pn.pn, %5615 ], [ %5589, %5588 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %427) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %426) #8
  br label %5617

5617:                                             ; preds = %5616, %5586
  %.pn2539.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn2539.pn.pn.pn.pn.pn.pn.pn.pn, %5616 ], [ %5587, %5586 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %426) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %425) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %425) #8
  br label %6424

5618:                                             ; preds = %566
  %5619 = getelementptr inbounds i8, ptr %545, i64 40
  %5620 = load i32, ptr %5619, align 4, !tbaa !125
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %436, i32 noundef %5620)
  %5621 = load i32, ptr %436, align 4
  %5622 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %5621, i32 noundef 30)
  br i1 %5622, label %5628, label %5623

5623:                                             ; preds = %5618
  %5624 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %5624, ptr noundef nonnull @.str.1498)
          to label %5625 unwind label %5626

5625:                                             ; preds = %5623
  call void @__cxa_throw(ptr nonnull %5624, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
  unreachable

5626:                                             ; preds = %5623
  %5627 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %5624) #8
  br label %6424

5628:                                             ; preds = %5618
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %437) #8
  %5629 = load i32, ptr %545, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL31to_non_uniform_aware_expressionB5cxx11Ej(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %437, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5629)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %438) #8
  %5630 = getelementptr inbounds i8, ptr %545, i64 4
  %5631 = load i32, ptr %5630, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %438, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5631, i1 noundef zeroext true)
          to label %5632 unwind label %5666

5632:                                             ; preds = %5628
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %439) #8
  %5633 = getelementptr inbounds i8, ptr %545, i64 8
  %5634 = load i32, ptr %5633, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %439, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5634, i1 noundef zeroext true)
          to label %5635 unwind label %5668

5635:                                             ; preds = %5632
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %440) #8
  %5636 = getelementptr inbounds i8, ptr %545, i64 12
  %5637 = load i32, ptr %5636, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %440, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5637, i1 noundef zeroext true)
          to label %5638 unwind label %5670

5638:                                             ; preds = %5635
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %441) #8
  %5639 = getelementptr inbounds i8, ptr %545, i64 16
  %5640 = load i32, ptr %5639, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %441, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5640, i1 noundef zeroext true)
          to label %5641 unwind label %5672

5641:                                             ; preds = %5638
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %442) #8
  %5642 = getelementptr inbounds i8, ptr %545, i64 20
  %5643 = load i32, ptr %5642, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %442, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5643, i1 noundef zeroext true)
          to label %5644 unwind label %5674

5644:                                             ; preds = %5641
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %443) #8
  %5645 = getelementptr inbounds i8, ptr %545, i64 24
  %5646 = load i32, ptr %5645, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %443, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5646, i1 noundef zeroext true)
          to label %5647 unwind label %5676

5647:                                             ; preds = %5644
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %444) #8
  %5648 = getelementptr inbounds i8, ptr %545, i64 28
  %5649 = load i32, ptr %5648, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %444, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5649, i1 noundef zeroext true)
          to label %5650 unwind label %5678

5650:                                             ; preds = %5647
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %445) #8
  %5651 = getelementptr inbounds i8, ptr %545, i64 32
  %5652 = load i32, ptr %5651, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %445, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5652, i1 noundef zeroext true)
          to label %5653 unwind label %5680

5653:                                             ; preds = %5650
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %446) #8
  %5654 = getelementptr inbounds i8, ptr %545, i64 36
  %5655 = load i32, ptr %5654, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %446, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5655, i1 noundef zeroext true)
          to label %5656 unwind label %5682

5656:                                             ; preds = %5653
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %447) #8
  %5657 = load i32, ptr %5619, align 4, !tbaa !125
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %448, i32 noundef %5657)
  %5658 = load i32, ptr %448, align 4
  %5659 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %5658, i32 noundef 30)
          to label %5660 unwind label %5684

5660:                                             ; preds = %5656
  store i32 %5659, ptr %447, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA13_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_SA_SC_SA_SC_SA_SC_SA_SC_SA_SC_SA_SC_SA_SC_SA_SC_SA_SC_jSC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(13) @.str.1499, ptr noundef nonnull align 8 dereferenceable(32) %437, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %438, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %439, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %440, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %441, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %442, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %443, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %444, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %445, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %446, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 4 dereferenceable(4) %447, ptr noundef nonnull align 1 dereferenceable(3) @.str.751)
          to label %5661 unwind label %5684

5661:                                             ; preds = %5660
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %447) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %446) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %446) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %445) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %445) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %444) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %444) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %443) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %443) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %442) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %442) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %441) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %441) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %440) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %440) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %439) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %439) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %438) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %438) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %437) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %437) #8
  %5662 = getelementptr inbounds i8, ptr %0, i64 3176
  %5663 = load ptr, ptr %5662, align 8, !tbaa !227
  %5664 = getelementptr inbounds i8, ptr %5663, i64 8
  %5665 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %5664)
  call void @_ZN11spirv_cross8Compiler35flush_control_dependent_expressionsEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %5665)
  br label %.thread3374

5666:                                             ; preds = %5628
  %5667 = landingpad { ptr, i32 }
          cleanup
  br label %5694

5668:                                             ; preds = %5632
  %5669 = landingpad { ptr, i32 }
          cleanup
  br label %5693

5670:                                             ; preds = %5635
  %5671 = landingpad { ptr, i32 }
          cleanup
  br label %5692

5672:                                             ; preds = %5638
  %5673 = landingpad { ptr, i32 }
          cleanup
  br label %5691

5674:                                             ; preds = %5641
  %5675 = landingpad { ptr, i32 }
          cleanup
  br label %5690

5676:                                             ; preds = %5644
  %5677 = landingpad { ptr, i32 }
          cleanup
  br label %5689

5678:                                             ; preds = %5647
  %5679 = landingpad { ptr, i32 }
          cleanup
  br label %5688

5680:                                             ; preds = %5650
  %5681 = landingpad { ptr, i32 }
          cleanup
  br label %5687

5682:                                             ; preds = %5653
  %5683 = landingpad { ptr, i32 }
          cleanup
  br label %5686

5684:                                             ; preds = %5660, %5656
  %5685 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %447) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %446) #8
  br label %5686

5686:                                             ; preds = %5684, %5682
  %.pn2529 = phi { ptr, i32 } [ %5685, %5684 ], [ %5683, %5682 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %446) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %445) #8
  br label %5687

5687:                                             ; preds = %5686, %5680
  %.pn2529.pn = phi { ptr, i32 } [ %.pn2529, %5686 ], [ %5681, %5680 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %445) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %444) #8
  br label %5688

5688:                                             ; preds = %5687, %5678
  %.pn2529.pn.pn = phi { ptr, i32 } [ %.pn2529.pn, %5687 ], [ %5679, %5678 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %444) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %443) #8
  br label %5689

5689:                                             ; preds = %5688, %5676
  %.pn2529.pn.pn.pn = phi { ptr, i32 } [ %.pn2529.pn.pn, %5688 ], [ %5677, %5676 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %443) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %442) #8
  br label %5690

5690:                                             ; preds = %5689, %5674
  %.pn2529.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn2529.pn.pn.pn, %5689 ], [ %5675, %5674 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %442) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %441) #8
  br label %5691

5691:                                             ; preds = %5690, %5672
  %.pn2529.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn2529.pn.pn.pn.pn, %5690 ], [ %5673, %5672 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %441) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %440) #8
  br label %5692

5692:                                             ; preds = %5691, %5670
  %.pn2529.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn2529.pn.pn.pn.pn.pn, %5691 ], [ %5671, %5670 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %440) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %439) #8
  br label %5693

5693:                                             ; preds = %5692, %5668
  %.pn2529.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn2529.pn.pn.pn.pn.pn.pn, %5692 ], [ %5669, %5668 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %439) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %438) #8
  br label %5694

5694:                                             ; preds = %5693, %5666
  %.pn2529.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn2529.pn.pn.pn.pn.pn.pn.pn, %5693 ], [ %5667, %5666 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %438) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %437) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %437) #8
  br label %6424

5695:                                             ; preds = %566
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %449) #8
  %5696 = load i32, ptr %545, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %449, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5696, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %450) #8
  %5697 = getelementptr inbounds i8, ptr %545, i64 4
  %5698 = load i32, ptr %5697, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %450, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5698, i1 noundef zeroext true)
          to label %5699 unwind label %5705

5699:                                             ; preds = %5695
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA19_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_SA_SC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(19) @.str.1500, ptr noundef nonnull align 8 dereferenceable(32) %449, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %450, ptr noundef nonnull align 1 dereferenceable(3) @.str.751)
          to label %5700 unwind label %5707

5700:                                             ; preds = %5699
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %450) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %450) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %449) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %449) #8
  %5701 = getelementptr inbounds i8, ptr %0, i64 3176
  %5702 = load ptr, ptr %5701, align 8, !tbaa !227
  %5703 = getelementptr inbounds i8, ptr %5702, i64 8
  %5704 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %5703)
  call void @_ZN11spirv_cross8Compiler35flush_control_dependent_expressionsEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %5704)
  br label %.thread3374

5705:                                             ; preds = %5695
  %5706 = landingpad { ptr, i32 }
          cleanup
  br label %5709

5707:                                             ; preds = %5699
  %5708 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %450) #8
  br label %5709

5709:                                             ; preds = %5707, %5705
  %.pn2527 = phi { ptr, i32 } [ %5708, %5707 ], [ %5706, %5705 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %450) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %449) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %449) #8
  br label %6424

5710:                                             ; preds = %566
  %5711 = getelementptr inbounds i8, ptr %545, i64 4
  %5712 = load i32, ptr %5711, align 4, !tbaa !125
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %451, i32 noundef %5712)
  %5713 = load i32, ptr %451, align 4
  %5714 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %5713, i32 noundef 30)
  br i1 %5714, label %5720, label %5715

5715:                                             ; preds = %5710
  %5716 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %5716, ptr noundef nonnull @.str.1501)
          to label %5717 unwind label %5718

5717:                                             ; preds = %5715
  call void @__cxa_throw(ptr nonnull %5716, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
  unreachable

5718:                                             ; preds = %5715
  %5719 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %5716) #8
  br label %6424

5720:                                             ; preds = %5710
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %452) #8
  %5721 = load i32, ptr %545, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %452, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5721, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %453) #8
  %5722 = load i32, ptr %5711, align 4, !tbaa !125
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %454, i32 noundef %5722)
  %5723 = load i32, ptr %454, align 4
  %5724 = invoke noundef i32 @_ZNK11spirv_cross8Compiler14get_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %5723, i32 noundef 30)
          to label %5725 unwind label %5731

5725:                                             ; preds = %5720
  store i32 %5724, ptr %453, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA20_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_jSC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(20) @.str.1502, ptr noundef nonnull align 8 dereferenceable(32) %452, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 4 dereferenceable(4) %453, ptr noundef nonnull align 1 dereferenceable(3) @.str.751)
          to label %5726 unwind label %5731

5726:                                             ; preds = %5725
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %453) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %452) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %452) #8
  %5727 = getelementptr inbounds i8, ptr %0, i64 3176
  %5728 = load ptr, ptr %5727, align 8, !tbaa !227
  %5729 = getelementptr inbounds i8, ptr %5728, i64 8
  %5730 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %5729)
  call void @_ZN11spirv_cross8Compiler35flush_control_dependent_expressionsEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %5730)
  br label %.thread3374

5731:                                             ; preds = %5725, %5720
  %5732 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %453) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %452) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %452) #8
  br label %6424

5733:                                             ; preds = %566
  %5734 = load i32, ptr %545, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5734)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %455) #8
  %5735 = load i32, ptr %545, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %455, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5735, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %456) #8
  %5736 = getelementptr inbounds i8, ptr %545, i64 4
  %5737 = load i32, ptr %5736, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %456, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5737, i1 noundef zeroext true)
          to label %5738 unwind label %5758

5738:                                             ; preds = %5733
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %457) #8
  %5739 = getelementptr inbounds i8, ptr %545, i64 8
  %5740 = load i32, ptr %5739, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %457, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5740, i1 noundef zeroext true)
          to label %5741 unwind label %5760

5741:                                             ; preds = %5738
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %458) #8
  %5742 = getelementptr inbounds i8, ptr %545, i64 12
  %5743 = load i32, ptr %5742, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %458, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5743, i1 noundef zeroext true)
          to label %5744 unwind label %5762

5744:                                             ; preds = %5741
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %459) #8
  %5745 = getelementptr inbounds i8, ptr %545, i64 16
  %5746 = load i32, ptr %5745, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %459, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5746, i1 noundef zeroext true)
          to label %5747 unwind label %5764

5747:                                             ; preds = %5744
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %460) #8
  %5748 = getelementptr inbounds i8, ptr %545, i64 20
  %5749 = load i32, ptr %5748, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %460, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5749, i1 noundef zeroext true)
          to label %5750 unwind label %5766

5750:                                             ; preds = %5747
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %461) #8
  %5751 = getelementptr inbounds i8, ptr %545, i64 24
  %5752 = load i32, ptr %5751, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %461, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5752, i1 noundef zeroext true)
          to label %5753 unwind label %5768

5753:                                             ; preds = %5750
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %462) #8
  %5754 = getelementptr inbounds i8, ptr %545, i64 28
  %5755 = load i32, ptr %5754, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %462, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5755, i1 noundef zeroext true)
          to label %5756 unwind label %5770

5756:                                             ; preds = %5753
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA23_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_SA_SC_SA_SC_SA_SC_SA_SC_SA_SC_SA_SC_SA_SC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(23) @.str.1503, ptr noundef nonnull align 8 dereferenceable(32) %455, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %456, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %457, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %458, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %459, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %460, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %461, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %462, ptr noundef nonnull align 1 dereferenceable(3) @.str.751)
          to label %5757 unwind label %5772

5757:                                             ; preds = %5756
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %462) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %462) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %461) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %461) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %460) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %460) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %459) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %459) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %458) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %458) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %457) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %457) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %456) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %456) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %455) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %455) #8
  br label %.thread3374

5758:                                             ; preds = %5733
  %5759 = landingpad { ptr, i32 }
          cleanup
  br label %5780

5760:                                             ; preds = %5738
  %5761 = landingpad { ptr, i32 }
          cleanup
  br label %5779

5762:                                             ; preds = %5741
  %5763 = landingpad { ptr, i32 }
          cleanup
  br label %5778

5764:                                             ; preds = %5744
  %5765 = landingpad { ptr, i32 }
          cleanup
  br label %5777

5766:                                             ; preds = %5747
  %5767 = landingpad { ptr, i32 }
          cleanup
  br label %5776

5768:                                             ; preds = %5750
  %5769 = landingpad { ptr, i32 }
          cleanup
  br label %5775

5770:                                             ; preds = %5753
  %5771 = landingpad { ptr, i32 }
          cleanup
  br label %5774

5772:                                             ; preds = %5756
  %5773 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %462) #8
  br label %5774

5774:                                             ; preds = %5772, %5770
  %.pn2519 = phi { ptr, i32 } [ %5773, %5772 ], [ %5771, %5770 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %462) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %461) #8
  br label %5775

5775:                                             ; preds = %5774, %5768
  %.pn2519.pn = phi { ptr, i32 } [ %.pn2519, %5774 ], [ %5769, %5768 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %461) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %460) #8
  br label %5776

5776:                                             ; preds = %5775, %5766
  %.pn2519.pn.pn = phi { ptr, i32 } [ %.pn2519.pn, %5775 ], [ %5767, %5766 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %460) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %459) #8
  br label %5777

5777:                                             ; preds = %5776, %5764
  %.pn2519.pn.pn.pn = phi { ptr, i32 } [ %.pn2519.pn.pn, %5776 ], [ %5765, %5764 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %459) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %458) #8
  br label %5778

5778:                                             ; preds = %5777, %5762
  %.pn2519.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn2519.pn.pn.pn, %5777 ], [ %5763, %5762 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %458) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %457) #8
  br label %5779

5779:                                             ; preds = %5778, %5760
  %.pn2519.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn2519.pn.pn.pn.pn, %5778 ], [ %5761, %5760 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %457) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %456) #8
  br label %5780

5780:                                             ; preds = %5779, %5758
  %.pn2519.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn2519.pn.pn.pn.pn.pn, %5779 ], [ %5759, %5758 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %456) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %455) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %455) #8
  br label %6424

5781:                                             ; preds = %566
  %5782 = load i32, ptr %545, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5782)
  %5783 = load i32, ptr %545, align 4, !tbaa !125
  %5784 = getelementptr inbounds i8, ptr %545, i64 4
  %5785 = load i32, ptr %5784, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %463) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %464) #8
  %5786 = getelementptr inbounds i8, ptr %545, i64 8
  %5787 = load i32, ptr %5786, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %464, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5787, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJRA20_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %463, ptr noundef nonnull align 1 dereferenceable(20) @.str.1504, ptr noundef nonnull align 8 dereferenceable(32) %464, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %5788 unwind label %5791

5788:                                             ; preds = %5781
  %5789 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5783, i32 noundef %5785, ptr noundef nonnull align 8 dereferenceable(32) %463, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %5790 unwind label %5793

5790:                                             ; preds = %5788
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %463) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %464) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %464) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %463) #8
  br label %.thread3374

5791:                                             ; preds = %5781
  %5792 = landingpad { ptr, i32 }
          cleanup
  br label %5795

5793:                                             ; preds = %5788
  %5794 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %463) #8
  br label %5795

5795:                                             ; preds = %5793, %5791
  %.pn2517 = phi { ptr, i32 } [ %5794, %5793 ], [ %5792, %5791 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %464) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %464) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %463) #8
  br label %6424

5796:                                             ; preds = %566
  %5797 = load i32, ptr %545, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5797)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %465) #8
  %5798 = load i32, ptr %545, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %465, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5798, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA22_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(22) @.str.1505, ptr noundef nonnull align 8 dereferenceable(32) %465, ptr noundef nonnull align 1 dereferenceable(3) @.str.751)
          to label %5799 unwind label %5800

5799:                                             ; preds = %5796
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %465) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %465) #8
  br label %.thread3374

5800:                                             ; preds = %5796
  %5801 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %465) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %465) #8
  br label %6424

5802:                                             ; preds = %566
  %5803 = load i32, ptr %545, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5803)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %466) #8
  %5804 = load i32, ptr %545, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %466, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5804, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %467) #8
  %5805 = getelementptr inbounds i8, ptr %545, i64 4
  %5806 = load i32, ptr %5805, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %467, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5806, i1 noundef zeroext true)
          to label %5807 unwind label %5809

5807:                                             ; preds = %5802
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA33_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_SA_SC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(33) @.str.1506, ptr noundef nonnull align 8 dereferenceable(32) %466, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %467, ptr noundef nonnull align 1 dereferenceable(3) @.str.751)
          to label %5808 unwind label %5811

5808:                                             ; preds = %5807
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %467) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %467) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %466) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %466) #8
  br label %.thread3374

5809:                                             ; preds = %5802
  %5810 = landingpad { ptr, i32 }
          cleanup
  br label %5813

5811:                                             ; preds = %5807
  %5812 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %467) #8
  br label %5813

5813:                                             ; preds = %5811, %5809
  %.pn2515 = phi { ptr, i32 } [ %5812, %5811 ], [ %5810, %5809 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %467) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %466) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %466) #8
  br label %6424

5814:                                             ; preds = %566
  %5815 = load i32, ptr %545, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5815)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %468) #8
  %5816 = load i32, ptr %545, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %468, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5816, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA32_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(32) @.str.1507, ptr noundef nonnull align 8 dereferenceable(32) %468, ptr noundef nonnull align 1 dereferenceable(3) @.str.751)
          to label %5817 unwind label %5818

5817:                                             ; preds = %5814
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %468) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %468) #8
  br label %.thread3374

5818:                                             ; preds = %5814
  %5819 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %468) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %468) #8
  br label %6424

5820:                                             ; preds = %566
  %5821 = getelementptr inbounds i8, ptr %545, i64 8
  %5822 = load i32, ptr %5821, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5822)
  %5823 = load i32, ptr %545, align 4, !tbaa !125
  %5824 = getelementptr inbounds i8, ptr %545, i64 4
  %5825 = load i32, ptr %5824, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %469) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %470) #8
  %5826 = load i32, ptr %5821, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %470, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5826, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJRA23_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %469, ptr noundef nonnull align 1 dereferenceable(23) @.str.1508, ptr noundef nonnull align 8 dereferenceable(32) %470, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %5827 unwind label %5830

5827:                                             ; preds = %5820
  %5828 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5823, i32 noundef %5825, ptr noundef nonnull align 8 dereferenceable(32) %469, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %5829 unwind label %5832

5829:                                             ; preds = %5827
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %469) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %470) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %470) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %469) #8
  br label %.thread3374

5830:                                             ; preds = %5820
  %5831 = landingpad { ptr, i32 }
          cleanup
  br label %5834

5832:                                             ; preds = %5827
  %5833 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %469) #8
  br label %5834

5834:                                             ; preds = %5832, %5830
  %.pn2513 = phi { ptr, i32 } [ %5833, %5832 ], [ %5831, %5830 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %470) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %470) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %469) #8
  br label %6424

5835:                                             ; preds = %566
  %5836 = getelementptr inbounds i8, ptr %545, i64 8
  %5837 = load i32, ptr %5836, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5837)
  %5838 = load i32, ptr %545, align 4, !tbaa !125
  %5839 = getelementptr inbounds i8, ptr %545, i64 4
  %5840 = load i32, ptr %5839, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %471) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %472) #8
  %5841 = load i32, ptr %5836, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %472, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5841, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJRA24_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %471, ptr noundef nonnull align 1 dereferenceable(24) @.str.1509, ptr noundef nonnull align 8 dereferenceable(32) %472, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %5842 unwind label %5845

5842:                                             ; preds = %5835
  %5843 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5838, i32 noundef %5840, ptr noundef nonnull align 8 dereferenceable(32) %471, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %5844 unwind label %5847

5844:                                             ; preds = %5842
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %471) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %472) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %472) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %471) #8
  br label %.thread3374

5845:                                             ; preds = %5835
  %5846 = landingpad { ptr, i32 }
          cleanup
  br label %5849

5847:                                             ; preds = %5842
  %5848 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %471) #8
  br label %5849

5849:                                             ; preds = %5847, %5845
  %.pn2511 = phi { ptr, i32 } [ %5848, %5847 ], [ %5846, %5845 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %472) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %472) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %471) #8
  br label %6424

5850:                                             ; preds = %566
  %5851 = getelementptr inbounds i8, ptr %545, i64 8
  %5852 = load i32, ptr %5851, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5852)
  %5853 = load i32, ptr %545, align 4, !tbaa !125
  %5854 = getelementptr inbounds i8, ptr %545, i64 4
  %5855 = load i32, ptr %5854, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %473) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %474) #8
  %5856 = load i32, ptr %5851, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %474, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5856, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJRA30_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %473, ptr noundef nonnull align 1 dereferenceable(30) @.str.1510, ptr noundef nonnull align 8 dereferenceable(32) %474, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %5857 unwind label %5860

5857:                                             ; preds = %5850
  %5858 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5853, i32 noundef %5855, ptr noundef nonnull align 8 dereferenceable(32) %473, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %5859 unwind label %5862

5859:                                             ; preds = %5857
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %473) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %474) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %474) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %473) #8
  br label %.thread3374

5860:                                             ; preds = %5850
  %5861 = landingpad { ptr, i32 }
          cleanup
  br label %5864

5862:                                             ; preds = %5857
  %5863 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %473) #8
  br label %5864

5864:                                             ; preds = %5862, %5860
  %.pn2509 = phi { ptr, i32 } [ %5863, %5862 ], [ %5861, %5860 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %474) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %474) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %473) #8
  br label %6424

5865:                                             ; preds = %566
  %5866 = getelementptr inbounds i8, ptr %545, i64 8
  %5867 = load i32, ptr %5866, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5867)
  %5868 = load i32, ptr %545, align 4, !tbaa !125
  %5869 = getelementptr inbounds i8, ptr %545, i64 4
  %5870 = load i32, ptr %5869, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %475) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %476) #8
  %5871 = load i32, ptr %5866, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %476, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5871, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJRA33_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %475, ptr noundef nonnull align 1 dereferenceable(33) @.str.1511, ptr noundef nonnull align 8 dereferenceable(32) %476, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %5872 unwind label %5875

5872:                                             ; preds = %5865
  %5873 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5868, i32 noundef %5870, ptr noundef nonnull align 8 dereferenceable(32) %475, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %5874 unwind label %5877

5874:                                             ; preds = %5872
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %475) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %476) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %476) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %475) #8
  br label %.thread3374

5875:                                             ; preds = %5865
  %5876 = landingpad { ptr, i32 }
          cleanup
  br label %5879

5877:                                             ; preds = %5872
  %5878 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %475) #8
  br label %5879

5879:                                             ; preds = %5877, %5875
  %.pn2507 = phi { ptr, i32 } [ %5878, %5877 ], [ %5876, %5875 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %476) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %476) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %475) #8
  br label %6424

5880:                                             ; preds = %566
  %5881 = getelementptr inbounds i8, ptr %545, i64 8
  %5882 = load i32, ptr %5881, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5882)
  %5883 = load i32, ptr %545, align 4, !tbaa !125
  %5884 = getelementptr inbounds i8, ptr %545, i64 4
  %5885 = load i32, ptr %5884, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %477) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %478) #8
  %5886 = load i32, ptr %5881, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %478, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5886, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJRA47_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %477, ptr noundef nonnull align 1 dereferenceable(47) @.str.1512, ptr noundef nonnull align 8 dereferenceable(32) %478, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %5887 unwind label %5890

5887:                                             ; preds = %5880
  %5888 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5883, i32 noundef %5885, ptr noundef nonnull align 8 dereferenceable(32) %477, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %5889 unwind label %5892

5889:                                             ; preds = %5887
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %477) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %478) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %478) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %477) #8
  br label %.thread3374

5890:                                             ; preds = %5880
  %5891 = landingpad { ptr, i32 }
          cleanup
  br label %5894

5892:                                             ; preds = %5887
  %5893 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %477) #8
  br label %5894

5894:                                             ; preds = %5892, %5890
  %.pn2505 = phi { ptr, i32 } [ %5893, %5892 ], [ %5891, %5890 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %478) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %478) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %477) #8
  br label %6424

5895:                                             ; preds = %566
  %5896 = getelementptr inbounds i8, ptr %545, i64 8
  %5897 = load i32, ptr %5896, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5897)
  %5898 = load i32, ptr %545, align 4, !tbaa !125
  %5899 = getelementptr inbounds i8, ptr %545, i64 4
  %5900 = load i32, ptr %5899, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %479) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %480) #8
  %5901 = load i32, ptr %5896, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %480, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5901, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %481) #8
  %5902 = getelementptr inbounds i8, ptr %545, i64 12
  %5903 = load i32, ptr %5902, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %481, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5903, i1 noundef zeroext true)
          to label %5904 unwind label %5908

5904:                                             ; preds = %5895
  invoke void @_ZN11spirv_cross4joinIJRA32_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RA6_S1_S9_SB_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %479, ptr noundef nonnull align 1 dereferenceable(32) @.str.1513, ptr noundef nonnull align 8 dereferenceable(32) %480, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 1 dereferenceable(6) @.str.1514, ptr noundef nonnull align 8 dereferenceable(32) %481, ptr noundef nonnull align 1 dereferenceable(3) @.str.1016)
          to label %5905 unwind label %5910

5905:                                             ; preds = %5904
  %5906 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5898, i32 noundef %5900, ptr noundef nonnull align 8 dereferenceable(32) %479, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %5907 unwind label %5912

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

5908:                                             ; preds = %5895
  %5909 = landingpad { ptr, i32 }
          cleanup
  br label %5915

5910:                                             ; preds = %5904
  %5911 = landingpad { ptr, i32 }
          cleanup
  br label %5914

5912:                                             ; preds = %5905
  %5913 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %479) #8
  br label %5914

5914:                                             ; preds = %5912, %5910
  %.pn2502 = phi { ptr, i32 } [ %5913, %5912 ], [ %5911, %5910 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %481) #8
  br label %5915

5915:                                             ; preds = %5914, %5908
  %.pn2502.pn = phi { ptr, i32 } [ %.pn2502, %5914 ], [ %5909, %5908 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %481) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %480) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %480) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %479) #8
  br label %6424

5916:                                             ; preds = %566
  %5917 = getelementptr inbounds i8, ptr %545, i64 8
  %5918 = load i32, ptr %5917, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5918)
  %5919 = load i32, ptr %545, align 4, !tbaa !125
  %5920 = getelementptr inbounds i8, ptr %545, i64 4
  %5921 = load i32, ptr %5920, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %482) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %483) #8
  %5922 = load i32, ptr %5917, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %483, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5922, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %484) #8
  %5923 = getelementptr inbounds i8, ptr %545, i64 12
  %5924 = load i32, ptr %5923, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %484, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5924, i1 noundef zeroext true)
          to label %5925 unwind label %5929

5925:                                             ; preds = %5916
  invoke void @_ZN11spirv_cross4joinIJRA29_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RA6_S1_S9_SB_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %482, ptr noundef nonnull align 1 dereferenceable(29) @.str.1515, ptr noundef nonnull align 8 dereferenceable(32) %483, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 1 dereferenceable(6) @.str.1514, ptr noundef nonnull align 8 dereferenceable(32) %484, ptr noundef nonnull align 1 dereferenceable(3) @.str.1016)
          to label %5926 unwind label %5931

5926:                                             ; preds = %5925
  %5927 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5919, i32 noundef %5921, ptr noundef nonnull align 8 dereferenceable(32) %482, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %5928 unwind label %5933

5928:                                             ; preds = %5926
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %482) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %484) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %484) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %483) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %483) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %482) #8
  br label %.thread3374

5929:                                             ; preds = %5916
  %5930 = landingpad { ptr, i32 }
          cleanup
  br label %5936

5931:                                             ; preds = %5925
  %5932 = landingpad { ptr, i32 }
          cleanup
  br label %5935

5933:                                             ; preds = %5926
  %5934 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %482) #8
  br label %5935

5935:                                             ; preds = %5933, %5931
  %.pn2499 = phi { ptr, i32 } [ %5934, %5933 ], [ %5932, %5931 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %484) #8
  br label %5936

5936:                                             ; preds = %5935, %5929
  %.pn2499.pn = phi { ptr, i32 } [ %.pn2499, %5935 ], [ %5930, %5929 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %484) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %483) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %483) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %482) #8
  br label %6424

5937:                                             ; preds = %566
  %5938 = getelementptr inbounds i8, ptr %545, i64 8
  %5939 = load i32, ptr %5938, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5939)
  %5940 = load i32, ptr %545, align 4, !tbaa !125
  %5941 = getelementptr inbounds i8, ptr %545, i64 4
  %5942 = load i32, ptr %5941, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %485) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %486) #8
  %5943 = load i32, ptr %5938, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %486, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5943, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %487) #8
  %5944 = getelementptr inbounds i8, ptr %545, i64 12
  %5945 = load i32, ptr %5944, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %487, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5945, i1 noundef zeroext true)
          to label %5946 unwind label %5950

5946:                                             ; preds = %5937
  invoke void @_ZN11spirv_cross4joinIJRA47_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RA6_S1_S9_SB_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %485, ptr noundef nonnull align 1 dereferenceable(47) @.str.1516, ptr noundef nonnull align 8 dereferenceable(32) %486, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 1 dereferenceable(6) @.str.1514, ptr noundef nonnull align 8 dereferenceable(32) %487, ptr noundef nonnull align 1 dereferenceable(3) @.str.1016)
          to label %5947 unwind label %5952

5947:                                             ; preds = %5946
  %5948 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5940, i32 noundef %5942, ptr noundef nonnull align 8 dereferenceable(32) %485, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %5949 unwind label %5954

5949:                                             ; preds = %5947
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %485) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %487) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %487) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %486) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %486) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %485) #8
  br label %.thread3374

5950:                                             ; preds = %5937
  %5951 = landingpad { ptr, i32 }
          cleanup
  br label %5957

5952:                                             ; preds = %5946
  %5953 = landingpad { ptr, i32 }
          cleanup
  br label %5956

5954:                                             ; preds = %5947
  %5955 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %485) #8
  br label %5956

5956:                                             ; preds = %5954, %5952
  %.pn2496 = phi { ptr, i32 } [ %5955, %5954 ], [ %5953, %5952 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %487) #8
  br label %5957

5957:                                             ; preds = %5956, %5950
  %.pn2496.pn = phi { ptr, i32 } [ %.pn2496, %5956 ], [ %5951, %5950 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %487) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %486) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %486) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %485) #8
  br label %6424

5958:                                             ; preds = %566
  %5959 = getelementptr inbounds i8, ptr %545, i64 8
  %5960 = load i32, ptr %5959, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5960)
  %5961 = load i32, ptr %545, align 4, !tbaa !125
  %5962 = getelementptr inbounds i8, ptr %545, i64 4
  %5963 = load i32, ptr %5962, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %488) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %489) #8
  %5964 = load i32, ptr %5959, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %489, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5964, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %490) #8
  %5965 = getelementptr inbounds i8, ptr %545, i64 12
  %5966 = load i32, ptr %5965, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %490, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5966, i1 noundef zeroext true)
          to label %5967 unwind label %5971

5967:                                             ; preds = %5958
  invoke void @_ZN11spirv_cross4joinIJRA38_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RA6_S1_S9_SB_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %488, ptr noundef nonnull align 1 dereferenceable(38) @.str.1517, ptr noundef nonnull align 8 dereferenceable(32) %489, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 1 dereferenceable(6) @.str.1514, ptr noundef nonnull align 8 dereferenceable(32) %490, ptr noundef nonnull align 1 dereferenceable(3) @.str.1016)
          to label %5968 unwind label %5973

5968:                                             ; preds = %5967
  %5969 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5961, i32 noundef %5963, ptr noundef nonnull align 8 dereferenceable(32) %488, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %5970 unwind label %5975

5970:                                             ; preds = %5968
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %488) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %490) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %490) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %489) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %489) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %488) #8
  br label %.thread3374

5971:                                             ; preds = %5958
  %5972 = landingpad { ptr, i32 }
          cleanup
  br label %5978

5973:                                             ; preds = %5967
  %5974 = landingpad { ptr, i32 }
          cleanup
  br label %5977

5975:                                             ; preds = %5968
  %5976 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %488) #8
  br label %5977

5977:                                             ; preds = %5975, %5973
  %.pn2493 = phi { ptr, i32 } [ %5976, %5975 ], [ %5974, %5973 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %490) #8
  br label %5978

5978:                                             ; preds = %5977, %5971
  %.pn2493.pn = phi { ptr, i32 } [ %.pn2493, %5977 ], [ %5972, %5971 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %490) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %489) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %489) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %488) #8
  br label %6424

5979:                                             ; preds = %566
  %5980 = getelementptr inbounds i8, ptr %545, i64 8
  %5981 = load i32, ptr %5980, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5981)
  %5982 = load i32, ptr %545, align 4, !tbaa !125
  %5983 = getelementptr inbounds i8, ptr %545, i64 4
  %5984 = load i32, ptr %5983, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %491) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %492) #8
  %5985 = load i32, ptr %5980, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %492, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5985, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %493) #8
  %5986 = getelementptr inbounds i8, ptr %545, i64 12
  %5987 = load i32, ptr %5986, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %493, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5987, i1 noundef zeroext true)
          to label %5988 unwind label %5992

5988:                                             ; preds = %5979
  invoke void @_ZN11spirv_cross4joinIJRA66_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RA6_S1_S9_SB_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %491, ptr noundef nonnull align 1 dereferenceable(66) @.str.1518, ptr noundef nonnull align 8 dereferenceable(32) %492, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 1 dereferenceable(6) @.str.1514, ptr noundef nonnull align 8 dereferenceable(32) %493, ptr noundef nonnull align 1 dereferenceable(3) @.str.1016)
          to label %5989 unwind label %5994

5989:                                             ; preds = %5988
  %5990 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %5982, i32 noundef %5984, ptr noundef nonnull align 8 dereferenceable(32) %491, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %5991 unwind label %5996

5991:                                             ; preds = %5989
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %491) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %493) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %493) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %492) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %492) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %491) #8
  br label %.thread3374

5992:                                             ; preds = %5979
  %5993 = landingpad { ptr, i32 }
          cleanup
  br label %5999

5994:                                             ; preds = %5988
  %5995 = landingpad { ptr, i32 }
          cleanup
  br label %5998

5996:                                             ; preds = %5989
  %5997 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %491) #8
  br label %5998

5998:                                             ; preds = %5996, %5994
  %.pn2490 = phi { ptr, i32 } [ %5997, %5996 ], [ %5995, %5994 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %493) #8
  br label %5999

5999:                                             ; preds = %5998, %5992
  %.pn2490.pn = phi { ptr, i32 } [ %.pn2490, %5998 ], [ %5993, %5992 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %493) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %492) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %492) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %491) #8
  br label %6424

6000:                                             ; preds = %566
  %6001 = getelementptr inbounds i8, ptr %545, i64 8
  %6002 = load i32, ptr %6001, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %6002)
  %6003 = load i32, ptr %545, align 4, !tbaa !125
  %6004 = getelementptr inbounds i8, ptr %545, i64 4
  %6005 = load i32, ptr %6004, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %494) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %495) #8
  %6006 = load i32, ptr %6001, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %495, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %6006, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %496) #8
  %6007 = getelementptr inbounds i8, ptr %545, i64 12
  %6008 = load i32, ptr %6007, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %496, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %6008, i1 noundef zeroext true)
          to label %6009 unwind label %6013

6009:                                             ; preds = %6000
  invoke void @_ZN11spirv_cross4joinIJRA41_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RA6_S1_S9_SB_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %494, ptr noundef nonnull align 1 dereferenceable(41) @.str.1519, ptr noundef nonnull align 8 dereferenceable(32) %495, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 1 dereferenceable(6) @.str.1514, ptr noundef nonnull align 8 dereferenceable(32) %496, ptr noundef nonnull align 1 dereferenceable(3) @.str.1016)
          to label %6010 unwind label %6015

6010:                                             ; preds = %6009
  %6011 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %6003, i32 noundef %6005, ptr noundef nonnull align 8 dereferenceable(32) %494, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %6012 unwind label %6017

6012:                                             ; preds = %6010
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %494) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %496) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %496) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %495) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %495) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %494) #8
  br label %.thread3374

6013:                                             ; preds = %6000
  %6014 = landingpad { ptr, i32 }
          cleanup
  br label %6020

6015:                                             ; preds = %6009
  %6016 = landingpad { ptr, i32 }
          cleanup
  br label %6019

6017:                                             ; preds = %6010
  %6018 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %494) #8
  br label %6019

6019:                                             ; preds = %6017, %6015
  %.pn2487 = phi { ptr, i32 } [ %6018, %6017 ], [ %6016, %6015 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %496) #8
  br label %6020

6020:                                             ; preds = %6019, %6013
  %.pn2487.pn = phi { ptr, i32 } [ %.pn2487, %6019 ], [ %6014, %6013 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %496) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %495) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %495) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %494) #8
  br label %6424

6021:                                             ; preds = %566
  %6022 = getelementptr inbounds i8, ptr %545, i64 8
  %6023 = load i32, ptr %6022, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %6023)
  %6024 = load i32, ptr %545, align 4, !tbaa !125
  %6025 = getelementptr inbounds i8, ptr %545, i64 4
  %6026 = load i32, ptr %6025, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %497) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %498) #8
  %6027 = load i32, ptr %6022, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %498, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %6027, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %499) #8
  %6028 = getelementptr inbounds i8, ptr %545, i64 12
  %6029 = load i32, ptr %6028, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %499, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %6029, i1 noundef zeroext true)
          to label %6030 unwind label %6034

6030:                                             ; preds = %6021
  invoke void @_ZN11spirv_cross4joinIJRA42_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RA6_S1_S9_SB_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %497, ptr noundef nonnull align 1 dereferenceable(42) @.str.1520, ptr noundef nonnull align 8 dereferenceable(32) %498, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 1 dereferenceable(6) @.str.1514, ptr noundef nonnull align 8 dereferenceable(32) %499, ptr noundef nonnull align 1 dereferenceable(3) @.str.1016)
          to label %6031 unwind label %6036

6031:                                             ; preds = %6030
  %6032 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %6024, i32 noundef %6026, ptr noundef nonnull align 8 dereferenceable(32) %497, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %6033 unwind label %6038

6033:                                             ; preds = %6031
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %497) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %499) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %499) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %498) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %498) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %497) #8
  br label %.thread3374

6034:                                             ; preds = %6021
  %6035 = landingpad { ptr, i32 }
          cleanup
  br label %6041

6036:                                             ; preds = %6030
  %6037 = landingpad { ptr, i32 }
          cleanup
  br label %6040

6038:                                             ; preds = %6031
  %6039 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %497) #8
  br label %6040

6040:                                             ; preds = %6038, %6036
  %.pn2484 = phi { ptr, i32 } [ %6039, %6038 ], [ %6037, %6036 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %499) #8
  br label %6041

6041:                                             ; preds = %6040, %6034
  %.pn2484.pn = phi { ptr, i32 } [ %.pn2484, %6040 ], [ %6035, %6034 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %499) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %498) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %498) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %497) #8
  br label %6424

6042:                                             ; preds = %566
  %6043 = getelementptr inbounds i8, ptr %545, i64 8
  %6044 = load i32, ptr %6043, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %6044)
  %6045 = load i32, ptr %545, align 4, !tbaa !125
  %6046 = getelementptr inbounds i8, ptr %545, i64 4
  %6047 = load i32, ptr %6046, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %500) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %501) #8
  %6048 = load i32, ptr %6043, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %501, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %6048, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %502) #8
  %6049 = getelementptr inbounds i8, ptr %545, i64 12
  %6050 = load i32, ptr %6049, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %502, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %6050, i1 noundef zeroext true)
          to label %6051 unwind label %6055

6051:                                             ; preds = %6042
  invoke void @_ZN11spirv_cross4joinIJRA40_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RA6_S1_S9_SB_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %500, ptr noundef nonnull align 1 dereferenceable(40) @.str.1521, ptr noundef nonnull align 8 dereferenceable(32) %501, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 1 dereferenceable(6) @.str.1514, ptr noundef nonnull align 8 dereferenceable(32) %502, ptr noundef nonnull align 1 dereferenceable(3) @.str.1016)
          to label %6052 unwind label %6057

6052:                                             ; preds = %6051
  %6053 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %6045, i32 noundef %6047, ptr noundef nonnull align 8 dereferenceable(32) %500, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %6054 unwind label %6059

6054:                                             ; preds = %6052
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %500) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %502) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %502) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %501) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %501) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %500) #8
  br label %.thread3374

6055:                                             ; preds = %6042
  %6056 = landingpad { ptr, i32 }
          cleanup
  br label %6062

6057:                                             ; preds = %6051
  %6058 = landingpad { ptr, i32 }
          cleanup
  br label %6061

6059:                                             ; preds = %6052
  %6060 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %500) #8
  br label %6061

6061:                                             ; preds = %6059, %6057
  %.pn2481 = phi { ptr, i32 } [ %6060, %6059 ], [ %6058, %6057 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %502) #8
  br label %6062

6062:                                             ; preds = %6061, %6055
  %.pn2481.pn = phi { ptr, i32 } [ %.pn2481, %6061 ], [ %6056, %6055 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %502) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %501) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %501) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %500) #8
  br label %6424

6063:                                             ; preds = %566
  %6064 = getelementptr inbounds i8, ptr %545, i64 8
  %6065 = load i32, ptr %6064, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %6065)
  %6066 = load i32, ptr %545, align 4, !tbaa !125
  %6067 = getelementptr inbounds i8, ptr %545, i64 4
  %6068 = load i32, ptr %6067, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %503) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %504) #8
  %6069 = load i32, ptr %6064, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %504, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %6069, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %505) #8
  %6070 = getelementptr inbounds i8, ptr %545, i64 12
  %6071 = load i32, ptr %6070, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %505, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %6071, i1 noundef zeroext true)
          to label %6072 unwind label %6076

6072:                                             ; preds = %6063
  invoke void @_ZN11spirv_cross4joinIJRA37_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RA6_S1_S9_SB_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %503, ptr noundef nonnull align 1 dereferenceable(37) @.str.1522, ptr noundef nonnull align 8 dereferenceable(32) %504, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 1 dereferenceable(6) @.str.1514, ptr noundef nonnull align 8 dereferenceable(32) %505, ptr noundef nonnull align 1 dereferenceable(3) @.str.1016)
          to label %6073 unwind label %6078

6073:                                             ; preds = %6072
  %6074 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %6066, i32 noundef %6068, ptr noundef nonnull align 8 dereferenceable(32) %503, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %6075 unwind label %6080

6075:                                             ; preds = %6073
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %503) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %505) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %505) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %504) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %504) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %503) #8
  br label %.thread3374

6076:                                             ; preds = %6063
  %6077 = landingpad { ptr, i32 }
          cleanup
  br label %6083

6078:                                             ; preds = %6072
  %6079 = landingpad { ptr, i32 }
          cleanup
  br label %6082

6080:                                             ; preds = %6073
  %6081 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %503) #8
  br label %6082

6082:                                             ; preds = %6080, %6078
  %.pn2478 = phi { ptr, i32 } [ %6081, %6080 ], [ %6079, %6078 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %505) #8
  br label %6083

6083:                                             ; preds = %6082, %6076
  %.pn2478.pn = phi { ptr, i32 } [ %.pn2478, %6082 ], [ %6077, %6076 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %505) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %504) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %504) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %503) #8
  br label %6424

6084:                                             ; preds = %566
  %6085 = getelementptr inbounds i8, ptr %545, i64 8
  %6086 = load i32, ptr %6085, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %6086)
  %6087 = load i32, ptr %545, align 4, !tbaa !125
  %6088 = getelementptr inbounds i8, ptr %545, i64 4
  %6089 = load i32, ptr %6088, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %506) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %507) #8
  %6090 = load i32, ptr %6085, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %507, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %6090, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %508) #8
  %6091 = getelementptr inbounds i8, ptr %545, i64 12
  %6092 = load i32, ptr %6091, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %508, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %6092, i1 noundef zeroext true)
          to label %6093 unwind label %6097

6093:                                             ; preds = %6084
  invoke void @_ZN11spirv_cross4joinIJRA46_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RA6_S1_S9_SB_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %506, ptr noundef nonnull align 1 dereferenceable(46) @.str.1523, ptr noundef nonnull align 8 dereferenceable(32) %507, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 1 dereferenceable(6) @.str.1514, ptr noundef nonnull align 8 dereferenceable(32) %508, ptr noundef nonnull align 1 dereferenceable(3) @.str.1016)
          to label %6094 unwind label %6099

6094:                                             ; preds = %6093
  %6095 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %6087, i32 noundef %6089, ptr noundef nonnull align 8 dereferenceable(32) %506, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %6096 unwind label %6101

6096:                                             ; preds = %6094
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %506) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %508) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %508) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %507) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %507) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %506) #8
  br label %.thread3374

6097:                                             ; preds = %6084
  %6098 = landingpad { ptr, i32 }
          cleanup
  br label %6104

6099:                                             ; preds = %6093
  %6100 = landingpad { ptr, i32 }
          cleanup
  br label %6103

6101:                                             ; preds = %6094
  %6102 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %506) #8
  br label %6103

6103:                                             ; preds = %6101, %6099
  %.pn2475 = phi { ptr, i32 } [ %6102, %6101 ], [ %6100, %6099 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %508) #8
  br label %6104

6104:                                             ; preds = %6103, %6097
  %.pn2475.pn = phi { ptr, i32 } [ %.pn2475, %6103 ], [ %6098, %6097 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %508) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %507) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %507) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %506) #8
  br label %6424

6105:                                             ; preds = %566
  %6106 = getelementptr inbounds i8, ptr %545, i64 8
  %6107 = load i32, ptr %6106, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %6107)
  %6108 = load i32, ptr %545, align 4, !tbaa !125
  %6109 = getelementptr inbounds i8, ptr %545, i64 4
  %6110 = load i32, ptr %6109, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %509) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %510) #8
  %6111 = load i32, ptr %6106, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %510, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %6111, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %511) #8
  %6112 = getelementptr inbounds i8, ptr %545, i64 12
  %6113 = load i32, ptr %6112, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %511, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %6113, i1 noundef zeroext true)
          to label %6114 unwind label %6118

6114:                                             ; preds = %6105
  invoke void @_ZN11spirv_cross4joinIJRA43_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RA6_S1_S9_SB_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %509, ptr noundef nonnull align 1 dereferenceable(43) @.str.1524, ptr noundef nonnull align 8 dereferenceable(32) %510, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 1 dereferenceable(6) @.str.1514, ptr noundef nonnull align 8 dereferenceable(32) %511, ptr noundef nonnull align 1 dereferenceable(3) @.str.1016)
          to label %6115 unwind label %6120

6115:                                             ; preds = %6114
  %6116 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %6108, i32 noundef %6110, ptr noundef nonnull align 8 dereferenceable(32) %509, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %6117 unwind label %6122

6117:                                             ; preds = %6115
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %509) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %511) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %511) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %510) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %510) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %509) #8
  br label %.thread3374

6118:                                             ; preds = %6105
  %6119 = landingpad { ptr, i32 }
          cleanup
  br label %6125

6120:                                             ; preds = %6114
  %6121 = landingpad { ptr, i32 }
          cleanup
  br label %6124

6122:                                             ; preds = %6115
  %6123 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %509) #8
  br label %6124

6124:                                             ; preds = %6122, %6120
  %.pn2472 = phi { ptr, i32 } [ %6123, %6122 ], [ %6121, %6120 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %511) #8
  br label %6125

6125:                                             ; preds = %6124, %6118
  %.pn2472.pn = phi { ptr, i32 } [ %.pn2472, %6124 ], [ %6119, %6118 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %511) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %510) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %510) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %509) #8
  br label %6424

6126:                                             ; preds = %566
  %6127 = getelementptr inbounds i8, ptr %545, i64 8
  %6128 = load i32, ptr %6127, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %6128)
  %6129 = load i32, ptr %545, align 4, !tbaa !125
  %6130 = getelementptr inbounds i8, ptr %545, i64 4
  %6131 = load i32, ptr %6130, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %512) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %513) #8
  %6132 = load i32, ptr %6127, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %513, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %6132, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %514) #8
  %6133 = getelementptr inbounds i8, ptr %545, i64 12
  %6134 = load i32, ptr %6133, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %514, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %6134, i1 noundef zeroext true)
          to label %6135 unwind label %6139

6135:                                             ; preds = %6126
  invoke void @_ZN11spirv_cross4joinIJRA41_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RA6_S1_S9_SB_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %512, ptr noundef nonnull align 1 dereferenceable(41) @.str.1525, ptr noundef nonnull align 8 dereferenceable(32) %513, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 1 dereferenceable(6) @.str.1514, ptr noundef nonnull align 8 dereferenceable(32) %514, ptr noundef nonnull align 1 dereferenceable(3) @.str.1016)
          to label %6136 unwind label %6141

6136:                                             ; preds = %6135
  %6137 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %6129, i32 noundef %6131, ptr noundef nonnull align 8 dereferenceable(32) %512, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %6138 unwind label %6143

6138:                                             ; preds = %6136
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %512) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %514) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %514) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %513) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %513) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %512) #8
  br label %.thread3374

6139:                                             ; preds = %6126
  %6140 = landingpad { ptr, i32 }
          cleanup
  br label %6146

6141:                                             ; preds = %6135
  %6142 = landingpad { ptr, i32 }
          cleanup
  br label %6145

6143:                                             ; preds = %6136
  %6144 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %512) #8
  br label %6145

6145:                                             ; preds = %6143, %6141
  %.pn2469 = phi { ptr, i32 } [ %6144, %6143 ], [ %6142, %6141 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %514) #8
  br label %6146

6146:                                             ; preds = %6145, %6139
  %.pn2469.pn = phi { ptr, i32 } [ %.pn2469, %6145 ], [ %6140, %6139 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %514) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %513) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %513) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %512) #8
  br label %6424

6147:                                             ; preds = %566
  %6148 = getelementptr inbounds i8, ptr %545, i64 8
  %6149 = load i32, ptr %6148, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL26flush_variable_declarationEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %6149)
  %6150 = load i32, ptr %545, align 4, !tbaa !125
  %6151 = getelementptr inbounds i8, ptr %545, i64 4
  %6152 = load i32, ptr %6151, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %515) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %516) #8
  %6153 = load i32, ptr %6148, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %516, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %6153, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %517) #8
  %6154 = getelementptr inbounds i8, ptr %545, i64 12
  %6155 = load i32, ptr %6154, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %517, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %6155, i1 noundef zeroext true)
          to label %6156 unwind label %6160

6156:                                             ; preds = %6147
  invoke void @_ZN11spirv_cross4joinIJRA41_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RA6_S1_S9_SB_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %515, ptr noundef nonnull align 1 dereferenceable(41) @.str.1526, ptr noundef nonnull align 8 dereferenceable(32) %516, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 1 dereferenceable(6) @.str.1514, ptr noundef nonnull align 8 dereferenceable(32) %517, ptr noundef nonnull align 1 dereferenceable(3) @.str.1016)
          to label %6157 unwind label %6162

6157:                                             ; preds = %6156
  %6158 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %6150, i32 noundef %6152, ptr noundef nonnull align 8 dereferenceable(32) %515, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %6159 unwind label %6164

6159:                                             ; preds = %6157
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %515) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %517) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %517) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %516) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %516) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %515) #8
  br label %.thread3374

6160:                                             ; preds = %6147
  %6161 = landingpad { ptr, i32 }
          cleanup
  br label %6167

6162:                                             ; preds = %6156
  %6163 = landingpad { ptr, i32 }
          cleanup
  br label %6166

6164:                                             ; preds = %6157
  %6165 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %515) #8
  br label %6166

6166:                                             ; preds = %6164, %6162
  %.pn2466 = phi { ptr, i32 } [ %6165, %6164 ], [ %6163, %6162 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %517) #8
  br label %6167

6167:                                             ; preds = %6166, %6160
  %.pn2466.pn = phi { ptr, i32 } [ %.pn2466, %6166 ], [ %6161, %6160 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %517) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %516) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %516) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %515) #8
  br label %6424

6168:                                             ; preds = %566
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %518) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %519) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %519) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %518, ptr noundef nonnull @.str.26, ptr noundef nonnull align 1 dereferenceable(1) %519)
          to label %6169 unwind label %6186

6169:                                             ; preds = %6168
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %518)
          to label %6170 unwind label %6188

6170:                                             ; preds = %6169
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %518) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %519) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %519) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %518) #8
  %6171 = getelementptr inbounds i8, ptr %545, i64 8
  %6172 = load i32, ptr %6171, align 4, !tbaa !125
  %6173 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %6172)
  br i1 %6173, label %6174, label %.critedge3122

6174:                                             ; preds = %6170
  %6175 = getelementptr inbounds i8, ptr %0, i64 2400
  %6176 = getelementptr inbounds i8, ptr %545, i64 4
  %6177 = call noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %6175, ptr noundef nonnull align 4 dereferenceable(4) %6176)
  %6178 = icmp eq i64 %6177, 0
  br i1 %6178, label %6179, label %.critedge3122

6179:                                             ; preds = %6174
  %6180 = getelementptr inbounds i8, ptr %0, i64 2568
  %6181 = call noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %6180, ptr noundef nonnull align 4 dereferenceable(4) %6176)
  %.not2460 = icmp eq i64 %6181, 0
  br i1 %.not2460, label %6182, label %.critedge3122

6182:                                             ; preds = %6179
  %6183 = load i32, ptr %545, align 4, !tbaa !125
  %6184 = load i32, ptr %6176, align 4, !tbaa !125
  %6185 = load i32, ptr %6171, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %6183, i32 noundef %6184, i32 noundef %6185, ptr noundef nonnull @.str.1527)
  br label %.thread3374

6186:                                             ; preds = %6168
  %6187 = landingpad { ptr, i32 }
          cleanup
  br label %6190

6188:                                             ; preds = %6169
  %6189 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %518) #8
  br label %6190

6190:                                             ; preds = %6188, %6186
  %.pn2458 = phi { ptr, i32 } [ %6189, %6188 ], [ %6187, %6186 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %519) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %519) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %518) #8
  br label %6424

.critedge3122:                                    ; preds = %6174, %6170, %6179
  %6191 = getelementptr inbounds i8, ptr %0, i64 2400
  %6192 = getelementptr inbounds i8, ptr %545, i64 4
  %6193 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %6191, ptr noundef nonnull align 4 dereferenceable(4) %6192)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %520) #8
  %6194 = load i32, ptr %6171, align 4, !tbaa !125
  %6195 = call noundef i32 @_ZNK11spirv_cross8Compiler18expression_type_idEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %6194)
  %6196 = load i32, ptr %6192, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL17declare_temporaryB5cxx11Ejj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %520, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %6195, i32 noundef %6196)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %521) #8
  %6197 = load i32, ptr %6171, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %521, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %6197, i1 noundef zeroext true)
          to label %6198 unwind label %6207

6198:                                             ; preds = %.critedge3122
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_RA2_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %520, ptr noundef nonnull align 8 dereferenceable(32) %521, ptr noundef nonnull align 1 dereferenceable(2) @.str.298)
          to label %6199 unwind label %6209

6199:                                             ; preds = %6198
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %521) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %521) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %520) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %520) #8
  %6200 = load i32, ptr %6192, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %522) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %523) #8
  %6201 = load ptr, ptr %0, align 8, !tbaa !142
  %6202 = getelementptr inbounds i8, ptr %6201, i64 48
  %6203 = load ptr, ptr %6202, align 8
  call void %6203(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %523, ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %6200, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJRA26_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %522, ptr noundef nonnull align 1 dereferenceable(26) @.str.1528, ptr noundef nonnull align 8 dereferenceable(32) %523, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %6204 unwind label %6212

6204:                                             ; preds = %6199
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %524) #8
  store i8 1, ptr %524, align 1, !tbaa !147
  %6205 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross8Compiler3setINS_14SPIRExpressionEJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKjbEEERT_jDpOT0_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %6200, ptr noundef nonnull align 8 dereferenceable(32) %522, ptr noundef nonnull align 4 dereferenceable(4) %545, ptr noundef nonnull align 1 dereferenceable(1) %524)
          to label %6206 unwind label %6214

6206:                                             ; preds = %6204
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %524) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %522) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %523) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %523) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %522) #8
  br label %.thread3374

6207:                                             ; preds = %.critedge3122
  %6208 = landingpad { ptr, i32 }
          cleanup
  br label %6211

6209:                                             ; preds = %6198
  %6210 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %521) #8
  br label %6211

6211:                                             ; preds = %6209, %6207
  %.pn2461 = phi { ptr, i32 } [ %6210, %6209 ], [ %6208, %6207 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %521) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %520) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %520) #8
  br label %6424

6212:                                             ; preds = %6199
  %6213 = landingpad { ptr, i32 }
          cleanup
  br label %6216

6214:                                             ; preds = %6204
  %6215 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %524) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %522) #8
  br label %6216

6216:                                             ; preds = %6214, %6212
  %.pn2463 = phi { ptr, i32 } [ %6215, %6214 ], [ %6213, %6212 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %523) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %523) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %522) #8
  br label %6424

6217:                                             ; preds = %566
  %6218 = load i32, ptr %545, align 4, !tbaa !125
  %6219 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %6218)
  %6220 = getelementptr inbounds i8, ptr %6219, i64 128
  %6221 = load i32, ptr %6220, align 8, !tbaa !210
  %.not2451 = icmp eq i32 %6221, 5349
  br i1 %.not2451, label %6227, label %6222

6222:                                             ; preds = %6217
  %6223 = tail call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %6223, ptr noundef nonnull @.str.1529)
          to label %6224 unwind label %6225

6224:                                             ; preds = %6222
  tail call void @__cxa_throw(ptr nonnull %6223, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
  unreachable

6225:                                             ; preds = %6222
  %6226 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %6223) #8
  br label %6424

6227:                                             ; preds = %6217
  %6228 = getelementptr inbounds i8, ptr %545, i64 8
  %6229 = load i32, ptr %6228, align 4, !tbaa !125
  %6230 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %6229)
  %6231 = getelementptr inbounds i8, ptr %6230, i64 24
  %6232 = load i32, ptr %6231, align 8, !tbaa !126
  %6233 = icmp eq i32 %6232, 2
  br i1 %6233, label %6234, label %6242

6234:                                             ; preds = %6227
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %525) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %526) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %526) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %525, ptr noundef nonnull @.str.1210, ptr noundef nonnull align 1 dereferenceable(1) %526)
          to label %6235 unwind label %6237

6235:                                             ; preds = %6234
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %525)
          to label %6236 unwind label %6239

6236:                                             ; preds = %6235
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %525) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %526) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %526) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %525) #8
  br label %6242

6237:                                             ; preds = %6234
  %6238 = landingpad { ptr, i32 }
          cleanup
  br label %6241

6239:                                             ; preds = %6235
  %6240 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %525) #8
  br label %6241

6241:                                             ; preds = %6239, %6237
  %.pn2452 = phi { ptr, i32 } [ %6240, %6239 ], [ %6238, %6237 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %526) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %526) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %525) #8
  br label %6424

6242:                                             ; preds = %6236, %6227
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %527) #8
  %6243 = load ptr, ptr %0, align 8, !tbaa !142
  %6244 = getelementptr inbounds i8, ptr %6243, i64 152
  %6245 = load ptr, ptr %6244, align 8
  call void %6245(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %527, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %6219, i32 noundef 0)
  %6246 = load i32, ptr %545, align 4, !tbaa !125
  %6247 = getelementptr inbounds i8, ptr %545, i64 4
  %6248 = load i32, ptr %6247, align 4, !tbaa !125
  %6249 = load i32, ptr %6228, align 4, !tbaa !125
  %6250 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %527) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %6246, i32 noundef %6248, i32 noundef %6249, ptr noundef %6250)
          to label %6251 unwind label %6252

6251:                                             ; preds = %6242
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %527) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %527) #8
  br label %.thread3374

6252:                                             ; preds = %6242
  %6253 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %527) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %527) #8
  br label %6424

6254:                                             ; preds = %566
  %6255 = load i32, ptr %545, align 4, !tbaa !125
  %6256 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %6255)
  %6257 = getelementptr inbounds i8, ptr %545, i64 8
  %6258 = load i32, ptr %6257, align 4, !tbaa !125
  %6259 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %6258)
  %6260 = getelementptr inbounds i8, ptr %6259, i64 128
  %6261 = load i32, ptr %6260, align 8, !tbaa !210
  %.not = icmp eq i32 %6261, 5349
  br i1 %.not, label %6267, label %6262

6262:                                             ; preds = %6254
  %6263 = tail call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %6263, ptr noundef nonnull @.str.1530)
          to label %6264 unwind label %6265

6264:                                             ; preds = %6262
  tail call void @__cxa_throw(ptr nonnull %6263, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
  unreachable

6265:                                             ; preds = %6262
  %6266 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %6263) #8
  br label %6424

6267:                                             ; preds = %6254
  %6268 = getelementptr inbounds i8, ptr %6256, i64 24
  %6269 = load i32, ptr %6268, align 8, !tbaa !126
  %6270 = icmp eq i32 %6269, 2
  br i1 %6270, label %6271, label %6279

6271:                                             ; preds = %6267
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %528) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %529) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %529) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %528, ptr noundef nonnull @.str.1210, ptr noundef nonnull align 1 dereferenceable(1) %529)
          to label %6272 unwind label %6274

6272:                                             ; preds = %6271
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %528)
          to label %6273 unwind label %6276

6273:                                             ; preds = %6272
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %528) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %529) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %529) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %528) #8
  br label %6279

6274:                                             ; preds = %6271
  %6275 = landingpad { ptr, i32 }
          cleanup
  br label %6278

6276:                                             ; preds = %6272
  %6277 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %528) #8
  br label %6278

6278:                                             ; preds = %6276, %6274
  %.pn2447 = phi { ptr, i32 } [ %6277, %6276 ], [ %6275, %6274 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %529) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %529) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %528) #8
  br label %6424

6279:                                             ; preds = %6273, %6267
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %530) #8
  %6280 = load ptr, ptr %0, align 8, !tbaa !142
  %6281 = getelementptr inbounds i8, ptr %6280, i64 152
  %6282 = load ptr, ptr %6281, align 8
  call void %6282(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %530, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %6256, i32 noundef 0)
  %6283 = load i32, ptr %545, align 4, !tbaa !125
  %6284 = getelementptr inbounds i8, ptr %545, i64 4
  %6285 = load i32, ptr %6284, align 4, !tbaa !125
  %6286 = load i32, ptr %6257, align 4, !tbaa !125
  %6287 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %530) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %6283, i32 noundef %6285, i32 noundef %6286, ptr noundef %6287)
          to label %6288 unwind label %6289

6288:                                             ; preds = %6279
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %530) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %530) #8
  br label %.thread3374

6289:                                             ; preds = %6279
  %6290 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %530) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %530) #8
  br label %6424

6291:                                             ; preds = %566
  %6292 = load i32, ptr %545, align 4, !tbaa !125
  %6293 = getelementptr inbounds i8, ptr %545, i64 4
  %6294 = load i32, ptr %6293, align 4, !tbaa !125
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_line_directiveEjj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %6292, i32 noundef %6294)
  br label %.thread3374

6295:                                             ; preds = %566
  %6296 = getelementptr inbounds i8, ptr %0, i64 7648
  %6297 = load i8, ptr %6296, align 8, !tbaa !219, !range !123, !noundef !124
  %6298 = trunc nuw i8 %6297 to i1
  br i1 %6298, label %6304, label %6299

6299:                                             ; preds = %6295
  %6300 = tail call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %6300, ptr noundef nonnull @.str.1531)
          to label %6301 unwind label %6302

6301:                                             ; preds = %6299
  tail call void @__cxa_throw(ptr nonnull %6300, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
  unreachable

6302:                                             ; preds = %6299
  %6303 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %6300) #8
  br label %6424

6304:                                             ; preds = %6295
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %531) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %532) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %532) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %531, ptr noundef nonnull @.str.1532, ptr noundef nonnull align 1 dereferenceable(1) %532)
          to label %6305 unwind label %6308

6305:                                             ; preds = %6304
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %531)
          to label %6306 unwind label %6310

6306:                                             ; preds = %6305
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %531) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %532) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %532) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %531) #8
  %6307 = getelementptr inbounds i8, ptr %0, i64 8224
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %6307, ptr noundef nonnull align 1 dereferenceable(2) @.str.298)
  br label %.thread3374

6308:                                             ; preds = %6304
  %6309 = landingpad { ptr, i32 }
          cleanup
  br label %6312

6310:                                             ; preds = %6305
  %6311 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %531) #8
  br label %6312

6312:                                             ; preds = %6310, %6308
  %.pn2445 = phi { ptr, i32 } [ %6311, %6310 ], [ %6309, %6308 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %532) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %532) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %531) #8
  br label %6424

6313:                                             ; preds = %566
  %6314 = getelementptr inbounds i8, ptr %0, i64 7648
  %6315 = load i8, ptr %6314, align 8, !tbaa !219, !range !123, !noundef !124
  %6316 = trunc nuw i8 %6315 to i1
  br i1 %6316, label %6322, label %6317

6317:                                             ; preds = %6313
  %6318 = tail call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %6318, ptr noundef nonnull @.str.1531)
          to label %6319 unwind label %6320

6319:                                             ; preds = %6317
  tail call void @__cxa_throw(ptr nonnull %6318, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
  unreachable

6320:                                             ; preds = %6317
  %6321 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %6318) #8
  br label %6424

6322:                                             ; preds = %6313
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %533) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %534) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %534) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %533, ptr noundef nonnull @.str.1532, ptr noundef nonnull align 1 dereferenceable(1) %534)
          to label %6323 unwind label %6331

6323:                                             ; preds = %6322
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %533)
          to label %6324 unwind label %6333

6324:                                             ; preds = %6323
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %533) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %534) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %534) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %533) #8
  %6325 = load i32, ptr %545, align 4, !tbaa !125
  %6326 = getelementptr inbounds i8, ptr %545, i64 4
  %6327 = load i32, ptr %6326, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %535) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %536) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %536) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %535, ptr noundef nonnull @.str.1533, ptr noundef nonnull align 1 dereferenceable(1) %536)
          to label %6328 unwind label %6336

6328:                                             ; preds = %6324
  %6329 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %6325, i32 noundef %6327, ptr noundef nonnull align 8 dereferenceable(32) %535, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %6330 unwind label %6338

6330:                                             ; preds = %6328
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %535) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %536) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %536) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %535) #8
  br label %.thread3374

6331:                                             ; preds = %6322
  %6332 = landingpad { ptr, i32 }
          cleanup
  br label %6335

6333:                                             ; preds = %6323
  %6334 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %533) #8
  br label %6335

6335:                                             ; preds = %6333, %6331
  %.pn2441 = phi { ptr, i32 } [ %6334, %6333 ], [ %6332, %6331 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %534) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %534) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %533) #8
  br label %6424

6336:                                             ; preds = %6324
  %6337 = landingpad { ptr, i32 }
          cleanup
  br label %6340

6338:                                             ; preds = %6328
  %6339 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %535) #8
  br label %6340

6340:                                             ; preds = %6338, %6336
  %.pn2443 = phi { ptr, i32 } [ %6339, %6338 ], [ %6337, %6336 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %536) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %536) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %535) #8
  br label %6424

6341:                                             ; preds = %566
  %6342 = getelementptr inbounds i8, ptr %0, i64 3112
  %6343 = load i8, ptr %6342, align 8, !tbaa !233, !range !123, !noundef !124
  %6344 = trunc nuw i8 %6343 to i1
  br i1 %6344, label %.thread3374, label %6345

6345:                                             ; preds = %6341
  tail call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA40_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(40) @.str.59)
  tail call void @_ZN11spirv_cross8Compiler26flush_all_active_variablesEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
  br label %.thread3374

6346:                                             ; preds = %566
  %6347 = getelementptr inbounds i8, ptr %0, i64 3112
  %6348 = load i8, ptr %6347, align 8, !tbaa !233, !range !123, !noundef !124
  %6349 = trunc nuw i8 %6348 to i1
  br i1 %6349, label %.thread3374, label %6350

6350:                                             ; preds = %6346
  tail call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA38_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(38) @.str.61)
  tail call void @_ZN11spirv_cross8Compiler26flush_all_active_variablesEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
  br label %.thread3374

6351:                                             ; preds = %566
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %537) #8
  %6352 = load i32, ptr %545, align 4, !tbaa !125
  call void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %537, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %6352, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %538) #8
  %6353 = getelementptr inbounds i8, ptr %545, i64 4
  %6354 = load i32, ptr %6353, align 4, !tbaa !125
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %538, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %6354, i1 noundef zeroext true)
          to label %6355 unwind label %6357

6355:                                             ; preds = %6351
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA19_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S2_SA_SC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(19) @.str.1534, ptr noundef nonnull align 8 dereferenceable(32) %537, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %538, ptr noundef nonnull align 1 dereferenceable(3) @.str.751)
          to label %6356 unwind label %6359

6356:                                             ; preds = %6355
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %538) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %538) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %537) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %537) #8
  br label %.thread3374

6357:                                             ; preds = %6351
  %6358 = landingpad { ptr, i32 }
          cleanup
  br label %6361

6359:                                             ; preds = %6355
  %6360 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %538) #8
  br label %6361

6361:                                             ; preds = %6359, %6357
  %.pn2439 = phi { ptr, i32 } [ %6360, %6359 ], [ %6358, %6357 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %538) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %537) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %537) #8
  br label %6424

6362:                                             ; preds = %566
  %6363 = load i32, ptr %545, align 4, !tbaa !125
  %6364 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %6363)
  %6365 = getelementptr inbounds i8, ptr %545, i64 8
  %6366 = load i32, ptr %6365, align 4, !tbaa !125
  %6367 = tail call noundef i32 @_ZNK11spirv_cross8Compiler21evaluate_constant_u32Ej(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %6366)
  switch i32 %6367, label %6406 [
    i32 1, label %6368
    i32 3, label %6387
  ]

6368:                                             ; preds = %6362
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %539) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %540) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %540) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %539, ptr noundef nonnull @.str.1535, ptr noundef nonnull align 1 dereferenceable(1) %540)
          to label %6369 unwind label %6373

6369:                                             ; preds = %6368
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %539)
          to label %6370 unwind label %6375

6370:                                             ; preds = %6369
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %539) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %540) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %540) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %539) #8
  %6371 = getelementptr inbounds i8, ptr %6364, i64 16
  %6372 = load i32, ptr %6371, align 8, !tbaa !145
  switch i32 %6372, label %6382 [
    i32 10, label %6411
    i32 8, label %6378
  ]

6373:                                             ; preds = %6368
  %6374 = landingpad { ptr, i32 }
          cleanup
  br label %6377

6375:                                             ; preds = %6369
  %6376 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %539) #8
  br label %6377

6377:                                             ; preds = %6375, %6373
  %.pn2434 = phi { ptr, i32 } [ %6376, %6375 ], [ %6374, %6373 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %540) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %540) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %539) #8
  br label %6424

6378:                                             ; preds = %6370
  %6379 = getelementptr inbounds i8, ptr %6364, i64 24
  %6380 = load i32, ptr %6379, align 8, !tbaa !126
  %6381 = icmp eq i32 %6380, 2
  br i1 %6381, label %6411, label %6382

6382:                                             ; preds = %6370, %6378
  %6383 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %6383, ptr noundef nonnull @.str.1538)
          to label %6384 unwind label %6385

6384:                                             ; preds = %6382
  call void @__cxa_throw(ptr nonnull %6383, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
  unreachable

6385:                                             ; preds = %6382
  %6386 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %6383) #8
  br label %6424

6387:                                             ; preds = %6362
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %541) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %542) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %542) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %541, ptr noundef nonnull @.str.1539, ptr noundef nonnull align 1 dereferenceable(1) %542)
          to label %6388 unwind label %6392

6388:                                             ; preds = %6387
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %541)
          to label %6389 unwind label %6394

6389:                                             ; preds = %6388
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %541) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %542) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %542) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %541) #8
  %6390 = getelementptr inbounds i8, ptr %6364, i64 16
  %6391 = load i32, ptr %6390, align 8, !tbaa !145
  switch i32 %6391, label %6401 [
    i32 10, label %6411
    i32 8, label %6397
  ]

6392:                                             ; preds = %6387
  %6393 = landingpad { ptr, i32 }
          cleanup
  br label %6396

6394:                                             ; preds = %6388
  %6395 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %541) #8
  br label %6396

6396:                                             ; preds = %6394, %6392
  %.pn = phi { ptr, i32 } [ %6395, %6394 ], [ %6393, %6392 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %542) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %542) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %541) #8
  br label %6424

6397:                                             ; preds = %6389
  %6398 = getelementptr inbounds i8, ptr %6364, i64 24
  %6399 = load i32, ptr %6398, align 8, !tbaa !126
  %6400 = icmp eq i32 %6399, 2
  br i1 %6400, label %6411, label %6401

6401:                                             ; preds = %6389, %6397
  %6402 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %6402, ptr noundef nonnull @.str.1538)
          to label %6403 unwind label %6404

6403:                                             ; preds = %6401
  call void @__cxa_throw(ptr nonnull %6402, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
  unreachable

6404:                                             ; preds = %6401
  %6405 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %6402) #8
  br label %6424

6406:                                             ; preds = %6362
  %6407 = tail call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %6407, ptr noundef nonnull @.str.1542)
          to label %6408 unwind label %6409

6408:                                             ; preds = %6406
  tail call void @__cxa_throw(ptr nonnull %6407, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
  unreachable

6409:                                             ; preds = %6406
  %6410 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %6407) #8
  br label %6424

6411:                                             ; preds = %6397, %6389, %6378, %6370
  %.0 = phi ptr [ @.str.1536, %6370 ], [ @.str.1537, %6378 ], [ @.str.1540, %6389 ], [ @.str.1541, %6397 ]
  %6412 = load i32, ptr %545, align 4, !tbaa !125
  %6413 = getelementptr inbounds i8, ptr %545, i64 4
  %6414 = load i32, ptr %6413, align 4, !tbaa !125
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %543) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %544) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %544) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %543, ptr noundef nonnull %.0, ptr noundef nonnull align 1 dereferenceable(1) %544)
          to label %6415 unwind label %6418

6415:                                             ; preds = %6411
  %6416 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %6412, i32 noundef %6414, ptr noundef nonnull align 8 dereferenceable(32) %543, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %6417 unwind label %6420

6417:                                             ; preds = %6415
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %543) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %544) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %544) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %543) #8
  br label %.thread3374

6418:                                             ; preds = %6411
  %6419 = landingpad { ptr, i32 }
          cleanup
  br label %6422

6420:                                             ; preds = %6415
  %6421 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %543) #8
  br label %6422

6422:                                             ; preds = %6420, %6418
  %.pn2436 = phi { ptr, i32 } [ %6421, %6420 ], [ %6419, %6418 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %544) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %544) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %543) #8
  br label %6424

6423:                                             ; preds = %566
  tail call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA21_KcRKtEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(21) @.str.1543, ptr noundef nonnull align 2 dereferenceable(2) %1)
  br label %.thread3374

.thread3374:                                      ; preds = %.thread3367, %5091, %5089, %5106, %5115, %5102, %5121, %5130, %5117, %5059, %.critedge3116, %5064, %5138, %5138, %5138, %6182, %6206, %5243, %5155, %5177, %5199, %5239, %5188, %5166, %5144, %5036, %5034, %5136, %5137, %5131, %3122, %3139, %3031, %3032, %2998, %2999, %2965, %2966, %2932, %2933, %2852, %2853, %2829, %2834, %2809, %2814, %2262, %2277, %2204, %2222, %2149, %2153, %1925, %1926, %1741, %1754, %1746, %1772, %1770, %921, %928, %6346, %6350, %6341, %6345, %3046, %3047, %3013, %3014, %2980, %2981, %2947, %2948, %2914, %2915, %2899, %2900, %2883, %2884, %2868, %2869, %2656, %2662, %2384, %2385, %2349, %2351, %2003, %2009, %1934, %1995, %1910, %6423, %6417, %6356, %6330, %6306, %6291, %6288, %6251, %6159, %6138, %6117, %6096, %6075, %6054, %6033, %6012, %5991, %5970, %5949, %5928, %5907, %5889, %5874, %5859, %5844, %5829, %5817, %5808, %5799, %5790, %5757, %5726, %5700, %5661, %5581, %5544, %5539, %5522, %5520, %5449, %5443, %5416, %5392, %5378, %5364, %5350, %5336, %5322, %5308, %5292, %5265, %4973, %4918, %4780, %4692, %4558, %4522, %4107, %4033, %4027, %3960, %3911, %3830, %3806, %3791, %3787, %3785, %3750, %3716, %3715, %3704, %3693, %3682, %3671, %3660, %3651, %3615, %3614, %3556, %3543, %3503, %3493, %3483, %3477, %3467, %3457, %3445, %3443, %3415, %3387, %3370, %3342, %3314, %3286, %3258, %3241, %3224, %3119, %3102, %3076, %2791, %2785, %2779, %2777, %2684, %2675, %2666, %2637, %2624, %2611, %2598, %2589, %2580, %2572, %2554, %2501, %2456, %2447, %2441, %2352, %2284, %2061, %2053, %2040, %2032, %2019, %2013, %1905, %1726, %1717, %1683, %1574, %1447, %1418, %.loopexit, %1160, %955, %877, %742, %566, %566
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #8
  ret void

6424:                                             ; preds = %6377, %6385, %6396, %6404, %6409, %6422, %6265, %6278, %6289, %6225, %6252, %6241, %6211, %6216, %5210, %5224, %5242, %4785, %4789, %3982, %3995, %4032, %3941, %3948, %3968, %1755, %1768, %6361, %6340, %6335, %6320, %6312, %6302, %6190, %6167, %6146, %6125, %6104, %6083, %6062, %6041, %6020, %5999, %5978, %5957, %5936, %5915, %5894, %5879, %5864, %5849, %5834, %5818, %5813, %5800, %5795, %5780, %5731, %5718, %5709, %5694, %5626, %5617, %5521, %5448, %5421, %5398, %5384, %5370, %5356, %5342, %5328, %5314, %5298, %5284, %5013, %4931, %4919, %4802, %4695, %4575, %4523, %4115, %3923, %3833, %3816, %3802, %3786, %3768, %3759, %3751, %3733, %3724, %3659, %3613, %3561, %3548, %3442, %3429, %3414, %3401, %3386, %3369, %3356, %3341, %3323, %3313, %3300, %3285, %3272, %3257, %3240, %3225, %3140, %3120, %3110, %3071, %2778, %2571, %2536, %2529, %2518, %2482, %2475, %2446, %2382, %2350, %2276, %2221, %2152, %1996, %1906, %1727, %1715, %1684, %1575, %1448, %1431, %1399, %1161, %964, %878, %743
  %.pn2436.pn.pn = phi { ptr, i32 } [ %.pn2439, %6361 ], [ %.pn2443, %6340 ], [ %.pn2441, %6335 ], [ %6321, %6320 ], [ %.pn2445, %6312 ], [ %6303, %6302 ], [ %.pn2458, %6190 ], [ %.pn2466.pn, %6167 ], [ %.pn2469.pn, %6146 ], [ %.pn2472.pn, %6125 ], [ %.pn2475.pn, %6104 ], [ %.pn2478.pn, %6083 ], [ %.pn2481.pn, %6062 ], [ %.pn2484.pn, %6041 ], [ %.pn2487.pn, %6020 ], [ %.pn2490.pn, %5999 ], [ %.pn2493.pn, %5978 ], [ %.pn2496.pn, %5957 ], [ %.pn2499.pn, %5936 ], [ %.pn2502.pn, %5915 ], [ %.pn2505, %5894 ], [ %.pn2507, %5879 ], [ %.pn2509, %5864 ], [ %.pn2511, %5849 ], [ %.pn2513, %5834 ], [ %5819, %5818 ], [ %.pn2515, %5813 ], [ %5801, %5800 ], [ %.pn2517, %5795 ], [ %.pn2519.pn.pn.pn.pn.pn.pn, %5780 ], [ %5732, %5731 ], [ %5719, %5718 ], [ %.pn2527, %5709 ], [ %.pn2529.pn.pn.pn.pn.pn.pn.pn.pn, %5694 ], [ %5627, %5626 ], [ %.pn2539.pn.pn.pn.pn.pn.pn.pn.pn.pn, %5617 ], [ %.pn2556, %5521 ], [ %.pn2558, %5448 ], [ %.pn2560, %5421 ], [ %.pn2562, %5398 ], [ %.pn2564, %5384 ], [ %.pn2566, %5370 ], [ %.pn2568, %5356 ], [ %.pn2570, %5342 ], [ %.pn2572, %5328 ], [ %.pn2574, %5314 ], [ %.pn2576, %5298 ], [ %.pn2584, %5284 ], [ %.pn2623, %5013 ], [ %.pn2605, %4931 ], [ %.pn2649, %4919 ], [ %.pn2625, %4802 ], [ %.pn2676.pn.pn.pn, %4695 ], [ %.pn2684.pn.pn.pn, %4575 ], [ %.pn2740, %4523 ], [ %.pn2745.pn.pn.pn.pn, %4115 ], [ %.pn2781, %3923 ], [ %3834, %3833 ], [ %3803, %3802 ], [ %.pn2784, %3816 ], [ %3760, %3759 ], [ %.pn2787, %3786 ], [ %3769, %3768 ], [ %3725, %3724 ], [ %.pn2790, %3751 ], [ %3734, %3733 ], [ %.pn2794, %3659 ], [ %.pn2796, %3613 ], [ %.pn2798, %3561 ], [ %.pn2800, %3548 ], [ %3430, %3429 ], [ %.pn2802, %3442 ], [ %3402, %3401 ], [ %.pn2804, %3414 ], [ %.pn2806, %3386 ], [ %3357, %3356 ], [ %.pn2808, %3369 ], [ %3324, %3323 ], [ %.pn2810, %3341 ], [ %3301, %3300 ], [ %.pn2812, %3313 ], [ %3273, %3272 ], [ %.pn2814, %3285 ], [ %.pn2816, %3257 ], [ %.pn2818, %3240 ], [ %.pn2838, %3225 ], [ %3141, %3140 ], [ %3121, %3120 ], [ %.pn2840.pn, %3110 ], [ %3072, %3071 ], [ %.pn2857, %2778 ], [ %2530, %2529 ], [ %.pn2860.pn.pn.pn.pn, %2571 ], [ %2537, %2536 ], [ %2476, %2475 ], [ %.pn2866.pn.pn.pn.pn, %2518 ], [ %2483, %2482 ], [ %.pn2877.pn.pn, %2446 ], [ %2383, %2382 ], [ %.pn2886.pn, %2350 ], [ %.pn2893.pn, %2276 ], [ %.pn2900.pn, %2221 ], [ %.pn2912, %2152 ], [ %.pn2921.pn.pn, %1996 ], [ %.pn2935.pn.pn.pn, %1906 ], [ %1728, %1727 ], [ %1716, %1715 ], [ %.pn2965.pn, %1684 ], [ %.pn2969, %1575 ], [ %1449, %1448 ], [ %.pn2974.pn, %1431 ], [ %.pn2999, %1399 ], [ %.pn3017.pn, %1161 ], [ %.pn3021.pn.pn, %964 ], [ %.pn3032.pn.pn, %878 ], [ %.pn3039.pn.pn.pn.pn, %743 ], [ %1769, %1768 ], [ %1756, %1755 ], [ %3949, %3948 ], [ %.pn2764.pn, %3968 ], [ %.pn2762, %3941 ], [ %3983, %3982 ], [ %.pn2757.pn, %4032 ], [ %.pn2751, %3995 ], [ %.pn2663, %4785 ], [ %4790, %4789 ], [ %.pn2588.pn.pn, %5242 ], [ %.pn2586, %5224 ], [ %5211, %5210 ], [ %.pn2463, %6216 ], [ %.pn2461, %6211 ], [ %6226, %6225 ], [ %6253, %6252 ], [ %.pn2452, %6241 ], [ %6266, %6265 ], [ %6290, %6289 ], [ %.pn2447, %6278 ], [ %.pn2436, %6422 ], [ %6386, %6385 ], [ %.pn2434, %6377 ], [ %6405, %6404 ], [ %.pn, %6396 ], [ %6410, %6409 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #8
  resume { ptr, i32 } %.pn2436.pn.pn

6425:                                             ; preds = %4729, %4634, %4443, %4364, %4273, %4234, %4160, %4142, %4071, %3216
  unreachable
}

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZN11spirv_crossL37opcode_can_promote_integer_implicitlyEN3spv2OpE(i32 noundef) local_unnamed_addr #7

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL30unroll_array_from_complex_loadEjjRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i32 noundef, ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL34rewrite_load_for_wrapped_row_majorERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_7TypedIDILNS_5TypesE1EEENS8_ILS9_0EEE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(32), i32, i32) local_unnamed_addr #3 align 2

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross15AccessChainMetaC2Ev(ptr noundef nonnull align 4 dereferenceable(16)) unnamed_addr #7 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross8Compiler3setINS_14SPIRExpressionEJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKjbEEERT_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 #3 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRS6_RA11_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(2), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(11)) local_unnamed_addr #3

declare noundef zeroext i1 @_ZN11spirv_cross8Compiler16function_is_pureERKNS_12SPIRFunctionE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(795)) local_unnamed_addr #5

declare noundef zeroext i1 @_ZN11spirv_cross8Compiler29function_is_control_dependentERKNS_12SPIRFunctionE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(795)) local_unnamed_addr #5

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL23append_global_func_argsERKNS_12SPIRFunctionEjRNS_11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(795), i32 noundef, ptr noundef nonnull align 8 dereferenceable(280)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL31check_function_call_constraintsEPKjj(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef, i32 noundef) local_unnamed_addr #3 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 #6 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL22emit_copy_logical_typeEjjjjNS_11SmallVectorIjLm8EEE(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef) local_unnamed_addr #3 align 2

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA18_KcS7_RA5_S8_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(18), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(5), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #3

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZSt4swapIbENSt9enable_ifIXsr6__and_ISt6__not_ISt15__is_tuple_likeIT_EESt21is_move_constructibleIS3_ESt18is_move_assignableIS3_EEE5valueEvE4typeERS3_SC_(ptr noundef nonnull align 1 dereferenceable(1), ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #7

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS6_S9_S6_RA2_S7_S6_SB_S6_S9_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(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), 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(3)) local_unnamed_addr #3

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRPKcRA2_S1_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_S1_SB_S5_EEESB_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(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 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #3

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA20_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(20), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA14_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(14), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA16_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(16), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #3

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_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(3)) local_unnamed_addr #3

; Function Attrs: inlinehint mustprogress uwtable
declare hidden ptr @"_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPN11spirv_cross8PlsRemapESt6vectorIS3_SaIS3_EEEEZNS2_12CompilerGLSL16emit_instructionERKNS2_11InstructionEE3$_0ET_SE_SE_T0_"(ptr, ptr, ptr) local_unnamed_addr #6

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local ptr @_ZSt5beginISt6vectorIN11spirv_cross8PlsRemapESaIS2_EEEDTcldtfp_5beginEERT_(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #7

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local ptr @_ZSt3endISt6vectorIN11spirv_cross8PlsRemapESaIS2_EEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #7

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9__gnu_cxxeqIPN11spirv_cross8PlsRemapESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #7

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef i32 @_ZL24pls_format_to_componentsN11spirv_cross9PlsFormatE(i32 noundef) local_unnamed_addr #1

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA13_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(13), 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 #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA13_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(13), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA12_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA27_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(12), 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(2)) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA12_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA29_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(29)) local_unnamed_addr #3

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA11_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_RS9_SB_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(11), 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 #3

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_KcRS6_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(3), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross8Compiler3setINS_14SPIRExpressionEJRNSt7__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 #3 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA11_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(11), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #3

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN11spirv_cross12CompilerGLSL30mask_relevant_memory_semanticsEj(i32 noundef) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN11spirv_cross12CompilerGLSL29get_next_instruction_in_blockERKNS_11InstructionE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 4 dereferenceable(12)) local_unnamed_addr #1 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN3spvorENS_19MemorySemanticsMaskES0_(i32 noundef, i32 noundef) local_unnamed_addr #7

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA17_KcRNSt7__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(17), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #3

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA5_KcRPS1_RA2_S1_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_SD_SF_EEESD_DpOT_(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(5), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 1 dereferenceable(2), 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 #3

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA23_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(23), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA24_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(24), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA30_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(30), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #3

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA47_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(47), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #3

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA26_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(26), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL19emit_line_directiveEjj(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef, i32 noundef) local_unnamed_addr #3 align 2

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !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 = !{!6, !10, i64 8}
!12 = !{!13, !13, i64 0}
!13 = !{!"_ZTSN11spirv_cross8SPIRType8BaseTypeE", !8, i64 0}
!14 = !{!15, !58, i64 8411}
!15 = !{!"_ZTSN11spirv_cross12CompilerGLSLE", !16, i64 0, !24, i64 3176, !82, i64 3184, !58, i64 3272, !85, i64 3280, !24, i64 7616, !24, i64 7624, !58, i64 7632, !58, i64 7633, !90, i64 7636, !94, i64 7680, !94, i64 7736, !94, i64 7792, !94, i64 7848, !94, i64 7904, !94, i64 7960, !94, i64 8016, !96, i64 8072, !80, i64 8128, !58, i64 8184, !98, i64 8192, !10, i64 8416, !64, i64 8424, !64, i64 8480, !64, i64 8536, !99, i64 8592, !101, i64 8648, !102, i64 8656, !46, i64 8712, !46, i64 8992, !102, i64 9272, !104, i64 9328, !10, i64 9384, !10, i64 9388, !10, i64 9392, !58, i64 9396, !58, i64 9397, !107, i64 9400, !107, i64 9424, !111, i64 9448, !115, i64 9472, !102, i64 9496, !64, i64 9552, !64, i64 9608, !8, i64 9664, !119, i64 9672, !64, i64 9728, !24, i64 9784, !121, i64 9792}
!16 = !{!"_ZTSN11spirv_cross8CompilerE", !17, i64 8, !66, i64 1928, !66, i64 1984, !24, i64 2040, !24, i64 2048, !10, i64 2056, !69, i64 2064, !58, i64 2120, !64, i64 2128, !58, i64 2184, !58, i64 2185, !71, i64 2192, !66, i64 2312, !74, i64 2368, !64, i64 2400, !64, i64 2456, !64, i64 2512, !64, i64 2568, !64, i64 2624, !63, i64 2680, !63, i64 2744, !10, i64 2808, !10, i64 2812, !58, i64 2816, !64, i64 2824, !58, i64 2880, !58, i64 2881, !10, i64 2884, !76, i64 2888, !66, i64 2944, !78, i64 3000, !64, i64 3056, !58, i64 3112, !80, i64 3120}
!17 = !{!"_ZTSN11spirv_cross8ParsedIRE", !18, i64 0, !25, i64 8, !29, i64 32, !33, i64 248, !8, i64 304, !38, i64 1088, !38, i64 1144, !41, i64 1200, !43, i64 1256, !46, i64 1312, !49, i64 1592, !52, i64 1624, !54, i64 1680, !56, i64 1736, !57, i64 1740, !59, i64 1748, !60, i64 1752, !10, i64 1756, !10, i64 1760, !61, i64 1768, !63, i64 1800, !64, i64 1864}
!18 = !{!"_ZTSSt10unique_ptrIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EE", !19, i64 0}
!19 = !{!"_ZTSSt15__uniq_ptr_dataIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_ELb1ELb1EE", !20, i64 0}
!20 = !{!"_ZTSSt15__uniq_ptr_implIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EE", !21, i64 0}
!21 = !{!"_ZTSSt5tupleIJPN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EEE", !22, i64 0}
!22 = !{!"_ZTSSt11_Tuple_implILm0EJPN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EEE", !23, i64 0}
!23 = !{!"_ZTSSt10_Head_baseILm0EPN11spirv_cross15ObjectPoolGroupELb0EE", !24, i64 0}
!24 = !{!"any pointer", !8, i64 0}
!25 = !{!"_ZTSSt6vectorIjSaIjEE", !26, i64 0}
!26 = !{!"_ZTSSt12_Vector_baseIjSaIjEE", !27, i64 0}
!27 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE12_Vector_implE", !28, i64 0}
!28 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE17_Vector_impl_dataE", !24, i64 0, !24, i64 8, !24, i64 16}
!29 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7VariantELm8EEE", !30, i64 0, !31, i64 16, !32, i64 24}
!30 = !{!"_ZTSN11spirv_cross10VectorViewINS_7VariantEEE", !24, i64 0, !31, i64 8}
!31 = !{!"long", !8, i64 0}
!32 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7VariantELm8EEE", !8, i64 0}
!33 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !34, i64 0}
!34 = !{!"_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", !24, i64 0, !31, i64 8, !35, i64 16, !31, i64 24, !36, i64 32, !24, i64 48}
!35 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !24, i64 0}
!36 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !37, i64 0, !31, i64 8}
!37 = !{!"float", !8, i64 0}
!38 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EEE", !39, i64 0, !31, i64 16, !40, i64 24}
!39 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEEE", !24, i64 0, !31, i64 8}
!40 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE0EEELm8EEE", !8, i64 0}
!41 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEEjSt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_jEEE", !42, i64 0}
!42 = !{!"_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", !24, i64 0, !31, i64 8, !35, i64 16, !31, i64 24, !36, i64 32, !24, i64 48}
!43 = !{!"_ZTSN11spirv_cross11SmallVectorIN3spv10CapabilityELm8EEE", !44, i64 0, !31, i64 16, !45, i64 24}
!44 = !{!"_ZTSN11spirv_cross10VectorViewIN3spv10CapabilityEEE", !24, i64 0, !31, i64 8}
!45 = !{!"_ZTSN11spirv_cross13AlignedBufferIN3spv10CapabilityELm8EEE", !8, i64 0}
!46 = !{!"_ZTSN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !47, i64 0, !31, i64 16, !48, i64 24}
!47 = !{!"_ZTSN11spirv_cross10VectorViewINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE", !24, i64 0, !31, i64 8}
!48 = !{!"_ZTSN11spirv_cross13AlignedBufferINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !8, i64 0}
!49 = !{!"_ZTSN11spirv_cross11SmallVectorIhLm8EEE", !50, i64 0, !31, i64 16, !51, i64 24}
!50 = !{!"_ZTSN11spirv_cross10VectorViewIhEE", !24, i64 0, !31, i64 8}
!51 = !{!"_ZTSN11spirv_cross13AlignedBufferIhLm8EEE", !8, i64 0}
!52 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE6EEES3_St4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S3_EEE", !53, i64 0}
!53 = !{!"_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", !24, i64 0, !31, i64 8, !35, i64 16, !31, i64 24, !36, i64 32, !24, i64 48}
!54 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE4EEENS0_14SPIREntryPointESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !55, i64 0}
!55 = !{!"_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", !24, i64 0, !31, i64 8, !35, i64 16, !31, i64 24, !36, i64 32, !24, i64 48}
!56 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE4EEE", !10, i64 0}
!57 = !{!"_ZTSN11spirv_cross8ParsedIR6SourceE", !10, i64 0, !58, i64 4, !58, i64 5, !58, i64 6}
!58 = !{!"bool", !8, i64 0}
!59 = !{!"_ZTSN3spv15AddressingModelE", !8, i64 0}
!60 = !{!"_ZTSN3spv11MemoryModelE", !8, i64 0}
!61 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !62, i64 0, !31, i64 8, !8, i64 16}
!62 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !24, i64 0}
!63 = !{!"_ZTSN11spirv_cross6BitsetE", !31, i64 0, !64, i64 8}
!64 = !{!"_ZTSSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE", !65, i64 0}
!65 = !{!"_ZTSSt10_HashtableIjjSaIjENSt8__detail9_IdentityESt8equal_toIjESt4hashIjENS1_18_Mod_range_hashingENS1_20_Default_ranged_hashENS1_20_Prime_rehash_policyENS1_17_Hashtable_traitsILb0ELb1ELb1EEEE", !24, i64 0, !31, i64 8, !35, i64 16, !31, i64 24, !36, i64 32, !24, i64 48}
!66 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !67, i64 0, !31, i64 16, !68, i64 24}
!67 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !24, i64 0, !31, i64 8}
!68 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !8, i64 0}
!69 = !{!"_ZTSSt13unordered_setIN11spirv_cross7TypedIDILNS0_5TypesE2EEESt4hashIS3_ESt8equal_toIS3_ESaIS3_EE", !70, i64 0}
!70 = !{!"_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", !24, i64 0, !31, i64 8, !35, i64 16, !31, i64 24, !36, i64 32, !24, i64 48}
!71 = !{!"_ZTSN11spirv_cross11SmallVectorINS_20CombinedImageSamplerELm8EEE", !72, i64 0, !31, i64 16, !73, i64 24}
!72 = !{!"_ZTSN11spirv_cross10VectorViewINS_20CombinedImageSamplerEEE", !24, i64 0, !31, i64 8}
!73 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_20CombinedImageSamplerELm8EEE", !8, i64 0}
!74 = !{!"_ZTSSt8functionIFvRKN11spirv_cross8SPIRTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERS9_EE", !75, i64 0, !24, i64 24}
!75 = !{!"_ZTSSt14_Function_base", !8, i64 0, !24, i64 16}
!76 = !{!"_ZTSSt13unordered_mapIjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS2_EESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !77, i64 0}
!77 = !{!"_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", !24, i64 0, !31, i64 8, !35, i64 16, !31, i64 24, !36, i64 32, !24, i64 48}
!78 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross8Compiler17PhysicalBlockMetaESt4hashIjESt8equal_toIjESaISt4pairIKjS2_EEE", !79, i64 0}
!79 = !{!"_ZTSSt10_HashtableIjSt4pairIKjN11spirv_cross8Compiler17PhysicalBlockMetaEESaIS5_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb0ELb0ELb1EEEE", !24, i64 0, !31, i64 8, !35, i64 16, !31, i64 24, !36, i64 32, !24, i64 48}
!80 = !{!"_ZTSSt13unordered_mapIjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !81, i64 0}
!81 = !{!"_ZTSSt10_HashtableIjSt4pairIKjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEESaIS8_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb0ELb0ELb1EEEE", !24, i64 0, !31, i64 8, !35, i64 16, !31, i64 24, !36, i64 32, !24, i64 48}
!82 = !{!"_ZTSN11spirv_cross11SmallVectorIPNS_9SPIRBlockELm8EEE", !83, i64 0, !31, i64 16, !84, i64 24}
!83 = !{!"_ZTSN11spirv_cross10VectorViewIPNS_9SPIRBlockEEE", !24, i64 0, !31, i64 8}
!84 = !{!"_ZTSN11spirv_cross13AlignedBufferIPNS_9SPIRBlockELm8EEE", !8, i64 0}
!85 = !{!"_ZTSN11spirv_cross12StringStreamILm4096ELm4096EEE", !86, i64 0, !8, i64 24, !87, i64 4120}
!86 = !{!"_ZTSN11spirv_cross12StringStreamILm4096ELm4096EE6BufferE", !24, i64 0, !31, i64 8, !31, i64 16}
!87 = !{!"_ZTSN11spirv_cross11SmallVectorINS_12StringStreamILm4096ELm4096EE6BufferELm8EEE", !88, i64 0, !31, i64 16, !89, i64 24}
!88 = !{!"_ZTSN11spirv_cross10VectorViewINS_12StringStreamILm4096ELm4096EE6BufferEEE", !24, i64 0, !31, i64 8}
!89 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_12StringStreamILm4096ELm4096EE6BufferELm8EEE", !8, i64 0}
!90 = !{!"_ZTSN11spirv_cross12CompilerGLSL7OptionsE", !10, i64 0, !58, i64 4, !58, i64 5, !10, i64 8, !58, i64 12, !58, i64 13, !58, i64 14, !58, i64 15, !58, i64 16, !58, i64 17, !58, i64 18, !58, i64 19, !58, i64 20, !58, i64 21, !58, i64 22, !58, i64 23, !10, i64 24, !91, i64 28, !92, i64 32}
!91 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options13VertexOptionsE", !58, i64 0, !58, i64 1, !58, i64 2}
!92 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options15FragmentOptionsE", !93, i64 0, !93, i64 4}
!93 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options9PrecisionE", !8, i64 0}
!94 = !{!"_ZTSSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE", !95, i64 0}
!95 = !{!"_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", !24, i64 0, !31, i64 8, !35, i64 16, !31, i64 24, !36, i64 32, !24, i64 48}
!96 = !{!"_ZTSSt13unordered_mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt13unordered_setImSt4hashImESt8equal_toImESaImEES7_IS5_ES9_IS5_ESaISt4pairIKS5_SC_EEE", !97, i64 0}
!97 = !{!"_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", !24, i64 0, !31, i64 8, !35, i64 16, !31, i64 24, !36, i64 32, !24, i64 48}
!98 = !{!"_ZTSN11spirv_cross12CompilerGLSL17BackendVariationsE", !61, i64 0, !61, i64 32, !61, i64 64, !58, i64 96, !58, i64 97, !58, i64 98, !58, i64 99, !24, i64 104, !24, i64 112, !24, i64 120, !24, i64 128, !24, i64 136, !24, i64 144, !24, i64 152, !24, i64 160, !24, i64 168, !24, i64 176, !13, i64 184, !58, i64 188, !58, i64 189, !58, i64 190, !58, i64 191, !58, i64 192, !58, i64 193, !58, i64 194, !58, i64 195, !58, i64 196, !58, i64 197, !58, i64 198, !58, i64 199, !58, i64 200, !58, i64 201, !58, i64 202, !58, i64 203, !58, i64 204, !58, i64 205, !58, i64 206, !58, i64 207, !58, i64 208, !58, i64 209, !58, i64 210, !58, i64 211, !58, i64 212, !58, i64 213, !58, i64 214, !58, i64 215, !58, i64 216, !58, i64 217, !58, i64 218, !58, i64 219}
!99 = !{!"_ZTSSt13unordered_mapIjbSt4hashIjESt8equal_toIjESaISt4pairIKjbEEE", !100, i64 0}
!100 = !{!"_ZTSSt10_HashtableIjSt4pairIKjbESaIS2_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE", !24, i64 0, !31, i64 8, !35, i64 16, !31, i64 24, !36, i64 32, !24, i64 48}
!101 = !{!"_ZTSN11spirv_cross12CompilerGLSL27ShaderSubgroupSupportHelperE", !10, i64 0}
!102 = !{!"_ZTSSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEE", !103, i64 0}
!103 = !{!"_ZTSSt10_HashtableIjSt4pairIKjjESaIS2_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE", !24, i64 0, !31, i64 8, !35, i64 16, !31, i64 24, !36, i64 32, !24, i64 48}
!104 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEE", !105, i64 0, !31, i64 16, !106, i64 24}
!105 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEE", !24, i64 0, !31, i64 8}
!106 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE1EEELm8EEE", !8, i64 0}
!107 = !{!"_ZTSSt6vectorIN11spirv_cross8PlsRemapESaIS1_EE", !108, i64 0}
!108 = !{!"_ZTSSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE", !109, i64 0}
!109 = !{!"_ZTSNSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE12_Vector_implE", !110, i64 0}
!110 = !{!"_ZTSNSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE17_Vector_impl_dataE", !24, i64 0, !24, i64 8, !24, i64 16}
!111 = !{!"_ZTSSt6vectorISt4pairIjjESaIS1_EE", !112, i64 0}
!112 = !{!"_ZTSSt12_Vector_baseISt4pairIjjESaIS1_EE", !113, i64 0}
!113 = !{!"_ZTSNSt12_Vector_baseISt4pairIjjESaIS1_EE12_Vector_implE", !114, i64 0}
!114 = !{!"_ZTSNSt12_Vector_baseISt4pairIjjESaIS1_EE17_Vector_impl_dataE", !24, i64 0, !24, i64 8, !24, i64 16}
!115 = !{!"_ZTSSt6vectorISt4pairIjbESaIS1_EE", !116, i64 0}
!116 = !{!"_ZTSSt12_Vector_baseISt4pairIjbESaIS1_EE", !117, i64 0}
!117 = !{!"_ZTSNSt12_Vector_baseISt4pairIjbESaIS1_EE12_Vector_implE", !118, i64 0}
!118 = !{!"_ZTSNSt12_Vector_baseISt4pairIjbESaIS1_EE17_Vector_impl_dataE", !24, i64 0, !24, i64 8, !24, i64 16}
!119 = !{!"_ZTSSt13unordered_setIN11spirv_cross21LocationComponentPairENS0_14InternalHasherESt8equal_toIS1_ESaIS1_EE", !120, i64 0}
!120 = !{!"_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", !24, i64 0, !31, i64 8, !35, i64 16, !31, i64 24, !36, i64 32, !24, i64 48}
!121 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross11SmallVectorINS0_7TypedIDILNS0_5TypesE3EEELm8EEESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !122, i64 0}
!122 = !{!"_ZTSSt10_HashtableIjSt4pairIKjN11spirv_cross11SmallVectorINS2_7TypedIDILNS2_5TypesE3EEELm8EEEESaIS8_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb0ELb0ELb1EEEE", !24, i64 0, !31, i64 8, !35, i64 16, !31, i64 24, !36, i64 32, !24, i64 48}
!123 = !{i8 0, i8 2}
!124 = !{}
!125 = !{!10, !10, i64 0}
!126 = !{!127, !10, i64 24}
!127 = !{!"_ZTSN11spirv_cross8SPIRTypeE", !128, i64 0, !130, i64 12, !13, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !66, i64 32, !131, i64 88, !10, i64 120, !58, i64 124, !58, i64 125, !134, i64 128, !104, i64 136, !66, i64 192, !135, i64 248, !136, i64 272, !136, i64 276, !94, i64 280}
!128 = !{!"_ZTSN11spirv_cross8IVariantE", !129, i64 8}
!129 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !10, i64 0}
!130 = !{!"_ZTSN3spv2OpE", !8, i64 0}
!131 = !{!"_ZTSN11spirv_cross11SmallVectorIbLm8EEE", !132, i64 0, !31, i64 16, !133, i64 24}
!132 = !{!"_ZTSN11spirv_cross10VectorViewIbEE", !24, i64 0, !31, i64 8}
!133 = !{!"_ZTSN11spirv_cross13AlignedBufferIbLm8EEE", !8, i64 0}
!134 = !{!"_ZTSN3spv12StorageClassE", !8, i64 0}
!135 = !{!"_ZTSN11spirv_cross8SPIRType9ImageTypeE", !136, i64 0, !137, i64 4, !58, i64 8, !58, i64 9, !58, i64 10, !10, i64 12, !138, i64 16, !139, i64 20}
!136 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !10, i64 0}
!137 = !{!"_ZTSN3spv3DimE", !8, i64 0}
!138 = !{!"_ZTSN3spv11ImageFormatE", !8, i64 0}
!139 = !{!"_ZTSN3spv15AccessQualifierE", !8, i64 0}
!140 = !{!141, !58, i64 57}
!141 = !{!"_ZTSN11spirv_cross14SPIRExpressionE", !128, i64 0, !129, i64 12, !61, i64 16, !136, i64 48, !129, i64 52, !58, i64 56, !58, i64 57, !58, i64 58, !58, i64 59, !38, i64 64, !38, i64 120, !38, i64 176, !10, i64 232}
!142 = !{!143, !143, i64 0}
!143 = !{!"vtable pointer", !9, i64 0}
!144 = !{!15, !58, i64 8405}
!145 = !{!127, !13, i64 16}
!146 = !{!127, !10, i64 28}
!147 = !{!58, !58, i64 0}
!148 = !{!149, !58, i64 4}
!149 = !{!"_ZTSN11spirv_cross15AccessChainMetaE", !10, i64 0, !58, i64 4, !58, i64 5, !58, i64 6, !58, i64 7, !58, i64 8, !58, i64 9, !58, i64 10, !150, i64 12}
!150 = !{!"_ZTSN3spv7BuiltInE", !8, i64 0}
!151 = !{!141, !58, i64 58}
!152 = !{!149, !58, i64 9}
!153 = !{!141, !58, i64 59}
!154 = !{!149, !58, i64 5}
!155 = !{!149, !10, i64 0}
!156 = !{!149, !58, i64 6}
!157 = !{!149, !58, i64 7}
!158 = !{!149, !58, i64 8}
!159 = !{!15, !58, i64 8410}
!160 = !{!149, !58, i64 10}
!161 = !{!149, !150, i64 12}
!162 = distinct !{!162, !163}
!163 = !{!"llvm.loop.mustprogress"}
!164 = !{!165, !58, i64 89}
!165 = !{!"_ZTSN11spirv_cross12SPIRVariableE", !128, i64 0, !136, i64 12, !134, i64 16, !10, i64 20, !129, i64 24, !166, i64 28, !66, i64 32, !58, i64 88, !58, i64 89, !129, i64 92, !38, i64 96, !58, i64 152, !58, i64 153, !58, i64 154, !58, i64 155, !10, i64 156, !167, i64 160, !58, i64 164, !58, i64 165, !58, i64 166, !24, i64 168}
!166 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE2EEE", !10, i64 0}
!167 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE6EEE", !10, i64 0}
!168 = !{!165, !58, i64 164}
!169 = !{!165, !58, i64 165}
!170 = !{!165, !58, i64 155}
!171 = !{!127, !58, i64 124}
!172 = !{!173, !10, i64 12}
!173 = !{!"_ZTSN11spirv_cross12SPIRFunction9ParameterE", !136, i64 0, !129, i64 4, !10, i64 8, !10, i64 12, !58, i64 16}
!174 = distinct !{!174, !163}
!175 = distinct !{!175, !163}
!176 = !{!177, !58, i64 12}
!177 = !{!"_ZTSN11spirv_cross12SPIRFunction29CombinedImageSamplerParameterE", !166, i64 0, !166, i64 4, !166, i64 8, !58, i64 12, !58, i64 13, !58, i64 14}
!178 = !{!177, !58, i64 13}
!179 = distinct !{!179, !163}
!180 = distinct !{!180, !163}
!181 = !{!15, !58, i64 8391}
!182 = distinct !{!182, !163, !183, !184}
!183 = !{!"llvm.loop.isvectorized", i32 1}
!184 = !{!"llvm.loop.unroll.runtime.disable"}
!185 = distinct !{!185, !163, !184, !183}
!186 = !{!15, !58, i64 8384}
!187 = !{!15, !58, i64 8385}
!188 = !{!15, !58, i64 8398}
!189 = !{!15, !58, i64 8397}
!190 = distinct !{!190, !163}
!191 = !{!192, !58, i64 264}
!192 = !{!"_ZTSN11spirv_cross12SPIRConstantE", !128, i64 0, !136, i64 12, !193, i64 16, !58, i64 264, !58, i64 265, !58, i64 266, !194, i64 272, !61, i64 328}
!193 = !{!"_ZTSN11spirv_cross12SPIRConstant14ConstantMatrixE", !8, i64 0, !8, i64 224, !10, i64 240}
!194 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE3EEELm8EEE", !195, i64 0, !31, i64 16, !196, i64 24}
!195 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE3EEEEE", !24, i64 0, !31, i64 8}
!196 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE3EEELm8EEE", !8, i64 0}
!197 = !{!6, !10, i64 4}
!198 = distinct !{!198, !163, !183, !184}
!199 = distinct !{!199, !163, !184, !183}
!200 = distinct !{!200, !163}
!201 = !{!15, !58, i64 8380}
!202 = distinct !{!202, !163}
!203 = distinct !{!203, !163}
!204 = !{!15, !10, i64 7636}
!205 = distinct !{!205, !163}
!206 = !{!8, !8, i64 0}
!207 = !{!15, !58, i64 7640}
!208 = !{!24, !24, i64 0}
!209 = !{!127, !10, i64 20}
!210 = !{!127, !134, i64 128}
!211 = !{!15, !24, i64 8360}
!212 = !{!127, !10, i64 260}
!213 = !{!127, !137, i64 252}
!214 = !{!127, !58, i64 258}
!215 = !{!165, !10, i64 156}
!216 = !{!217, !218, i64 4}
!217 = !{!"_ZTSN11spirv_cross8PlsRemapE", !10, i64 0, !218, i64 4}
!218 = !{!"_ZTSN11spirv_cross9PlsFormatE", !8, i64 0}
!219 = !{!15, !58, i64 7648}
!220 = !{!221, !226, i64 232}
!221 = !{!"_ZTSN11spirv_cross14SPIREntryPointE", !56, i64 0, !61, i64 8, !61, i64 40, !222, i64 72, !63, i64 128, !225, i64 192, !10, i64 220, !10, i64 224, !10, i64 228, !226, i64 232, !58, i64 236}
!222 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE2EEELm8EEE", !223, i64 0, !31, i64 16, !224, i64 24}
!223 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEEE", !24, i64 0, !31, i64 8}
!224 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE2EEELm8EEE", !8, i64 0}
!225 = !{!"_ZTSN11spirv_cross14SPIREntryPoint13WorkgroupSizeE", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24}
!226 = !{!"_ZTSN3spv14ExecutionModelE", !8, i64 0}
!227 = !{!15, !24, i64 3176}
!228 = !{!229, !230, i64 12}
!229 = !{!"_ZTSN11spirv_cross13SPIRExtensionE", !128, i64 0, !230, i64 12}
!230 = !{!"_ZTSN11spirv_cross13SPIRExtension9ExtensionE", !8, i64 0}
!231 = distinct !{!231, !163}
!232 = !{!15, !58, i64 9396}
!233 = !{!16, !58, i64 3112}


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