; 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::ValueSaver" = type <{ ptr, i32, [4 x i8] }>
%"class.spirv_cross::TypedID.282" = type { i32 }
%"struct.std::__detail::_Node_iterator.339" = type { %"struct.std::__detail::_Node_iterator_base.340" }
%"struct.std::__detail::_Node_iterator_base.340" = type { ptr }
%class.anon.459 = type { %"struct.std::__detail::_Node_iterator.339" }
%"struct.std::pair.457" = type { %"class.spirv_cross::TypedID.281", %"class.spirv_cross::TypedID.280" }
%"class.spirv_cross::TypedID.281" = type { i32 }
%"class.spirv_cross::TypedID.280" = type { i32 }
%"class.spirv_cross::SmallVector.460" = type { %"class.spirv_cross::VectorView.285", i64, %"class.spirv_cross::AlignedBuffer.461" }
%"class.spirv_cross::VectorView.285" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.461" = type { [64 x i8] }
%"class.spirv_cross::TypedID.283" = type { i32 }
%"class.std::unordered_map.462" = type { %"class.std::_Hashtable.463" }
%"class.std::_Hashtable.463" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%"class.spirv_cross::SmallVector.92" = type { %"class.spirv_cross::VectorView.93", i64, %"class.spirv_cross::AlignedBuffer.94" }
%"class.spirv_cross::VectorView.93" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.94" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.476" = type { %"class.spirv_cross::VectorView.477", i64, %"class.spirv_cross::AlignedBuffer.478" }
%"class.spirv_cross::VectorView.477" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.478" = type { [64 x i8] }
%class.anon.479 = type { i8 }
%class.anon.481 = type { ptr }
%"class.spirv_cross::SmallVector.27" = type { %"class.spirv_cross::VectorView.28", i64, %"class.spirv_cross::AlignedBuffer.29" }
%"class.spirv_cross::VectorView.28" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.29" = type { [256 x i8] }
%"class.std::allocator.71" = type { i8 }
%"class.spirv_cross::Compiler" = type { ptr, %"class.spirv_cross::ParsedIR", %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.92", ptr, ptr, i32, %"class.std::unordered_set.95", i8, %"class.std::unordered_set", i8, i8, %"class.spirv_cross::SmallVector.114", %"class.spirv_cross::SmallVector.92", %"class.std::function", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.spirv_cross::Bitset", %"class.spirv_cross::Bitset", i32, i32, i8, %"class.std::unordered_set", i8, i8, i32, %"class.std::unordered_map.117", %"class.spirv_cross::SmallVector.92", %"class.std::unordered_map.131", %"class.std::unordered_set", i8, %"class.std::unordered_map.145" }
%"class.spirv_cross::ParsedIR" = type { %"class.std::unique_ptr", %"class.std::vector", %"class.spirv_cross::SmallVector", %"class.std::unordered_map", [14 x %"class.spirv_cross::SmallVector.7"], %"class.spirv_cross::SmallVector.7", %"class.spirv_cross::SmallVector.7", %"class.std::unordered_map.10", %"class.spirv_cross::SmallVector.24", %"class.spirv_cross::SmallVector.27", %"class.spirv_cross::SmallVector.30", %"class.std::unordered_map.33", %"class.std::unordered_map.52", %"class.spirv_cross::TypedID", %"struct.spirv_cross::ParsedIR::Source", i32, i32, i32, i32, %"class.std::__cxx11::basic_string", %"class.spirv_cross::Bitset", %"class.std::unordered_set" }
%"class.std::unique_ptr" = type { %"struct.std::__uniq_ptr_data" }
%"struct.std::__uniq_ptr_data" = type { %"class.std::__uniq_ptr_impl" }
%"class.std::__uniq_ptr_impl" = type { %"class.std::tuple" }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Head_base.1" }
%"struct.std::_Head_base.1" = type { ptr }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.spirv_cross::SmallVector" = type { %"class.spirv_cross::VectorView", i64, %"class.spirv_cross::AlignedBuffer" }
%"class.spirv_cross::VectorView" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer" = type { [192 x i8] }
%"class.std::unordered_map" = type { %"class.std::_Hashtable" }
%"class.std::_Hashtable" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.7" = type { %"class.spirv_cross::VectorView.8", i64, %"class.spirv_cross::AlignedBuffer.9" }
%"class.spirv_cross::VectorView.8" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.9" = type { [32 x i8] }
%"class.std::unordered_map.10" = type { %"class.std::_Hashtable.11" }
%"class.std::_Hashtable.11" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.24" = type { %"class.spirv_cross::VectorView.25", i64, %"class.spirv_cross::AlignedBuffer.26" }
%"class.spirv_cross::VectorView.25" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.26" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.30" = type { %"class.spirv_cross::VectorView.31", i64, %"class.spirv_cross::AlignedBuffer.32" }
%"class.spirv_cross::VectorView.31" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.32" = type { [8 x i8] }
%"class.std::unordered_map.33" = type { %"class.std::_Hashtable.34" }
%"class.std::_Hashtable.34" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.52" = type { %"class.std::_Hashtable.53" }
%"class.std::_Hashtable.53" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::TypedID" = type { i32 }
%"struct.spirv_cross::ParsedIR::Source" = type <{ i32, i8, i8, i8, i8 }>
%"class.std::unordered_set.95" = type { %"class.std::_Hashtable.96" }
%"class.std::_Hashtable.96" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.114" = type { %"class.spirv_cross::VectorView.115", i64, %"class.spirv_cross::AlignedBuffer.116" }
%"class.spirv_cross::VectorView.115" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.116" = type { [96 x i8] }
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%"class.std::_Function_base" = type { %"union.std::_Any_data", ptr }
%"union.std::_Any_data" = type { %"union.std::_Nocopy_types" }
%"union.std::_Nocopy_types" = type { { i64, i64 } }
%"class.spirv_cross::Bitset" = type { i64, %"class.std::unordered_set" }
%"class.std::unordered_map.117" = type { %"class.std::_Hashtable.118" }
%"class.std::_Hashtable.118" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.131" = type { %"class.std::_Hashtable.132" }
%"class.std::_Hashtable.132" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_set" = type { %"class.std::_Hashtable.74" }
%"class.std::_Hashtable.74" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.145" = type { %"class.std::_Hashtable.146" }
%"class.std::_Hashtable.146" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.spirv_cross::SPIRBlock" = type { %"struct.spirv_cross::IVariant.base", i32, i32, i32, %"class.spirv_cross::TypedID.283", %"class.spirv_cross::TypedID.283", %"class.spirv_cross::TypedID.283", %"class.spirv_cross::TypedID.280", %"class.spirv_cross::TypedID.280", %"class.spirv_cross::TypedID.283", %"class.spirv_cross::TypedID.283", %"class.spirv_cross::TypedID.283", %struct.anon, %"class.spirv_cross::SmallVector.369", %"class.spirv_cross::SmallVector.372", %"class.spirv_cross::SmallVector.375", %"class.spirv_cross::SmallVector.375", %"class.spirv_cross::SmallVector.378", %"class.spirv_cross::SmallVector.378", i8, i8, i8, %"class.spirv_cross::TypedID.283", %"class.spirv_cross::TypedID.283", %"class.spirv_cross::SmallVector.293", %"class.spirv_cross::SmallVector.293", %"class.spirv_cross::SmallVector.7" }
%"struct.spirv_cross::IVariant.base" = type <{ ptr, %"class.spirv_cross::TypedID.280" }>
%struct.anon = type { [3 x %"class.spirv_cross::TypedID.280"], %"class.spirv_cross::TypedID.280" }
%"class.spirv_cross::SmallVector.369" = type { %"class.spirv_cross::VectorView.370", i64, %"class.spirv_cross::AlignedBuffer.371" }
%"class.spirv_cross::VectorView.370" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.371" = type { [96 x i8] }
%"class.spirv_cross::SmallVector.372" = type { %"class.spirv_cross::VectorView.373", i64, %"class.spirv_cross::AlignedBuffer.374" }
%"class.spirv_cross::VectorView.373" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.374" = type { [96 x i8] }
%"class.spirv_cross::SmallVector.375" = type { %"class.spirv_cross::VectorView.376", i64, %"class.spirv_cross::AlignedBuffer.377" }
%"class.spirv_cross::VectorView.376" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.377" = type { [64 x i8] }
%"class.spirv_cross::SmallVector.378" = type { %"class.spirv_cross::VectorView.379", i64, %"class.spirv_cross::AlignedBuffer.380" }
%"class.spirv_cross::VectorView.379" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.380" = type { [128 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] }
%"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::CompilerGLSL" = type { %"class.spirv_cross::Compiler", ptr, %"class.spirv_cross::SmallVector.159", i8, %"class.spirv_cross::StringStream", ptr, ptr, i8, i8, %"struct.spirv_cross::CompilerGLSL::Options", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_set.165", %"class.std::unordered_map.185", %"class.std::unordered_map.145", i8, [7 x i8], %"struct.spirv_cross::CompilerGLSL::BackendVariations", i32, %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_map.199", %"struct.spirv_cross::CompilerGLSL::ShaderSubgroupSupportHelper", %"class.std::unordered_map.213", %"class.spirv_cross::SmallVector.27", %"class.spirv_cross::SmallVector.27", %"class.std::unordered_map.213", %"class.spirv_cross::SmallVector.227", i32, i32, i32, i8, i8, %"class.std::vector.230", %"class.std::vector.230", %"class.std::vector.235", %"class.std::vector.240", %"class.std::unordered_map.213", %"class.std::unordered_set", %"class.std::unordered_set", i8, %"class.std::unordered_set.245", %"class.std::unordered_set", ptr, %"class.std::unordered_map.263" }
%"class.spirv_cross::SmallVector.159" = type { %"class.spirv_cross::VectorView.160", i64, %"class.spirv_cross::AlignedBuffer.161" }
%"class.spirv_cross::VectorView.160" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.161" = type { [64 x i8] }
%"class.spirv_cross::StringStream" = type { %"struct.spirv_cross::StringStream<>::Buffer", [4096 x i8], %"class.spirv_cross::SmallVector.162" }
%"struct.spirv_cross::StringStream<>::Buffer" = type { ptr, i64, i64 }
%"class.spirv_cross::SmallVector.162" = type { %"class.spirv_cross::VectorView.163", i64, %"class.spirv_cross::AlignedBuffer.164" }
%"class.spirv_cross::VectorView.163" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.164" = type { [192 x i8] }
%"struct.spirv_cross::CompilerGLSL::Options" = type { i32, i8, i8, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i32, %"struct.spirv_cross::CompilerGLSL::Options::VertexOptions", %"struct.spirv_cross::CompilerGLSL::Options::FragmentOptions" }
%"struct.spirv_cross::CompilerGLSL::Options::VertexOptions" = type { i8, i8, i8 }
%"struct.spirv_cross::CompilerGLSL::Options::FragmentOptions" = type { i32, i32 }
%"class.std::unordered_set.165" = type { %"class.std::_Hashtable.166" }
%"class.std::_Hashtable.166" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.185" = type { %"class.std::_Hashtable.186" }
%"class.std::_Hashtable.186" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.spirv_cross::CompilerGLSL::BackendVariations" = type <{ %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", i8, i8, i8, i8, [4 x i8], ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, [4 x i8] }>
%"class.std::unordered_map.199" = type { %"class.std::_Hashtable.200" }
%"class.std::_Hashtable.200" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.spirv_cross::CompilerGLSL::ShaderSubgroupSupportHelper" = type { i32 }
%"class.spirv_cross::SmallVector.227" = type { %"class.spirv_cross::VectorView.228", i64, %"class.spirv_cross::AlignedBuffer.229" }
%"class.spirv_cross::VectorView.228" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.229" = type { [32 x i8] }
%"class.std::vector.230" = type { %"struct.std::_Vector_base.231" }
%"struct.std::_Vector_base.231" = type { %"struct.std::_Vector_base<spirv_cross::PlsRemap, std::allocator<spirv_cross::PlsRemap>>::_Vector_impl" }
%"struct.std::_Vector_base<spirv_cross::PlsRemap, std::allocator<spirv_cross::PlsRemap>>::_Vector_impl" = type { %"struct.std::_Vector_base<spirv_cross::PlsRemap, std::allocator<spirv_cross::PlsRemap>>::_Vector_impl_data" }
%"struct.std::_Vector_base<spirv_cross::PlsRemap, std::allocator<spirv_cross::PlsRemap>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.235" = type { %"struct.std::_Vector_base.236" }
%"struct.std::_Vector_base.236" = type { %"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.240" = type { %"struct.std::_Vector_base.241" }
%"struct.std::_Vector_base.241" = type { %"struct.std::_Vector_base<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<unsigned int, bool>, std::allocator<std::pair<unsigned int, bool>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::unordered_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_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.std::pair.341" = type { i32, i32 }
%"struct.spirv_cross::IVariant" = type <{ ptr, %"class.spirv_cross::TypedID.280", [4 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" }
%"class.spirv_cross::SmallVector.284" = type { %"class.spirv_cross::VectorView.285", i64, %"class.spirv_cross::AlignedBuffer.286" }
%"class.spirv_cross::AlignedBuffer.286" = type { [8 x i8] }
%"struct.spirv_cross::SPIRType::ImageType" = type { %"class.spirv_cross::TypedID.281", i32, i8, i8, i8, i32, i32, i32 }
%"struct.spirv_cross::SPIRBlock::Case" = type <{ i64, %"class.spirv_cross::TypedID.283", [4 x i8] }>
%"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.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 }
%"class.std::function.349" = type { %"class.std::_Function_base", ptr }

@.str.9 = external hidden unnamed_addr constant [1 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.135 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.136 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.298 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.542 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.547 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.809 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.968 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1003 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1011 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1388 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1488 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1623 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1624 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1631 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1632 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.1633 = external hidden unnamed_addr constant [41 x i8], align 1
@__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL16emit_block_chainERNS_9SPIRBlockE = external hidden unnamed_addr constant [62 x i8], align 1
@.str.1634 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.1635 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.1636 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.1637 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1638 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1639 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.1640 = external hidden unnamed_addr constant [81 x i8], align 1
@.str.1641 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1642 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.1643 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.1644 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.1645 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1646 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.1647 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.1648 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1649 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1650 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1651 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.1652 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1653 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.1654 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.1655 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1656 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.1657 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.1658 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.1659 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.1660 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.1661 = external hidden unnamed_addr constant [69 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: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #1

declare ptr @__cxa_allocate_exception(i64)

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

declare 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 #3

declare void @__cxa_throw(ptr, ptr, ptr)

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9end_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848)) #2 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)) #4 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRA33_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 1 dereferenceable(33)) #7 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 #4 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 #4 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)) #7 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) #7

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16)) #4 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)) #2 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)) #7 align 2

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE7reserveEm(ptr noundef nonnull align 8 dereferenceable(280), i64 noundef) #4 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) #2 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

199:                                              ; preds = %2
  invoke void @_ZN11spirv_cross8Compiler14add_loop_levelEv(ptr noundef nonnull align 8 dereferenceable(3176) %193)
          to label %200 unwind label %201

200:                                              ; preds = %199
  br label %205

201:                                              ; preds = %291, %199
  %202 = landingpad { ptr, i32 }
          cleanup
  %203 = extractvalue { ptr, i32 } %202, 0
  store ptr %203, ptr %11, align 8
  %204 = extractvalue { ptr, i32 } %202, 1
  store i32 %204, ptr %12, align 4
  br label %2510

205:                                              ; preds = %200, %2
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #9
  %206 = load ptr, ptr %4, align 8, !tbaa !5
  %207 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %206, i32 0, i32 24
  store ptr %207, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #9
  %208 = load ptr, ptr %13, align 8, !tbaa !5
  %209 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %208) #9
  store ptr %209, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #9
  %210 = load ptr, ptr %13, align 8, !tbaa !5
  %211 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %210) #9
  store ptr %211, ptr %15, align 8, !tbaa !5
  br label %212

212:                                              ; preds = %287, %205
  %213 = load ptr, ptr %14, align 8, !tbaa !5
  %214 = load ptr, ptr %15, align 8, !tbaa !5
  %215 = icmp ne ptr %213, %214
  br i1 %215, label %217, label %216

216:                                              ; preds = %212
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #9
  br label %291

217:                                              ; preds = %212
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #9
  %218 = load ptr, ptr %14, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %16, ptr align 4 %218, i64 4, i1 false), !tbaa.struct !40
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #9
  %219 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %16)
          to label %220 unwind label %268

220:                                              ; preds = %217
  %221 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %193, i32 noundef %219)
          to label %222 unwind label %268

222:                                              ; preds = %220
  store ptr %221, ptr %17, align 8, !tbaa !5
  %223 = load ptr, ptr %17, align 8, !tbaa !5
  %224 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %223, i32 0, i32 12
  %225 = load i8, ptr %224, align 1, !tbaa !42, !range !50, !noundef !51
  %226 = trunc i8 %225 to i1
  br i1 %226, label %227, label %286

227:                                              ; preds = %222
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #9
  %228 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %193, i32 0, i32 42
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #9
  %229 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %16)
          to label %230 unwind label %272

230:                                              ; preds = %227
  store i32 %229, ptr %19, align 4, !tbaa !41
  %231 = invoke ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEE4findERS5_(ptr noundef nonnull align 8 dereferenceable(56) %228, ptr noundef nonnull align 4 dereferenceable(4) %19)
          to label %232 unwind label %272

232:                                              ; preds = %230
  %233 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.339", ptr %18, i32 0, i32 0
  %234 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.340", ptr %233, i32 0, i32 0
  store ptr %231, ptr %234, align 8
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #9
  %235 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %193, i32 0, i32 42
  %236 = call ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %235) #9
  %237 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.339", ptr %20, i32 0, i32 0
  %238 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.340", ptr %237, i32 0, i32 0
  store ptr %236, ptr %238, align 8
  %239 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseISt4pairIKjjELb0EEES6_(ptr noundef nonnull align 8 dereferenceable(8) %18, ptr noundef nonnull align 8 dereferenceable(8) %20) #9
  br i1 %239, label %240, label %258

240:                                              ; preds = %232
  %241 = load ptr, ptr %4, align 8, !tbaa !5
  %242 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %241, i32 0, i32 15
  %243 = call noundef ptr @_ZN11spirv_cross10VectorViewISt4pairINS_7TypedIDILNS_5TypesE1EEENS2_ILS3_0EEEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %242) #9
  %244 = load ptr, ptr %4, align 8, !tbaa !5
  %245 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %244, i32 0, i32 15
  %246 = call noundef ptr @_ZN11spirv_cross10VectorViewISt4pairINS_7TypedIDILNS_5TypesE1EEENS2_ILS3_0EEEEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %245) #9
  %247 = getelementptr inbounds %class.anon.459, ptr %21, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %247, ptr align 8 %18, i64 8, i1 false)
  %248 = getelementptr inbounds %class.anon.459, ptr %21, i32 0, i32 0
  %249 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.339", ptr %248, i32 0, i32 0
  %250 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.340", ptr %249, i32 0, i32 0
  %251 = load ptr, ptr %250, align 8
  %252 = invoke noundef ptr @"_ZSt7find_ifIPSt4pairIN11spirv_cross7TypedIDILNS1_5TypesE1EEENS2_ILS3_0EEEEZNS1_12CompilerGLSL16emit_block_chainERNS1_9SPIRBlockEE3$_0ET_SC_SC_T0_"(ptr noundef %243, ptr noundef %246, ptr %251)
          to label %253 unwind label %276

253:                                              ; preds = %240
  %254 = load ptr, ptr %4, align 8, !tbaa !5
  %255 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %254, i32 0, i32 15
  %256 = call noundef ptr @_ZN11spirv_cross10VectorViewISt4pairINS_7TypedIDILNS_5TypesE1EEENS2_ILS3_0EEEEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %255) #9
  %257 = icmp eq ptr %252, %256
  br label %258

258:                                              ; preds = %253, %232
  %259 = phi i1 [ false, %232 ], [ %257, %253 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #9
  br i1 %259, label %260, label %284

260:                                              ; preds = %258
  %261 = load ptr, ptr %4, align 8, !tbaa !5
  %262 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %261, i32 0, i32 15
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #9
  %263 = load ptr, ptr %17, align 8, !tbaa !5
  %264 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %263, i32 0, i32 1
  %265 = call noundef ptr @_ZNKSt8__detail14_Node_iteratorISt4pairIKjjELb0ELb0EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %18) #9
  %266 = getelementptr inbounds %"struct.std::pair.341", ptr %265, i32 0, i32 1
  invoke void @_ZNSt4pairIN11spirv_cross7TypedIDILNS0_5TypesE1EEENS1_ILS2_0EEEEC2IRS3_RjTnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairISA_SB_EEEbE4typeELb1EEEOSA_OSB_(ptr noundef nonnull align 4 dereferenceable(8) %22, ptr noundef nonnull align 4 dereferenceable(4) %264, ptr noundef nonnull align 4 dereferenceable(4) %266)
          to label %267 unwind label %280

267:                                              ; preds = %260
  call void @_ZN11spirv_cross11SmallVectorISt4pairINS_7TypedIDILNS_5TypesE1EEENS2_ILS3_0EEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(88) %262, ptr noundef nonnull align 4 dereferenceable(8) %22) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #9
  br label %284

268:                                              ; preds = %220, %217
  %269 = landingpad { ptr, i32 }
          cleanup
  %270 = extractvalue { ptr, i32 } %269, 0
  store ptr %270, ptr %11, align 8
  %271 = extractvalue { ptr, i32 } %269, 1
  store i32 %271, ptr %12, align 4
  br label %290

272:                                              ; preds = %230, %227
  %273 = landingpad { ptr, i32 }
          cleanup
  %274 = extractvalue { ptr, i32 } %273, 0
  store ptr %274, ptr %11, align 8
  %275 = extractvalue { ptr, i32 } %273, 1
  store i32 %275, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #9
  br label %285

276:                                              ; preds = %240
  %277 = landingpad { ptr, i32 }
          cleanup
  %278 = extractvalue { ptr, i32 } %277, 0
  store ptr %278, ptr %11, align 8
  %279 = extractvalue { ptr, i32 } %277, 1
  store i32 %279, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #9
  br label %285

280:                                              ; preds = %260
  %281 = landingpad { ptr, i32 }
          cleanup
  %282 = extractvalue { ptr, i32 } %281, 0
  store ptr %282, ptr %11, align 8
  %283 = extractvalue { ptr, i32 } %281, 1
  store i32 %283, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #9
  br label %285

284:                                              ; preds = %267, %258
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #9
  br label %286

285:                                              ; preds = %280, %276, %272
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #9
  br label %290

286:                                              ; preds = %284, %222
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #9
  br label %287

287:                                              ; preds = %286
  %288 = load ptr, ptr %14, align 8, !tbaa !5
  %289 = getelementptr inbounds %"class.spirv_cross::TypedID.282", ptr %288, i32 1
  store ptr %289, ptr %14, align 8, !tbaa !5
  br label %212

290:                                              ; preds = %285, %268
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #9
  br label %2510

291:                                              ; preds = %216
  %292 = load ptr, ptr %4, align 8, !tbaa !5
  %293 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %292, i32 0, i32 15
  invoke void @_ZN11spirv_cross12CompilerGLSL24emit_hoisted_temporariesERNS_11SmallVectorISt4pairINS_7TypedIDILNS_5TypesE1EEENS3_ILS4_0EEEELm8EEE(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 8 dereferenceable(88) %293)
          to label %294 unwind label %201

294:                                              ; preds = %291
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #9
  store i32 0, ptr %23, align 4, !tbaa !52
  %295 = load ptr, ptr %4, align 8, !tbaa !5
  %296 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %295, i32 0, i32 6
  %297 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %296)
          to label %298 unwind label %314

298:                                              ; preds = %294
  %299 = icmp ne i32 %297, 0
  br i1 %299, label %300, label %319

300:                                              ; preds = %298
  %301 = load ptr, ptr %4, align 8, !tbaa !5
  %302 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %301, i32 0, i32 6
  %303 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %302)
          to label %304 unwind label %314

304:                                              ; preds = %300
  %305 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %193, i32 noundef %303)
          to label %306 unwind label %314

306:                                              ; preds = %304
  %307 = invoke noundef i32 @_ZNK11spirv_cross8Compiler19continue_block_typeERKNS_9SPIRBlockE(ptr noundef nonnull align 8 dereferenceable(3176) %193, ptr noundef nonnull align 8 dereferenceable(976) %305)
          to label %308 unwind label %314

308:                                              ; preds = %306
  store i32 %307, ptr %23, align 4, !tbaa !52
  %309 = load i32, ptr %23, align 4, !tbaa !52
  %310 = icmp eq i32 %309, 4
  br i1 %310, label %311, label %318

311:                                              ; preds = %308
  %312 = load ptr, ptr %4, align 8, !tbaa !5
  %313 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %312, i32 0, i32 20
  store i8 1, ptr %313, align 1, !tbaa !54
  br label %318

314:                                              ; preds = %306, %304, %300, %294
  %315 = landingpad { ptr, i32 }
          cleanup
  %316 = extractvalue { ptr, i32 } %315, 0
  store ptr %316, ptr %11, align 8
  %317 = extractvalue { ptr, i32 } %315, 1
  store i32 %317, ptr %12, align 4
  br label %2509

318:                                              ; preds = %311, %308
  br label %319

319:                                              ; preds = %318, %298
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #9
  %320 = load ptr, ptr %4, align 8, !tbaa !5
  %321 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %320, i32 0, i32 25
  store ptr %321, ptr %24, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #9
  %322 = load ptr, ptr %24, align 8, !tbaa !5
  %323 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %322) #9
  store ptr %323, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #9
  %324 = load ptr, ptr %24, align 8, !tbaa !5
  %325 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %324) #9
  store ptr %325, ptr %26, align 8, !tbaa !5
  br label %326

326:                                              ; preds = %341, %319
  %327 = load ptr, ptr %25, align 8, !tbaa !5
  %328 = load ptr, ptr %26, align 8, !tbaa !5
  %329 = icmp ne ptr %327, %328
  br i1 %329, label %331, label %330

330:                                              ; preds = %326
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #9
  br label %348

331:                                              ; preds = %326
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #9
  %332 = load ptr, ptr %25, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %27, ptr align 4 %332, i64 4, i1 false), !tbaa.struct !40
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #9
  %333 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %27)
          to label %334 unwind label %344

334:                                              ; preds = %331
  %335 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %193, i32 noundef %333)
          to label %336 unwind label %344

336:                                              ; preds = %334
  store ptr %335, ptr %28, align 8, !tbaa !5
  %337 = load ptr, ptr %28, align 8, !tbaa !5
  %338 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %337, i32 0, i32 18
  store i8 1, ptr %338, align 1, !tbaa !55
  %339 = load ptr, ptr %28, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL30emit_variable_temporary_copiesERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 8 dereferenceable(176) %339)
          to label %340 unwind label %344

340:                                              ; preds = %336
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #9
  br label %341

341:                                              ; preds = %340
  %342 = load ptr, ptr %25, align 8, !tbaa !5
  %343 = getelementptr inbounds %"class.spirv_cross::TypedID.282", ptr %342, i32 1
  store ptr %343, ptr %25, align 8, !tbaa !5
  br label %326

344:                                              ; preds = %336, %334, %331
  %345 = landingpad { ptr, i32 }
          cleanup
  %346 = extractvalue { ptr, i32 } %345, 0
  store ptr %346, ptr %11, align 8
  %347 = extractvalue { ptr, i32 } %345, 1
  store i32 %347, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #9
  br label %2509

348:                                              ; preds = %330
  call void @llvm.lifetime.start.p0(i64 88, ptr %29) #9
  %349 = load ptr, ptr %4, align 8, !tbaa !5
  %350 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %349, i32 0, i32 24
  %351 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %350) #9
  call void @_ZN11spirv_cross11SmallVectorIbLm64EEC2Em(ptr noundef nonnull align 8 dereferenceable(88) %29, i64 noundef %351) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #9
  store i64 0, ptr %30, align 8, !tbaa !56
  br label %352

352:                                              ; preds = %376, %348
  %353 = load i64, ptr %30, align 8, !tbaa !56
  %354 = load ptr, ptr %4, align 8, !tbaa !5
  %355 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %354, i32 0, i32 24
  %356 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %355) #9
  %357 = icmp ult i64 %353, %356
  br i1 %357, label %359, label %358

358:                                              ; preds = %352
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #9
  br label %388

359:                                              ; preds = %352
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #9
  %360 = load ptr, ptr %4, align 8, !tbaa !5
  %361 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %360, i32 0, i32 24
  %362 = load i64, ptr %30, align 8, !tbaa !56
  %363 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %361, i64 noundef %362) #9
  %364 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %363)
          to label %365 unwind label %379

365:                                              ; preds = %359
  store i32 %364, ptr %31, align 4, !tbaa !41
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #9
  %366 = load i32, ptr %31, align 4, !tbaa !41
  %367 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %193, i32 noundef %366)
          to label %368 unwind label %383

368:                                              ; preds = %365
  store ptr %367, ptr %32, align 8, !tbaa !5
  %369 = load ptr, ptr %32, align 8, !tbaa !5
  %370 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %369, i32 0, i32 11
  %371 = load i8, ptr %370, align 8, !tbaa !57, !range !50, !noundef !51
  %372 = trunc i8 %371 to i1
  %373 = load i64, ptr %30, align 8, !tbaa !56
  %374 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZN11spirv_cross10VectorViewIbEixEm(ptr noundef nonnull align 8 dereferenceable(16) %29, i64 noundef %373) #9
  %375 = zext i1 %372 to i8
  store i8 %375, ptr %374, align 1, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #9
  br label %376

376:                                              ; preds = %368
  %377 = load i64, ptr %30, align 8, !tbaa !56
  %378 = add i64 %377, 1
  store i64 %378, ptr %30, align 8, !tbaa !56
  br label %352, !llvm.loop !58

379:                                              ; preds = %359
  %380 = landingpad { ptr, i32 }
          cleanup
  %381 = extractvalue { ptr, i32 } %380, 0
  store ptr %381, ptr %11, align 8
  %382 = extractvalue { ptr, i32 } %380, 1
  store i32 %382, ptr %12, align 4
  br label %387

383:                                              ; preds = %365
  %384 = landingpad { ptr, i32 }
          cleanup
  %385 = extractvalue { ptr, i32 } %384, 0
  store ptr %385, ptr %11, align 8
  %386 = extractvalue { ptr, i32 } %384, 1
  store i32 %386, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #9
  br label %387

387:                                              ; preds = %383, %379
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #9
  br label %2508

388:                                              ; preds = %358
  %389 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL12is_legacy_esEv(ptr noundef nonnull align 8 dereferenceable(9848) %193)
          to label %390 unwind label %417

390:                                              ; preds = %388
  br i1 %389, label %424, label %391

391:                                              ; preds = %390
  %392 = load ptr, ptr %4, align 8, !tbaa !5
  %393 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler23block_is_loop_candidateERKNS_9SPIRBlockENS1_6MethodE(ptr noundef nonnull align 8 dereferenceable(3176) %193, ptr noundef nonnull align 8 dereferenceable(976) %392, i32 noundef 2)
          to label %394 unwind label %417

394:                                              ; preds = %391
  br i1 %393, label %395, label %424

395:                                              ; preds = %394
  %396 = load ptr, ptr %4, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL26flush_undeclared_variablesERNS_9SPIRBlockE(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 8 dereferenceable(976) %396)
          to label %397 unwind label %417

397:                                              ; preds = %395
  %398 = load ptr, ptr %4, align 8, !tbaa !5
  %399 = invoke noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL24attempt_emit_loop_headerERNS_9SPIRBlockENS1_6MethodE(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 8 dereferenceable(976) %398, i32 noundef 2)
          to label %400 unwind label %417

400:                                              ; preds = %397
  br i1 %399, label %401, label %423

401:                                              ; preds = %400
  %402 = load ptr, ptr %4, align 8, !tbaa !5
  %403 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %402, i32 0, i32 9
  %404 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %403)
          to label %405 unwind label %417

405:                                              ; preds = %401
  %406 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %193, i32 noundef %404)
          to label %407 unwind label %417

407:                                              ; preds = %405
  %408 = load ptr, ptr %4, align 8, !tbaa !5
  %409 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %408, i32 0, i32 5
  %410 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %409)
          to label %411 unwind label %417

411:                                              ; preds = %407
  %412 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %193, i32 noundef %410)
          to label %413 unwind label %417

413:                                              ; preds = %411
  %414 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler17execution_is_noopERKNS_9SPIRBlockES3_(ptr noundef nonnull align 8 dereferenceable(3176) %193, ptr noundef nonnull align 8 dereferenceable(976) %406, ptr noundef nonnull align 8 dereferenceable(976) %412)
          to label %415 unwind label %417

415:                                              ; preds = %413
  br i1 %414, label %416, label %421

416:                                              ; preds = %415
  store i8 1, ptr %6, align 1, !tbaa !9
  br label %422

417:                                              ; preds = %553, %523, %509, %506, %505, %504, %499, %495, %493, %489, %487, %485, %477, %476, %475, %472, %470, %468, %459, %457, %453, %446, %444, %440, %438, %434, %430, %428, %424, %413, %411, %407, %405, %401, %397, %395, %391, %388
  %418 = landingpad { ptr, i32 }
          cleanup
  %419 = extractvalue { ptr, i32 } %418, 0
  store ptr %419, ptr %11, align 8
  %420 = extractvalue { ptr, i32 } %418, 1
  store i32 %420, ptr %12, align 4
  br label %2508

421:                                              ; preds = %415
  store i8 1, ptr %5, align 1, !tbaa !9
  br label %422

422:                                              ; preds = %421, %416
  store i8 1, ptr %8, align 1, !tbaa !9
  store i8 1, ptr %9, align 1, !tbaa !9
  br label %423

423:                                              ; preds = %422, %400
  br label %516

424:                                              ; preds = %394, %390
  %425 = load ptr, ptr %4, align 8, !tbaa !5
  %426 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler23block_is_loop_candidateERKNS_9SPIRBlockENS1_6MethodE(ptr noundef nonnull align 8 dereferenceable(3176) %193, ptr noundef nonnull align 8 dereferenceable(976) %425, i32 noundef 0)
          to label %427 unwind label %417

427:                                              ; preds = %424
  br i1 %426, label %428, label %453

428:                                              ; preds = %427
  %429 = load ptr, ptr %4, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL26flush_undeclared_variablesERNS_9SPIRBlockE(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 8 dereferenceable(976) %429)
          to label %430 unwind label %417

430:                                              ; preds = %428
  %431 = load ptr, ptr %4, align 8, !tbaa !5
  %432 = invoke noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL24attempt_emit_loop_headerERNS_9SPIRBlockENS1_6MethodE(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 8 dereferenceable(976) %431, i32 noundef 0)
          to label %433 unwind label %417

433:                                              ; preds = %430
  br i1 %432, label %434, label %452

434:                                              ; preds = %433
  %435 = load ptr, ptr %4, align 8, !tbaa !5
  %436 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %435, i32 0, i32 9
  %437 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %436)
          to label %438 unwind label %417

438:                                              ; preds = %434
  %439 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %193, i32 noundef %437)
          to label %440 unwind label %417

440:                                              ; preds = %438
  %441 = load ptr, ptr %4, align 8, !tbaa !5
  %442 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %441, i32 0, i32 5
  %443 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %442)
          to label %444 unwind label %417

444:                                              ; preds = %440
  %445 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %193, i32 noundef %443)
          to label %446 unwind label %417

446:                                              ; preds = %444
  %447 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler17execution_is_noopERKNS_9SPIRBlockES3_(ptr noundef nonnull align 8 dereferenceable(3176) %193, ptr noundef nonnull align 8 dereferenceable(976) %439, ptr noundef nonnull align 8 dereferenceable(976) %445)
          to label %448 unwind label %417

448:                                              ; preds = %446
  br i1 %447, label %449, label %450

449:                                              ; preds = %448
  store i8 1, ptr %6, align 1, !tbaa !9
  br label %451

450:                                              ; preds = %448
  store i8 1, ptr %5, align 1, !tbaa !9
  br label %451

451:                                              ; preds = %450, %449
  store i8 1, ptr %8, align 1, !tbaa !9
  br label %452

452:                                              ; preds = %451, %433
  br label %515

453:                                              ; preds = %427
  %454 = load ptr, ptr %4, align 8, !tbaa !5
  %455 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler23block_is_loop_candidateERKNS_9SPIRBlockENS1_6MethodE(ptr noundef nonnull align 8 dereferenceable(3176) %193, ptr noundef nonnull align 8 dereferenceable(976) %454, i32 noundef 1)
          to label %456 unwind label %417

456:                                              ; preds = %453
  br i1 %455, label %457, label %465

457:                                              ; preds = %456
  %458 = load ptr, ptr %4, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL26flush_undeclared_variablesERNS_9SPIRBlockE(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 8 dereferenceable(976) %458)
          to label %459 unwind label %417

459:                                              ; preds = %457
  %460 = load ptr, ptr %4, align 8, !tbaa !5
  %461 = invoke noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL24attempt_emit_loop_headerERNS_9SPIRBlockENS1_6MethodE(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 8 dereferenceable(976) %460, i32 noundef 1)
          to label %462 unwind label %417

462:                                              ; preds = %459
  br i1 %461, label %463, label %464

463:                                              ; preds = %462
  store i8 1, ptr %7, align 1, !tbaa !9
  store i8 1, ptr %8, align 1, !tbaa !9
  br label %464

464:                                              ; preds = %463, %462
  br label %514

465:                                              ; preds = %456
  %466 = load i32, ptr %23, align 4, !tbaa !52
  %467 = icmp eq i32 %466, 3
  br i1 %467, label %468, label %480

468:                                              ; preds = %465
  %469 = load ptr, ptr %4, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL26flush_undeclared_variablesERNS_9SPIRBlockE(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 8 dereferenceable(976) %469)
          to label %470 unwind label %417

470:                                              ; preds = %468
  %471 = load ptr, ptr %4, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL28emit_while_loop_initializersERKNS_9SPIRBlockE(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 8 dereferenceable(976) %471)
          to label %472 unwind label %417

472:                                              ; preds = %470
  store i8 1, ptr %8, align 1, !tbaa !9
  %473 = load ptr, ptr %4, align 8, !tbaa !5
  %474 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %473, i32 0, i32 16
  invoke void @_ZN11spirv_cross12CompilerGLSL24emit_hoisted_temporariesERNS_11SmallVectorISt4pairINS_7TypedIDILNS_5TypesE1EEENS3_ILS4_0EEEELm8EEE(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 8 dereferenceable(88) %474)
          to label %475 unwind label %417

475:                                              ; preds = %472
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA3_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 1 dereferenceable(3) @.str.542)
          to label %476 unwind label %417

476:                                              ; preds = %475
  invoke void @_ZN11spirv_cross12CompilerGLSL11begin_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848) %193)
          to label %477 unwind label %417

477:                                              ; preds = %476
  %478 = load ptr, ptr %4, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL23emit_block_instructionsERNS_9SPIRBlockE(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 8 dereferenceable(976) %478)
          to label %479 unwind label %417

479:                                              ; preds = %477
  br label %513

480:                                              ; preds = %465
  %481 = load ptr, ptr %4, align 8, !tbaa !5
  %482 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %481, i32 0, i32 2
  %483 = load i32, ptr %482, align 8, !tbaa !11
  %484 = icmp eq i32 %483, 1
  br i1 %484, label %485, label %509

485:                                              ; preds = %480
  %486 = load ptr, ptr %4, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL26flush_undeclared_variablesERNS_9SPIRBlockE(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 8 dereferenceable(976) %486)
          to label %487 unwind label %417

487:                                              ; preds = %485
  %488 = load ptr, ptr %4, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL28emit_while_loop_initializersERKNS_9SPIRBlockE(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 8 dereferenceable(976) %488)
          to label %489 unwind label %417

489:                                              ; preds = %487
  store i8 1, ptr %8, align 1, !tbaa !9
  %490 = load ptr, ptr %4, align 8, !tbaa !5
  %491 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %490, i32 0, i32 6
  %492 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %491)
          to label %493 unwind label %417

493:                                              ; preds = %489
  %494 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %193, i32 noundef %492)
          to label %495 unwind label %417

495:                                              ; preds = %493
  %496 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %494, i32 0, i32 20
  store i8 1, ptr %496, align 1, !tbaa !54
  store i32 4, ptr %23, align 4, !tbaa !52
  %497 = load ptr, ptr %4, align 8, !tbaa !5
  %498 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %497, i32 0, i32 16
  invoke void @_ZN11spirv_cross12CompilerGLSL24emit_hoisted_temporariesERNS_11SmallVectorISt4pairINS_7TypedIDILNS_5TypesE1EEENS3_ILS4_0EEEELm8EEE(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 8 dereferenceable(88) %498)
          to label %499 unwind label %417

499:                                              ; preds = %495
  %500 = load ptr, ptr %4, align 8, !tbaa !5
  %501 = load ptr, ptr %193, align 8, !tbaa !60
  %502 = getelementptr inbounds ptr, ptr %501, i64 56
  %503 = load ptr, ptr %502, align 8
  invoke void %503(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 8 dereferenceable(976) %500)
          to label %504 unwind label %417

504:                                              ; preds = %499
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA9_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 1 dereferenceable(9) @.str.1632)
          to label %505 unwind label %417

505:                                              ; preds = %504
  invoke void @_ZN11spirv_cross12CompilerGLSL11begin_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848) %193)
          to label %506 unwind label %417

506:                                              ; preds = %505
  %507 = load ptr, ptr %4, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL23emit_block_instructionsERNS_9SPIRBlockE(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 8 dereferenceable(976) %507)
          to label %508 unwind label %417

508:                                              ; preds = %506
  br label %512

509:                                              ; preds = %480
  %510 = load ptr, ptr %4, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL23emit_block_instructionsERNS_9SPIRBlockE(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 8 dereferenceable(976) %510)
          to label %511 unwind label %417

511:                                              ; preds = %509
  br label %512

512:                                              ; preds = %511, %508
  br label %513

513:                                              ; preds = %512, %479
  br label %514

514:                                              ; preds = %513, %464
  br label %515

515:                                              ; preds = %514, %452
  br label %516

516:                                              ; preds = %515, %423
  %517 = load i8, ptr %8, align 1, !tbaa !9, !range !50, !noundef !51
  %518 = trunc i8 %517 to i1
  br i1 %518, label %553, label %519

519:                                              ; preds = %516
  %520 = load ptr, ptr %4, align 8, !tbaa !5
  %521 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %520, i32 0, i32 25
  %522 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %521) #9
  br i1 %522, label %553, label %523

523:                                              ; preds = %519
  invoke void @_ZN11spirv_cross8Compiler42force_recompile_guarantee_forward_progressEv(ptr noundef nonnull align 8 dereferenceable(3176) %193)
          to label %524 unwind label %417

524:                                              ; preds = %523
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #9
  %525 = load ptr, ptr %4, align 8, !tbaa !5
  %526 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %525, i32 0, i32 25
  store ptr %526, ptr %33, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #9
  %527 = load ptr, ptr %33, align 8, !tbaa !5
  %528 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %527) #9
  store ptr %528, ptr %34, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #9
  %529 = load ptr, ptr %33, align 8, !tbaa !5
  %530 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %529) #9
  store ptr %530, ptr %35, align 8, !tbaa !5
  br label %531

531:                                              ; preds = %543, %524
  %532 = load ptr, ptr %34, align 8, !tbaa !5
  %533 = load ptr, ptr %35, align 8, !tbaa !5
  %534 = icmp ne ptr %532, %533
  br i1 %534, label %536, label %535

535:                                              ; preds = %531
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #9
  br label %550

536:                                              ; preds = %531
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #9
  %537 = load ptr, ptr %34, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %36, ptr align 4 %537, i64 4, i1 false), !tbaa.struct !40
  %538 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %36)
          to label %539 unwind label %546

539:                                              ; preds = %536
  %540 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %193, i32 noundef %538)
          to label %541 unwind label %546

541:                                              ; preds = %539
  %542 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %540, i32 0, i32 17
  store i8 0, ptr %542, align 4, !tbaa !62
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #9
  br label %543

543:                                              ; preds = %541
  %544 = load ptr, ptr %34, align 8, !tbaa !5
  %545 = getelementptr inbounds %"class.spirv_cross::TypedID.282", ptr %544, i32 1
  store ptr %545, ptr %34, align 8, !tbaa !5
  br label %531

546:                                              ; preds = %539, %536
  %547 = landingpad { ptr, i32 }
          cleanup
  %548 = extractvalue { ptr, i32 } %547, 0
  store ptr %548, ptr %11, align 8
  %549 = extractvalue { ptr, i32 } %547, 1
  store i32 %549, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #9
  br label %2508

550:                                              ; preds = %535
  %551 = load ptr, ptr %4, align 8, !tbaa !5
  %552 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %551, i32 0, i32 25
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE2EEELm8EE5clearEv(ptr noundef nonnull align 8 dereferenceable(56) %552) #9
  br label %553

553:                                              ; preds = %550, %519, %516
  %554 = load ptr, ptr %4, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL26flush_undeclared_variablesERNS_9SPIRBlockE(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 8 dereferenceable(976) %554)
          to label %555 unwind label %417

555:                                              ; preds = %553
  call void @llvm.lifetime.start.p0(i64 1, ptr %37) #9
  store i8 1, ptr %37, align 1, !tbaa !9
  %556 = load ptr, ptr %4, align 8, !tbaa !5
  %557 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %556, i32 0, i32 1
  %558 = load i32, ptr %557, align 4, !tbaa !63
  switch i32 %558, label %2171 [
    i32 1, label %559
    i32 2, label %627
    i32 3, label %792
    i32 4, label %1822
    i32 6, label %2015
    i32 5, label %2041
    i32 7, label %2161
    i32 8, label %2163
    i32 9, label %2165
  ]

559:                                              ; preds = %555
  %560 = load ptr, ptr %4, align 8, !tbaa !5
  %561 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %560, i32 0, i32 23
  %562 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %561)
          to label %563 unwind label %582

563:                                              ; preds = %559
  %564 = load ptr, ptr %4, align 8, !tbaa !5
  %565 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %564, i32 0, i32 4
  %566 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %565)
          to label %567 unwind label %582

567:                                              ; preds = %563
  %568 = icmp eq i32 %562, %566
  br i1 %568, label %569, label %586

569:                                              ; preds = %567
  %570 = load ptr, ptr %4, align 8, !tbaa !5
  %571 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %570, i32 0, i32 1
  %572 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_6EEEv(ptr noundef nonnull align 4 dereferenceable(4) %571)
          to label %573 unwind label %582

573:                                              ; preds = %569
  %574 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %38, i32 0, i32 0
  store i32 %572, ptr %574, align 4
  %575 = load ptr, ptr %4, align 8, !tbaa !5
  %576 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %575, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %39, ptr align 8 %576, i64 4, i1 false), !tbaa.struct !40
  %577 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %38, i32 0, i32 0
  %578 = load i32, ptr %577, align 4
  %579 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %39, i32 0, i32 0
  %580 = load i32, ptr %579, align 4
  invoke void @_ZN11spirv_cross12CompilerGLSL6branchENS_7TypedIDILNS_5TypesE6EEES3_(ptr noundef nonnull align 8 dereferenceable(9848) %193, i32 %578, i32 %580)
          to label %581 unwind label %582

581:                                              ; preds = %573
  store i8 0, ptr %37, align 1, !tbaa !9
  br label %626

582:                                              ; preds = %2434, %2432, %2428, %2419, %2415, %2412, %2408, %2407, %2405, %2281, %2279, %2275, %2255, %2251, %2240, %2236, %2234, %2223, %2219, %2210, %2204, %2196, %2192, %2178, %2173, %2165, %2163, %2161, %2018, %2015, %1850, %778, %773, %769, %759, %755, %708, %704, %688, %684, %637, %633, %615, %611, %608, %604, %601, %597, %594, %590, %573, %569, %563, %559
  %583 = landingpad { ptr, i32 }
          cleanup
  %584 = extractvalue { ptr, i32 } %583, 0
  store ptr %584, ptr %11, align 8
  %585 = extractvalue { ptr, i32 } %583, 1
  store i32 %585, ptr %12, align 4
  br label %2507

586:                                              ; preds = %567
  %587 = load i8, ptr %7, align 1, !tbaa !9, !range !50, !noundef !51
  %588 = trunc i8 %587 to i1
  br i1 %588, label %589, label %590

589:                                              ; preds = %586
  store i8 0, ptr %37, align 1, !tbaa !9
  br label %625

590:                                              ; preds = %586
  %591 = load ptr, ptr %4, align 8, !tbaa !5
  %592 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %591, i32 0, i32 4
  %593 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %592)
          to label %594 unwind label %582

594:                                              ; preds = %590
  %595 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler11is_continueEj(ptr noundef nonnull align 8 dereferenceable(3176) %193, i32 noundef %593)
          to label %596 unwind label %582

596:                                              ; preds = %594
  br i1 %595, label %611, label %597

597:                                              ; preds = %596
  %598 = load ptr, ptr %4, align 8, !tbaa !5
  %599 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %598, i32 0, i32 4
  %600 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %599)
          to label %601 unwind label %582

601:                                              ; preds = %597
  %602 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_breakEj(ptr noundef nonnull align 8 dereferenceable(3176) %193, i32 noundef %600)
          to label %603 unwind label %582

603:                                              ; preds = %601
  br i1 %602, label %611, label %604

604:                                              ; preds = %603
  %605 = load ptr, ptr %4, align 8, !tbaa !5
  %606 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %605, i32 0, i32 4
  %607 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %606)
          to label %608 unwind label %582

608:                                              ; preds = %604
  %609 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler14is_conditionalEj(ptr noundef nonnull align 8 dereferenceable(3176) %193, i32 noundef %607)
          to label %610 unwind label %582

610:                                              ; preds = %608
  br i1 %609, label %611, label %624

611:                                              ; preds = %610, %603, %596
  %612 = load ptr, ptr %4, align 8, !tbaa !5
  %613 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %612, i32 0, i32 1
  %614 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_6EEEv(ptr noundef nonnull align 4 dereferenceable(4) %613)
          to label %615 unwind label %582

615:                                              ; preds = %611
  %616 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %40, i32 0, i32 0
  store i32 %614, ptr %616, align 4
  %617 = load ptr, ptr %4, align 8, !tbaa !5
  %618 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %617, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %41, ptr align 8 %618, i64 4, i1 false), !tbaa.struct !40
  %619 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %40, i32 0, i32 0
  %620 = load i32, ptr %619, align 4
  %621 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %41, i32 0, i32 0
  %622 = load i32, ptr %621, align 4
  invoke void @_ZN11spirv_cross12CompilerGLSL6branchENS_7TypedIDILNS_5TypesE6EEES3_(ptr noundef nonnull align 8 dereferenceable(9848) %193, i32 %620, i32 %622)
          to label %623 unwind label %582

623:                                              ; preds = %615
  store i8 0, ptr %37, align 1, !tbaa !9
  br label %624

624:                                              ; preds = %623, %610
  br label %625

625:                                              ; preds = %624, %589
  br label %626

626:                                              ; preds = %625, %581
  br label %2178

627:                                              ; preds = %555
  %628 = load i8, ptr %5, align 1, !tbaa !9, !range !50, !noundef !51
  %629 = trunc i8 %628 to i1
  br i1 %629, label %630, label %698

630:                                              ; preds = %627
  %631 = load i8, ptr %9, align 1, !tbaa !9, !range !50, !noundef !51
  %632 = trunc i8 %631 to i1
  br i1 %632, label %633, label %684

633:                                              ; preds = %630
  %634 = load ptr, ptr %4, align 8, !tbaa !5
  %635 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %634, i32 0, i32 9
  %636 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %635)
          to label %637 unwind label %582

637:                                              ; preds = %633
  %638 = load ptr, ptr %4, align 8, !tbaa !5
  %639 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %638, i32 0, i32 6
  %640 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %639)
          to label %641 unwind label %582

641:                                              ; preds = %637
  %642 = icmp eq i32 %636, %640
  br i1 %642, label %643, label %644

643:                                              ; preds = %641
  br label %646

644:                                              ; preds = %641
  call void @__assert_fail(ptr noundef @.str.1633, ptr noundef @.str.11, i32 noundef 17467, ptr noundef @__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL16emit_block_chainERNS_9SPIRBlockE) #10
  unreachable

645:                                              ; No predecessors!
  br label %646

646:                                              ; preds = %645, %643
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #9
  %647 = load ptr, ptr %4, align 8, !tbaa !5
  %648 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %647, i32 0, i32 6
  %649 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %648)
          to label %650 unwind label %675

650:                                              ; preds = %646
  %651 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %193, i32 noundef %649)
          to label %652 unwind label %675

652:                                              ; preds = %650
  %653 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %651, i32 0, i32 20
  store ptr %653, ptr %42, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %43) #9
  %654 = load ptr, ptr %42, align 8, !tbaa !5
  %655 = load i8, ptr %654, align 1, !tbaa !9, !range !50, !noundef !51
  %656 = trunc i8 %655 to i1
  %657 = zext i1 %656 to i8
  store i8 %657, ptr %43, align 1, !tbaa !9
  %658 = load ptr, ptr %42, align 8, !tbaa !5
  store i8 1, ptr %658, align 1, !tbaa !9
  %659 = load ptr, ptr %4, align 8, !tbaa !5
  %660 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %659, i32 0, i32 1
  %661 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_6EEEv(ptr noundef nonnull align 4 dereferenceable(4) %660)
          to label %662 unwind label %679

662:                                              ; preds = %652
  %663 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %44, i32 0, i32 0
  store i32 %661, ptr %663, align 4
  %664 = load ptr, ptr %4, align 8, !tbaa !5
  %665 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %664, i32 0, i32 9
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %45, ptr align 4 %665, i64 4, i1 false), !tbaa.struct !40
  %666 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %44, i32 0, i32 0
  %667 = load i32, ptr %666, align 4
  %668 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %45, i32 0, i32 0
  %669 = load i32, ptr %668, align 4
  invoke void @_ZN11spirv_cross12CompilerGLSL6branchENS_7TypedIDILNS_5TypesE6EEES3_(ptr noundef nonnull align 8 dereferenceable(9848) %193, i32 %667, i32 %669)
          to label %670 unwind label %679

670:                                              ; preds = %662
  %671 = load i8, ptr %43, align 1, !tbaa !9, !range !50, !noundef !51
  %672 = trunc i8 %671 to i1
  %673 = load ptr, ptr %42, align 8, !tbaa !5
  %674 = zext i1 %672 to i8
  store i8 %674, ptr %673, align 1, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 1, ptr %43) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #9
  br label %697

675:                                              ; preds = %650, %646
  %676 = landingpad { ptr, i32 }
          cleanup
  %677 = extractvalue { ptr, i32 } %676, 0
  store ptr %677, ptr %11, align 8
  %678 = extractvalue { ptr, i32 } %676, 1
  store i32 %678, ptr %12, align 4
  br label %683

679:                                              ; preds = %662, %652
  %680 = landingpad { ptr, i32 }
          cleanup
  %681 = extractvalue { ptr, i32 } %680, 0
  store ptr %681, ptr %11, align 8
  %682 = extractvalue { ptr, i32 } %680, 1
  store i32 %682, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %43) #9
  br label %683

683:                                              ; preds = %679, %675
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #9
  br label %2507

684:                                              ; preds = %630
  %685 = load ptr, ptr %4, align 8, !tbaa !5
  %686 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %685, i32 0, i32 1
  %687 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_6EEEv(ptr noundef nonnull align 4 dereferenceable(4) %686)
          to label %688 unwind label %582

688:                                              ; preds = %684
  %689 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %46, i32 0, i32 0
  store i32 %687, ptr %689, align 4
  %690 = load ptr, ptr %4, align 8, !tbaa !5
  %691 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %690, i32 0, i32 9
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %47, ptr align 4 %691, i64 4, i1 false), !tbaa.struct !40
  %692 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %46, i32 0, i32 0
  %693 = load i32, ptr %692, align 4
  %694 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %47, i32 0, i32 0
  %695 = load i32, ptr %694, align 4
  invoke void @_ZN11spirv_cross12CompilerGLSL6branchENS_7TypedIDILNS_5TypesE6EEES3_(ptr noundef nonnull align 8 dereferenceable(9848) %193, i32 %693, i32 %695)
          to label %696 unwind label %582

696:                                              ; preds = %688
  br label %697

697:                                              ; preds = %696, %670
  br label %791

698:                                              ; preds = %627
  %699 = load i8, ptr %6, align 1, !tbaa !9, !range !50, !noundef !51
  %700 = trunc i8 %699 to i1
  br i1 %700, label %701, label %769

701:                                              ; preds = %698
  %702 = load i8, ptr %9, align 1, !tbaa !9, !range !50, !noundef !51
  %703 = trunc i8 %702 to i1
  br i1 %703, label %704, label %755

704:                                              ; preds = %701
  %705 = load ptr, ptr %4, align 8, !tbaa !5
  %706 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %705, i32 0, i32 10
  %707 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %706)
          to label %708 unwind label %582

708:                                              ; preds = %704
  %709 = load ptr, ptr %4, align 8, !tbaa !5
  %710 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %709, i32 0, i32 6
  %711 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %710)
          to label %712 unwind label %582

712:                                              ; preds = %708
  %713 = icmp eq i32 %707, %711
  br i1 %713, label %714, label %715

714:                                              ; preds = %712
  br label %717

715:                                              ; preds = %712
  call void @__assert_fail(ptr noundef @.str.1634, ptr noundef @.str.11, i32 noundef 17483, ptr noundef @__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL16emit_block_chainERNS_9SPIRBlockE) #10
  unreachable

716:                                              ; No predecessors!
  br label %717

717:                                              ; preds = %716, %714
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #9
  %718 = load ptr, ptr %4, align 8, !tbaa !5
  %719 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %718, i32 0, i32 6
  %720 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %719)
          to label %721 unwind label %746

721:                                              ; preds = %717
  %722 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %193, i32 noundef %720)
          to label %723 unwind label %746

723:                                              ; preds = %721
  %724 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %722, i32 0, i32 20
  store ptr %724, ptr %48, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %49) #9
  %725 = load ptr, ptr %48, align 8, !tbaa !5
  %726 = load i8, ptr %725, align 1, !tbaa !9, !range !50, !noundef !51
  %727 = trunc i8 %726 to i1
  %728 = zext i1 %727 to i8
  store i8 %728, ptr %49, align 1, !tbaa !9
  %729 = load ptr, ptr %48, align 8, !tbaa !5
  store i8 1, ptr %729, align 1, !tbaa !9
  %730 = load ptr, ptr %4, align 8, !tbaa !5
  %731 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %730, i32 0, i32 1
  %732 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_6EEEv(ptr noundef nonnull align 4 dereferenceable(4) %731)
          to label %733 unwind label %750

733:                                              ; preds = %723
  %734 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %50, i32 0, i32 0
  store i32 %732, ptr %734, align 4
  %735 = load ptr, ptr %4, align 8, !tbaa !5
  %736 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %735, i32 0, i32 10
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %51, ptr align 8 %736, i64 4, i1 false), !tbaa.struct !40
  %737 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %50, i32 0, i32 0
  %738 = load i32, ptr %737, align 4
  %739 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %51, i32 0, i32 0
  %740 = load i32, ptr %739, align 4
  invoke void @_ZN11spirv_cross12CompilerGLSL6branchENS_7TypedIDILNS_5TypesE6EEES3_(ptr noundef nonnull align 8 dereferenceable(9848) %193, i32 %738, i32 %740)
          to label %741 unwind label %750

741:                                              ; preds = %733
  %742 = load i8, ptr %49, align 1, !tbaa !9, !range !50, !noundef !51
  %743 = trunc i8 %742 to i1
  %744 = load ptr, ptr %48, align 8, !tbaa !5
  %745 = zext i1 %743 to i8
  store i8 %745, ptr %744, align 1, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 1, ptr %49) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #9
  br label %768

746:                                              ; preds = %721, %717
  %747 = landingpad { ptr, i32 }
          cleanup
  %748 = extractvalue { ptr, i32 } %747, 0
  store ptr %748, ptr %11, align 8
  %749 = extractvalue { ptr, i32 } %747, 1
  store i32 %749, ptr %12, align 4
  br label %754

750:                                              ; preds = %733, %723
  %751 = landingpad { ptr, i32 }
          cleanup
  %752 = extractvalue { ptr, i32 } %751, 0
  store ptr %752, ptr %11, align 8
  %753 = extractvalue { ptr, i32 } %751, 1
  store i32 %753, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %49) #9
  br label %754

754:                                              ; preds = %750, %746
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #9
  br label %2507

755:                                              ; preds = %701
  %756 = load ptr, ptr %4, align 8, !tbaa !5
  %757 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %756, i32 0, i32 1
  %758 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_6EEEv(ptr noundef nonnull align 4 dereferenceable(4) %757)
          to label %759 unwind label %582

759:                                              ; preds = %755
  %760 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %52, i32 0, i32 0
  store i32 %758, ptr %760, align 4
  %761 = load ptr, ptr %4, align 8, !tbaa !5
  %762 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %761, i32 0, i32 10
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %53, ptr align 8 %762, i64 4, i1 false), !tbaa.struct !40
  %763 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %52, i32 0, i32 0
  %764 = load i32, ptr %763, align 4
  %765 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %53, i32 0, i32 0
  %766 = load i32, ptr %765, align 4
  invoke void @_ZN11spirv_cross12CompilerGLSL6branchENS_7TypedIDILNS_5TypesE6EEES3_(ptr noundef nonnull align 8 dereferenceable(9848) %193, i32 %764, i32 %766)
          to label %767 unwind label %582

767:                                              ; preds = %759
  br label %768

768:                                              ; preds = %767, %741
  br label %790

769:                                              ; preds = %698
  %770 = load ptr, ptr %4, align 8, !tbaa !5
  %771 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %770, i32 0, i32 1
  %772 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_6EEEv(ptr noundef nonnull align 4 dereferenceable(4) %771)
          to label %773 unwind label %582

773:                                              ; preds = %769
  %774 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %54, i32 0, i32 0
  store i32 %772, ptr %774, align 4
  %775 = load ptr, ptr %4, align 8, !tbaa !5
  %776 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %775, i32 0, i32 8
  %777 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %776)
          to label %778 unwind label %582

778:                                              ; preds = %773
  %779 = load ptr, ptr %4, align 8, !tbaa !5
  %780 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %779, i32 0, i32 9
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %55, ptr align 4 %780, i64 4, i1 false), !tbaa.struct !40
  %781 = load ptr, ptr %4, align 8, !tbaa !5
  %782 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %781, i32 0, i32 10
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %56, ptr align 8 %782, i64 4, i1 false), !tbaa.struct !40
  %783 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %54, i32 0, i32 0
  %784 = load i32, ptr %783, align 4
  %785 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %55, i32 0, i32 0
  %786 = load i32, ptr %785, align 4
  %787 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %56, i32 0, i32 0
  %788 = load i32, ptr %787, align 4
  invoke void @_ZN11spirv_cross12CompilerGLSL6branchENS_7TypedIDILNS_5TypesE6EEEjS3_S3_(ptr noundef nonnull align 8 dereferenceable(9848) %193, i32 %784, i32 noundef %777, i32 %786, i32 %788)
          to label %789 unwind label %582

789:                                              ; preds = %778
  br label %790

790:                                              ; preds = %789, %768
  br label %791

791:                                              ; preds = %790, %697
  br label %2178

792:                                              ; preds = %555
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #9
  %793 = load ptr, ptr %4, align 8, !tbaa !5
  %794 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %793, i32 0, i32 8
  %795 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %794)
          to label %796 unwind label %828

796:                                              ; preds = %792
  %797 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %193, i32 noundef %795)
          to label %798 unwind label %828

798:                                              ; preds = %796
  store ptr %797, ptr %57, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %58) #9
  %799 = load ptr, ptr %57, align 8, !tbaa !5
  %800 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %799, i32 0, i32 2
  %801 = load i32, ptr %800, align 8, !tbaa !64
  %802 = icmp eq i32 %801, 8
  br i1 %802, label %818, label %803

803:                                              ; preds = %798
  %804 = load ptr, ptr %57, align 8, !tbaa !5
  %805 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %804, i32 0, i32 2
  %806 = load i32, ptr %805, align 8, !tbaa !64
  %807 = icmp eq i32 %806, 6
  br i1 %807, label %818, label %808

808:                                              ; preds = %803
  %809 = load ptr, ptr %57, align 8, !tbaa !5
  %810 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %809, i32 0, i32 2
  %811 = load i32, ptr %810, align 8, !tbaa !64
  %812 = icmp eq i32 %811, 4
  br i1 %812, label %818, label %813

813:                                              ; preds = %808
  %814 = load ptr, ptr %57, align 8, !tbaa !5
  %815 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %814, i32 0, i32 2
  %816 = load i32, ptr %815, align 8, !tbaa !64
  %817 = icmp eq i32 %816, 10
  br label %818

818:                                              ; preds = %813, %808, %803, %798
  %819 = phi i1 [ true, %808 ], [ true, %803 ], [ true, %798 ], [ %817, %813 ]
  %820 = zext i1 %819 to i8
  store i8 %820, ptr %58, align 1, !tbaa !9
  %821 = load ptr, ptr %4, align 8, !tbaa !5
  %822 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %821, i32 0, i32 2
  %823 = load i32, ptr %822, align 8, !tbaa !11
  %824 = icmp eq i32 %823, 0
  br i1 %824, label %825, label %840

825:                                              ; preds = %818
  %826 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %826, ptr noundef @.str.1635)
          to label %827 unwind label %832

827:                                              ; preds = %825
  invoke void @__cxa_throw(ptr %826, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
          to label %2516 unwind label %836

828:                                              ; preds = %796, %792
  %829 = landingpad { ptr, i32 }
          cleanup
  %830 = extractvalue { ptr, i32 } %829, 0
  store ptr %830, ptr %11, align 8
  %831 = extractvalue { ptr, i32 } %829, 1
  store i32 %831, ptr %12, align 4
  br label %1821

832:                                              ; preds = %825
  %833 = landingpad { ptr, i32 }
          cleanup
  %834 = extractvalue { ptr, i32 } %833, 0
  store ptr %834, ptr %11, align 8
  %835 = extractvalue { ptr, i32 } %833, 1
  store i32 %835, ptr %12, align 4
  call void @__cxa_free_exception(ptr %826) #9
  br label %1820

836:                                              ; preds = %857, %827
  %837 = landingpad { ptr, i32 }
          cleanup
  %838 = extractvalue { ptr, i32 } %837, 0
  store ptr %838, ptr %11, align 8
  %839 = extractvalue { ptr, i32 } %837, 1
  store i32 %839, ptr %12, align 4
  br label %1820

840:                                              ; preds = %818
  %841 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %193, i32 0, i32 21
  %842 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %841, i32 0, i32 47
  %843 = load i8, ptr %842, align 8, !tbaa !83, !range !50, !noundef !51
  %844 = trunc i8 %843 to i1
  br i1 %844, label %862, label %845

845:                                              ; preds = %840
  %846 = load ptr, ptr %57, align 8, !tbaa !5
  %847 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %846, i32 0, i32 2
  %848 = load i32, ptr %847, align 8, !tbaa !64
  %849 = icmp eq i32 %848, 10
  br i1 %849, label %855, label %850

850:                                              ; preds = %845
  %851 = load ptr, ptr %57, align 8, !tbaa !5
  %852 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %851, i32 0, i32 2
  %853 = load i32, ptr %852, align 8, !tbaa !64
  %854 = icmp eq i32 %853, 9
  br i1 %854, label %855, label %862

855:                                              ; preds = %850, %845
  %856 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %856, ptr noundef @.str.1636)
          to label %857 unwind label %858

857:                                              ; preds = %855
  invoke void @__cxa_throw(ptr %856, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
          to label %2516 unwind label %836

858:                                              ; preds = %855
  %859 = landingpad { ptr, i32 }
          cleanup
  %860 = extractvalue { ptr, i32 } %859, 0
  store ptr %860, ptr %11, align 8
  %861 = extractvalue { ptr, i32 } %859, 1
  store i32 %861, ptr %12, align 4
  call void @__cxa_free_exception(ptr %856) #9
  br label %1820

862:                                              ; preds = %850, %840
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #9
  store ptr @.str.9, ptr %59, align 8, !tbaa !5
  %863 = load ptr, ptr %57, align 8, !tbaa !5
  %864 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %863, i32 0, i32 2
  %865 = load i32, ptr %864, align 8, !tbaa !64
  %866 = icmp eq i32 %865, 8
  br i1 %866, label %867, label %873

867:                                              ; preds = %862
  %868 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %193, i32 0, i32 21
  %869 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %868, i32 0, i32 5
  %870 = load i8, ptr %869, align 2, !tbaa !175, !range !50, !noundef !51
  %871 = trunc i8 %870 to i1
  br i1 %871, label %872, label %873

872:                                              ; preds = %867
  store ptr @.str.1011, ptr %59, align 8, !tbaa !5
  br label %917

873:                                              ; preds = %867, %862
  %874 = load ptr, ptr %57, align 8, !tbaa !5
  %875 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %874, i32 0, i32 2
  %876 = load i32, ptr %875, align 8, !tbaa !64
  %877 = icmp eq i32 %876, 9
  br i1 %877, label %878, label %884

878:                                              ; preds = %873
  %879 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %193, i32 0, i32 21
  %880 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %879, i32 0, i32 47
  %881 = load i8, ptr %880, align 8, !tbaa !83, !range !50, !noundef !51
  %882 = trunc i8 %881 to i1
  br i1 %882, label %883, label %884

883:                                              ; preds = %878
  store ptr @.str.1637, ptr %59, align 8, !tbaa !5
  br label %916

884:                                              ; preds = %878, %873
  %885 = load ptr, ptr %57, align 8, !tbaa !5
  %886 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %885, i32 0, i32 2
  %887 = load i32, ptr %886, align 8, !tbaa !64
  %888 = icmp eq i32 %887, 10
  br i1 %888, label %889, label %895

889:                                              ; preds = %884
  %890 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %193, i32 0, i32 21
  %891 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %890, i32 0, i32 47
  %892 = load i8, ptr %891, align 8, !tbaa !83, !range !50, !noundef !51
  %893 = trunc i8 %892 to i1
  br i1 %893, label %894, label %895

894:                                              ; preds = %889
  store ptr @.str.1003, ptr %59, align 8, !tbaa !5
  br label %915

895:                                              ; preds = %889, %884
  %896 = load ptr, ptr %57, align 8, !tbaa !5
  %897 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %896, i32 0, i32 2
  %898 = load i32, ptr %897, align 8, !tbaa !64
  %899 = icmp eq i32 %898, 6
  br i1 %899, label %900, label %904

900:                                              ; preds = %895
  %901 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %193, i32 0, i32 21
  %902 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %901, i32 0, i32 15
  %903 = load ptr, ptr %902, align 8, !tbaa !176
  store ptr %903, ptr %59, align 8, !tbaa !5
  br label %914

904:                                              ; preds = %895
  %905 = load ptr, ptr %57, align 8, !tbaa !5
  %906 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %905, i32 0, i32 2
  %907 = load i32, ptr %906, align 8, !tbaa !64
  %908 = icmp eq i32 %907, 5
  br i1 %908, label %909, label %913

909:                                              ; preds = %904
  %910 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %193, i32 0, i32 21
  %911 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %910, i32 0, i32 14
  %912 = load ptr, ptr %911, align 8, !tbaa !177
  store ptr %912, ptr %59, align 8, !tbaa !5
  br label %913

913:                                              ; preds = %909, %904
  br label %914

914:                                              ; preds = %913, %900
  br label %915

915:                                              ; preds = %914, %894
  br label %916

916:                                              ; preds = %915, %883
  br label %917

917:                                              ; preds = %916, %872
  %918 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %193, i32 0, i32 2
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #9
  %919 = load ptr, ptr %4, align 8, !tbaa !5
  store ptr %919, ptr %60, align 8, !tbaa !5
  call void @_ZN11spirv_cross11SmallVectorIPNS_9SPIRBlockELm8EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(88) %918, ptr noundef nonnull align 8 dereferenceable(8) %60) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #9
  %920 = load ptr, ptr %4, align 8, !tbaa !5
  %921 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %920, i32 0, i32 21
  %922 = load i8, ptr %921, align 2, !tbaa !178, !range !50, !noundef !51
  %923 = trunc i8 %922 to i1
  br i1 %923, label %924, label %932

924:                                              ; preds = %917
  %925 = load ptr, ptr %4, align 8, !tbaa !5
  %926 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %925, i32 0, i32 1
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA7_KcRNS_7TypedIDILNS_5TypesE0EEERA23_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 1 dereferenceable(7) @.str.1638, ptr noundef nonnull align 4 dereferenceable(4) %926, ptr noundef nonnull align 1 dereferenceable(23) @.str.1639)
          to label %927 unwind label %928

927:                                              ; preds = %924
  br label %932

928:                                              ; preds = %924
  %929 = landingpad { ptr, i32 }
          cleanup
  %930 = extractvalue { ptr, i32 } %929, 0
  store ptr %930, ptr %11, align 8
  %931 = extractvalue { ptr, i32 } %929, 1
  store i32 %931, ptr %12, align 4
  br label %1819

932:                                              ; preds = %927, %917
  call void @llvm.lifetime.start.p0(i64 56, ptr %61) #9
  call void @_ZNSt13unordered_mapIjN11spirv_cross11SmallVectorImLm8EEESt4hashIjESt8equal_toIjESaISt4pairIKjS2_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(56) %61) #9
  call void @llvm.lifetime.start.p0(i64 56, ptr %62) #9
  call void @_ZN11spirv_cross11SmallVectorIjLm8EEC2Ev(ptr noundef nonnull align 8 dereferenceable(56) %62) #9
  call void @llvm.lifetime.start.p0(i64 88, ptr %63) #9
  call void @_ZN11spirv_cross11SmallVectorImLm8EEC2Ev(ptr noundef nonnull align 8 dereferenceable(88) %63) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #9
  %933 = load ptr, ptr %4, align 8, !tbaa !5
  %934 = invoke noundef nonnull align 8 dereferenceable(152) ptr @_ZNK11spirv_cross8Compiler13get_case_listERKNS_9SPIRBlockE(ptr noundef nonnull align 8 dereferenceable(3176) %193, ptr noundef nonnull align 8 dereferenceable(976) %933)
          to label %935 unwind label %946

935:                                              ; preds = %932
  store ptr %934, ptr %64, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #9
  %936 = load ptr, ptr %64, align 8, !tbaa !5
  store ptr %936, ptr %65, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #9
  %937 = load ptr, ptr %65, align 8, !tbaa !5
  %938 = call noundef ptr @_ZNK11spirv_cross10VectorViewINS_9SPIRBlock4CaseEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %937) #9
  store ptr %938, ptr %66, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #9
  %939 = load ptr, ptr %65, align 8, !tbaa !5
  %940 = call noundef ptr @_ZNK11spirv_cross10VectorViewINS_9SPIRBlock4CaseEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %939) #9
  store ptr %940, ptr %67, align 8, !tbaa !5
  br label %941

941:                                              ; preds = %1035, %935
  %942 = load ptr, ptr %66, align 8, !tbaa !5
  %943 = load ptr, ptr %67, align 8, !tbaa !5
  %944 = icmp ne ptr %942, %943
  br i1 %944, label %950, label %945

945:                                              ; preds = %941
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #9
  br label %1039

946:                                              ; preds = %1043, %1039, %932
  %947 = landingpad { ptr, i32 }
          cleanup
  %948 = extractvalue { ptr, i32 } %947, 0
  store ptr %948, ptr %11, align 8
  %949 = extractvalue { ptr, i32 } %947, 1
  store i32 %949, ptr %12, align 4
  br label %1818

950:                                              ; preds = %941
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #9
  %951 = load ptr, ptr %66, align 8, !tbaa !5
  store ptr %951, ptr %68, align 8, !tbaa !5
  %952 = load ptr, ptr %68, align 8, !tbaa !5
  %953 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock::Case", ptr %952, i32 0, i32 1
  %954 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %953)
          to label %955 unwind label %985

955:                                              ; preds = %950
  %956 = load ptr, ptr %4, align 8, !tbaa !5
  %957 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %956, i32 0, i32 4
  %958 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %957)
          to label %959 unwind label %985

959:                                              ; preds = %955
  %960 = icmp ne i32 %954, %958
  br i1 %960, label %961, label %1010

961:                                              ; preds = %959
  %962 = load ptr, ptr %68, align 8, !tbaa !5
  %963 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock::Case", ptr %962, i32 0, i32 1
  %964 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %963)
          to label %965 unwind label %985

965:                                              ; preds = %961
  %966 = load ptr, ptr %4, align 8, !tbaa !5
  %967 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %966, i32 0, i32 11
  %968 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %967)
          to label %969 unwind label %985

969:                                              ; preds = %965
  %970 = icmp ne i32 %964, %968
  br i1 %970, label %971, label %1010

971:                                              ; preds = %969
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #9
  %972 = load ptr, ptr %68, align 8, !tbaa !5
  %973 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock::Case", ptr %972, i32 0, i32 1
  %974 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %973)
          to label %975 unwind label %989

975:                                              ; preds = %971
  store i32 %974, ptr %69, align 4, !tbaa !41
  %976 = invoke noundef i64 @_ZNKSt13unordered_mapIjN11spirv_cross11SmallVectorImLm8EEESt4hashIjESt8equal_toIjESaISt4pairIKjS2_EEE5countERS8_(ptr noundef nonnull align 8 dereferenceable(56) %61, ptr noundef nonnull align 4 dereferenceable(4) %69)
          to label %977 unwind label %989

977:                                              ; preds = %975
  %978 = icmp ne i64 %976, 0
  %979 = xor i1 %978, true
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #9
  br i1 %979, label %980, label %997

980:                                              ; preds = %977
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #9
  %981 = load ptr, ptr %68, align 8, !tbaa !5
  %982 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock::Case", ptr %981, i32 0, i32 1
  %983 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %982)
          to label %984 unwind label %993

984:                                              ; preds = %980
  store i32 %983, ptr %70, align 4, !tbaa !41
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backEOj(ptr noundef nonnull align 8 dereferenceable(56) %62, ptr noundef nonnull align 4 dereferenceable(4) %70) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #9
  br label %997

985:                                              ; preds = %1024, %1020, %1014, %1010, %965, %961, %955, %950
  %986 = landingpad { ptr, i32 }
          cleanup
  %987 = extractvalue { ptr, i32 } %986, 0
  store ptr %987, ptr %11, align 8
  %988 = extractvalue { ptr, i32 } %986, 1
  store i32 %988, ptr %12, align 4
  br label %1038

989:                                              ; preds = %975, %971
  %990 = landingpad { ptr, i32 }
          cleanup
  %991 = extractvalue { ptr, i32 } %990, 0
  store ptr %991, ptr %11, align 8
  %992 = extractvalue { ptr, i32 } %990, 1
  store i32 %992, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #9
  br label %1038

993:                                              ; preds = %980
  %994 = landingpad { ptr, i32 }
          cleanup
  %995 = extractvalue { ptr, i32 } %994, 0
  store ptr %995, ptr %11, align 8
  %996 = extractvalue { ptr, i32 } %994, 1
  store i32 %996, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #9
  br label %1038

997:                                              ; preds = %984, %977
  call void @llvm.lifetime.start.p0(i64 4, ptr %71) #9
  %998 = load ptr, ptr %68, align 8, !tbaa !5
  %999 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock::Case", ptr %998, i32 0, i32 1
  %1000 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %999)
          to label %1001 unwind label %1006

1001:                                             ; preds = %997
  store i32 %1000, ptr %71, align 4, !tbaa !41
  %1002 = invoke noundef nonnull align 8 dereferenceable(88) ptr @_ZNSt13unordered_mapIjN11spirv_cross11SmallVectorImLm8EEESt4hashIjESt8equal_toIjESaISt4pairIKjS2_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %61, ptr noundef nonnull align 4 dereferenceable(4) %71)
          to label %1003 unwind label %1006

1003:                                             ; preds = %1001
  %1004 = load ptr, ptr %68, align 8, !tbaa !5
  %1005 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock::Case", ptr %1004, i32 0, i32 0
  call void @_ZN11spirv_cross11SmallVectorImLm8EE9push_backERKm(ptr noundef nonnull align 8 dereferenceable(88) %1002, ptr noundef nonnull align 8 dereferenceable(8) %1005) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #9
  br label %1034

1006:                                             ; preds = %1001, %997
  %1007 = landingpad { ptr, i32 }
          cleanup
  %1008 = extractvalue { ptr, i32 } %1007, 0
  store ptr %1008, ptr %11, align 8
  %1009 = extractvalue { ptr, i32 } %1007, 1
  store i32 %1009, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #9
  br label %1038

1010:                                             ; preds = %969, %959
  %1011 = load ptr, ptr %68, align 8, !tbaa !5
  %1012 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock::Case", ptr %1011, i32 0, i32 1
  %1013 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1012)
          to label %1014 unwind label %985

1014:                                             ; preds = %1010
  %1015 = load ptr, ptr %4, align 8, !tbaa !5
  %1016 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %1015, i32 0, i32 4
  %1017 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1016)
          to label %1018 unwind label %985

1018:                                             ; preds = %1014
  %1019 = icmp eq i32 %1013, %1017
  br i1 %1019, label %1020, label %1033

1020:                                             ; preds = %1018
  %1021 = load ptr, ptr %4, align 8, !tbaa !5
  %1022 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %1021, i32 0, i32 11
  %1023 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1022)
          to label %1024 unwind label %985

1024:                                             ; preds = %1020
  %1025 = load ptr, ptr %4, align 8, !tbaa !5
  %1026 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %1025, i32 0, i32 4
  %1027 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1026)
          to label %1028 unwind label %985

1028:                                             ; preds = %1024
  %1029 = icmp ne i32 %1023, %1027
  br i1 %1029, label %1030, label %1033

1030:                                             ; preds = %1028
  %1031 = load ptr, ptr %68, align 8, !tbaa !5
  %1032 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock::Case", ptr %1031, i32 0, i32 0
  call void @_ZN11spirv_cross11SmallVectorImLm8EE9push_backERKm(ptr noundef nonnull align 8 dereferenceable(88) %63, ptr noundef nonnull align 8 dereferenceable(8) %1032) #9
  br label %1033

1033:                                             ; preds = %1030, %1028, %1018
  br label %1034

1034:                                             ; preds = %1033, %1003
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #9
  br label %1035

1035:                                             ; preds = %1034
  %1036 = load ptr, ptr %66, align 8, !tbaa !5
  %1037 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock::Case", ptr %1036, i32 1
  store ptr %1037, ptr %66, align 8, !tbaa !5
  br label %941

1038:                                             ; preds = %1006, %993, %989, %985
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #9
  br label %1818

1039:                                             ; preds = %945
  %1040 = load ptr, ptr %4, align 8, !tbaa !5
  %1041 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %1040, i32 0, i32 11
  %1042 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1041)
          to label %1043 unwind label %946

1043:                                             ; preds = %1039
  %1044 = load ptr, ptr %4, align 8, !tbaa !5
  %1045 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %1044, i32 0, i32 4
  %1046 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1045)
          to label %1047 unwind label %946

1047:                                             ; preds = %1043
  %1048 = icmp ne i32 %1042, %1046
  br i1 %1048, label %1049, label %1163

1049:                                             ; preds = %1047
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #9
  %1050 = load ptr, ptr %4, align 8, !tbaa !5
  %1051 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %1050, i32 0, i32 11
  %1052 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1051)
          to label %1053 unwind label %1062

1053:                                             ; preds = %1049
  %1054 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %193, i32 noundef %1052)
          to label %1055 unwind label %1062

1055:                                             ; preds = %1053
  store ptr %1054, ptr %72, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #9
  %1056 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %62) #9
  store i64 %1056, ptr %73, align 8, !tbaa !56
  call void @llvm.lifetime.start.p0(i64 1, ptr %74) #9
  store i8 0, ptr %74, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #9
  store i64 0, ptr %75, align 8, !tbaa !56
  br label %1057

1057:                                             ; preds = %1117, %1055
  %1058 = load i64, ptr %75, align 8, !tbaa !56
  %1059 = load i64, ptr %73, align 8, !tbaa !56
  %1060 = icmp ult i64 %1058, %1059
  br i1 %1060, label %1066, label %1061

1061:                                             ; preds = %1057
  store i32 14, ptr %76, align 4
  br label %1121

1062:                                             ; preds = %1053, %1049
  %1063 = landingpad { ptr, i32 }
          cleanup
  %1064 = extractvalue { ptr, i32 } %1063, 0
  store ptr %1064, ptr %11, align 8
  %1065 = extractvalue { ptr, i32 } %1063, 1
  store i32 %1065, ptr %12, align 4
  br label %1162

1066:                                             ; preds = %1057
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #9
  %1067 = load i64, ptr %75, align 8, !tbaa !56
  %1068 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %62, i64 noundef %1067) #9
  %1069 = load i32, ptr %1068, align 4, !tbaa !41
  %1070 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %193, i32 noundef %1069)
          to label %1071 unwind label %1086

1071:                                             ; preds = %1066
  store ptr %1070, ptr %77, align 8, !tbaa !5
  %1072 = load ptr, ptr %77, align 8, !tbaa !5
  %1073 = load ptr, ptr %72, align 8, !tbaa !5
  %1074 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler26execution_is_direct_branchERKNS_9SPIRBlockES3_(ptr noundef nonnull align 8 dereferenceable(3176) %193, ptr noundef nonnull align 8 dereferenceable(976) %1072, ptr noundef nonnull align 8 dereferenceable(976) %1073)
          to label %1075 unwind label %1086

1075:                                             ; preds = %1071
  br i1 %1074, label %1076, label %1094

1076:                                             ; preds = %1075
  %1077 = invoke noundef ptr @_ZSt5beginIN11spirv_cross11SmallVectorIjLm8EEEEDTcldtfp_5beginEERT_(ptr noundef nonnull align 8 dereferenceable(56) %62)
          to label %1078 unwind label %1086

1078:                                             ; preds = %1076
  %1079 = load i64, ptr %75, align 8, !tbaa !56
  %1080 = getelementptr inbounds i32, ptr %1077, i64 %1079
  %1081 = getelementptr inbounds i32, ptr %1080, i64 1
  call void @llvm.lifetime.start.p0(i64 4, ptr %78) #9
  %1082 = load ptr, ptr %4, align 8, !tbaa !5
  %1083 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %1082, i32 0, i32 11
  %1084 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1083)
          to label %1085 unwind label %1090

1085:                                             ; preds = %1078
  store i32 %1084, ptr %78, align 4, !tbaa !41
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE6insertEPjRKj(ptr noundef nonnull align 8 dereferenceable(56) %62, ptr noundef %1081, ptr noundef nonnull align 4 dereferenceable(4) %78) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #9
  store i8 1, ptr %74, align 1, !tbaa !9
  store i32 14, ptr %76, align 4
  br label %1114

1086:                                             ; preds = %1099, %1094, %1076, %1071, %1066
  %1087 = landingpad { ptr, i32 }
          cleanup
  %1088 = extractvalue { ptr, i32 } %1087, 0
  store ptr %1088, ptr %11, align 8
  %1089 = extractvalue { ptr, i32 } %1087, 1
  store i32 %1089, ptr %12, align 4
  br label %1120

1090:                                             ; preds = %1078
  %1091 = landingpad { ptr, i32 }
          cleanup
  %1092 = extractvalue { ptr, i32 } %1091, 0
  store ptr %1092, ptr %11, align 8
  %1093 = extractvalue { ptr, i32 } %1091, 1
  store i32 %1093, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #9
  br label %1120

1094:                                             ; preds = %1075
  %1095 = load ptr, ptr %72, align 8, !tbaa !5
  %1096 = load ptr, ptr %77, align 8, !tbaa !5
  %1097 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler26execution_is_direct_branchERKNS_9SPIRBlockES3_(ptr noundef nonnull align 8 dereferenceable(3176) %193, ptr noundef nonnull align 8 dereferenceable(976) %1095, ptr noundef nonnull align 8 dereferenceable(976) %1096)
          to label %1098 unwind label %1086

1098:                                             ; preds = %1094
  br i1 %1097, label %1099, label %1112

1099:                                             ; preds = %1098
  %1100 = invoke noundef ptr @_ZSt5beginIN11spirv_cross11SmallVectorIjLm8EEEEDTcldtfp_5beginEERT_(ptr noundef nonnull align 8 dereferenceable(56) %62)
          to label %1101 unwind label %1086

1101:                                             ; preds = %1099
  %1102 = load i64, ptr %75, align 8, !tbaa !56
  %1103 = getelementptr inbounds i32, ptr %1100, i64 %1102
  call void @llvm.lifetime.start.p0(i64 4, ptr %79) #9
  %1104 = load ptr, ptr %4, align 8, !tbaa !5
  %1105 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %1104, i32 0, i32 11
  %1106 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1105)
          to label %1107 unwind label %1108

1107:                                             ; preds = %1101
  store i32 %1106, ptr %79, align 4, !tbaa !41
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE6insertEPjRKj(ptr noundef nonnull align 8 dereferenceable(56) %62, ptr noundef %1103, ptr noundef nonnull align 4 dereferenceable(4) %79) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #9
  store i8 1, ptr %74, align 1, !tbaa !9
  store i32 14, ptr %76, align 4
  br label %1114

1108:                                             ; preds = %1101
  %1109 = landingpad { ptr, i32 }
          cleanup
  %1110 = extractvalue { ptr, i32 } %1109, 0
  store ptr %1110, ptr %11, align 8
  %1111 = extractvalue { ptr, i32 } %1109, 1
  store i32 %1111, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #9
  br label %1120

1112:                                             ; preds = %1098
  br label %1113

1113:                                             ; preds = %1112
  store i32 0, ptr %76, align 4
  br label %1114

1114:                                             ; preds = %1113, %1107, %1085
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #9
  %1115 = load i32, ptr %76, align 4
  switch i32 %1115, label %1121 [
    i32 0, label %1116
  ]

1116:                                             ; preds = %1114
  br label %1117

1117:                                             ; preds = %1116
  %1118 = load i64, ptr %75, align 8, !tbaa !56
  %1119 = add i64 %1118, 1
  store i64 %1119, ptr %75, align 8, !tbaa !56
  br label %1057, !llvm.loop !179

1120:                                             ; preds = %1108, %1090, %1086
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #9
  br label %1161

1121:                                             ; preds = %1114, %1061
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #9
  br label %1122

1122:                                             ; preds = %1121
  %1123 = load i8, ptr %74, align 1, !tbaa !9, !range !50, !noundef !51
  %1124 = trunc i8 %1123 to i1
  br i1 %1124, label %1134, label %1125

1125:                                             ; preds = %1122
  call void @llvm.lifetime.start.p0(i64 4, ptr %80) #9
  %1126 = load ptr, ptr %4, align 8, !tbaa !5
  %1127 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %1126, i32 0, i32 11
  %1128 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1127)
          to label %1129 unwind label %1130

1129:                                             ; preds = %1125
  store i32 %1128, ptr %80, align 4, !tbaa !41
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backEOj(ptr noundef nonnull align 8 dereferenceable(56) %62, ptr noundef nonnull align 4 dereferenceable(4) %80) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #9
  br label %1149

1130:                                             ; preds = %1125
  %1131 = landingpad { ptr, i32 }
          cleanup
  %1132 = extractvalue { ptr, i32 } %1131, 0
  store ptr %1132, ptr %11, align 8
  %1133 = extractvalue { ptr, i32 } %1131, 1
  store i32 %1133, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #9
  br label %1161

1134:                                             ; preds = %1122
  %1135 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL12is_legacy_esEv(ptr noundef nonnull align 8 dereferenceable(9848) %193)
          to label %1136 unwind label %1140

1136:                                             ; preds = %1134
  br i1 %1135, label %1137, label %1148

1137:                                             ; preds = %1136
  %1138 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1138, ptr noundef @.str.1640)
          to label %1139 unwind label %1144

1139:                                             ; preds = %1137
  invoke void @__cxa_throw(ptr %1138, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
          to label %2516 unwind label %1140

1140:                                             ; preds = %1139, %1134
  %1141 = landingpad { ptr, i32 }
          cleanup
  %1142 = extractvalue { ptr, i32 } %1141, 0
  store ptr %1142, ptr %11, align 8
  %1143 = extractvalue { ptr, i32 } %1141, 1
  store i32 %1143, ptr %12, align 4
  br label %1161

1144:                                             ; preds = %1137
  %1145 = landingpad { ptr, i32 }
          cleanup
  %1146 = extractvalue { ptr, i32 } %1145, 0
  store ptr %1146, ptr %11, align 8
  %1147 = extractvalue { ptr, i32 } %1145, 1
  store i32 %1147, ptr %12, align 4
  call void @__cxa_free_exception(ptr %1138) #9
  br label %1161

1148:                                             ; preds = %1136
  br label %1149

1149:                                             ; preds = %1148, %1129
  call void @llvm.lifetime.start.p0(i64 88, ptr %81) #9
  call void @_ZN11spirv_cross11SmallVectorImLm8EEC2Ev(ptr noundef nonnull align 8 dereferenceable(88) %81) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %82) #9
  %1150 = load ptr, ptr %4, align 8, !tbaa !5
  %1151 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %1150, i32 0, i32 11
  %1152 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1151)
          to label %1153 unwind label %1157

1153:                                             ; preds = %1149
  store i32 %1152, ptr %82, align 4, !tbaa !41
  %1154 = invoke noundef nonnull align 8 dereferenceable(88) ptr @_ZNSt13unordered_mapIjN11spirv_cross11SmallVectorImLm8EEESt4hashIjESt8equal_toIjESaISt4pairIKjS2_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %61, ptr noundef nonnull align 4 dereferenceable(4) %82)
          to label %1155 unwind label %1157

1155:                                             ; preds = %1153
  %1156 = call noundef nonnull align 8 dereferenceable(88) ptr @_ZN11spirv_cross11SmallVectorImLm8EEaSEOS1_(ptr noundef nonnull align 8 dereferenceable(88) %1154, ptr noundef nonnull align 8 dereferenceable(88) %81) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #9
  call void @_ZN11spirv_cross11SmallVectorImLm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(88) %81) #9
  call void @llvm.lifetime.end.p0(i64 88, ptr %81) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %74) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #9
  br label %1163

1157:                                             ; preds = %1153, %1149
  %1158 = landingpad { ptr, i32 }
          cleanup
  %1159 = extractvalue { ptr, i32 } %1158, 0
  store ptr %1159, ptr %11, align 8
  %1160 = extractvalue { ptr, i32 } %1158, 1
  store i32 %1160, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #9
  call void @_ZN11spirv_cross11SmallVectorImLm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(88) %81) #9
  call void @llvm.lifetime.end.p0(i64 88, ptr %81) #9
  br label %1161

1161:                                             ; preds = %1157, %1144, %1140, %1130, %1120
  call void @llvm.lifetime.end.p0(i64 1, ptr %74) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #9
  br label %1162

1162:                                             ; preds = %1161, %1062
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #9
  br label %1818

1163:                                             ; preds = %1155, %1047
  call void @llvm.lifetime.start.p0(i64 8, ptr %83) #9
  %1164 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %62) #9
  store i64 %1164, ptr %83, align 8, !tbaa !56
  call void @llvm.lifetime.start.p0(i64 1, ptr %84) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %85) #9
  %1165 = getelementptr inbounds %class.anon.481, ptr %85, i32 0, i32 0
  store ptr %193, ptr %1165, align 8, !tbaa !180
  call void @llvm.lifetime.start.p0(i64 8, ptr %86) #9
  store i64 1, ptr %86, align 8, !tbaa !56
  br label %1166

1166:                                             ; preds = %1423, %1163
  %1167 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %193, i32 0, i32 21
  %1168 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %1167, i32 0, i32 42
  %1169 = load i8, ptr %1168, align 1, !tbaa !182, !range !50, !noundef !51
  %1170 = trunc i8 %1169 to i1
  br i1 %1170, label %1171, label %1175

1171:                                             ; preds = %1166
  %1172 = load i64, ptr %86, align 8, !tbaa !56
  %1173 = load i64, ptr %83, align 8, !tbaa !56
  %1174 = icmp ult i64 %1172, %1173
  br label %1175

1175:                                             ; preds = %1171, %1166
  %1176 = phi i1 [ false, %1166 ], [ %1174, %1171 ]
  br i1 %1176, label %1178, label %1177

1177:                                             ; preds = %1175
  store i32 17, ptr %76, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #9
  br label %1427

1178:                                             ; preds = %1175
  %1179 = load ptr, ptr %4, align 8, !tbaa !5
  %1180 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1179, i32 0, i32 1
  %1181 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_6EEEv(ptr noundef nonnull align 4 dereferenceable(4) %1180)
          to label %1182 unwind label %1229

1182:                                             ; preds = %1178
  %1183 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %87, i32 0, i32 0
  store i32 %1181, ptr %1183, align 4
  %1184 = load i64, ptr %86, align 8, !tbaa !56
  %1185 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %62, i64 noundef %1184) #9
  %1186 = load i32, ptr %1185, align 4, !tbaa !41
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %88, i32 noundef %1186)
          to label %1187 unwind label %1229

1187:                                             ; preds = %1182
  %1188 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %87, i32 0, i32 0
  %1189 = load i32, ptr %1188, align 4
  %1190 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %88, i32 0, i32 0
  %1191 = load i32, ptr %1190, align 4
  %1192 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler18flush_phi_requiredENS_7TypedIDILNS_5TypesE6EEES3_(ptr noundef nonnull align 8 dereferenceable(3176) %193, i32 %1189, i32 %1191)
          to label %1193 unwind label %1229

1193:                                             ; preds = %1187
  br i1 %1192, label %1194, label %1422

1194:                                             ; preds = %1193
  %1195 = load i64, ptr %86, align 8, !tbaa !56
  %1196 = sub i64 %1195, 1
  %1197 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %62, i64 noundef %1196) #9
  %1198 = load i32, ptr %1197, align 4, !tbaa !41
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %89, i32 noundef %1198)
          to label %1199 unwind label %1229

1199:                                             ; preds = %1194
  %1200 = load i64, ptr %86, align 8, !tbaa !56
  %1201 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %62, i64 noundef %1200) #9
  %1202 = load i32, ptr %1201, align 4, !tbaa !41
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %90, i32 noundef %1202)
          to label %1203 unwind label %1229

1203:                                             ; preds = %1199
  %1204 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %89, i32 0, i32 0
  %1205 = load i32, ptr %1204, align 4
  %1206 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %90, i32 0, i32 0
  %1207 = load i32, ptr %1206, align 4
  %1208 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler18flush_phi_requiredENS_7TypedIDILNS_5TypesE6EEES3_(ptr noundef nonnull align 8 dereferenceable(3176) %193, i32 %1205, i32 %1207)
          to label %1209 unwind label %1229

1209:                                             ; preds = %1203
  br i1 %1208, label %1210, label %1422

1210:                                             ; preds = %1209
  call void @llvm.lifetime.start.p0(i64 4, ptr %91) #9
  %1211 = load i64, ptr %86, align 8, !tbaa !56
  %1212 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %62, i64 noundef %1211) #9
  %1213 = load i32, ptr %1212, align 4, !tbaa !41
  store i32 %1213, ptr %91, align 4, !tbaa !41
  call void @llvm.lifetime.start.p0(i64 4, ptr %92) #9
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %92, i32 noundef 0)
          to label %1214 unwind label %1233

1214:                                             ; preds = %1210
  %1215 = load i32, ptr %91, align 4, !tbaa !41
  %1216 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %193, i32 noundef %1215)
          to label %1217 unwind label %1233

1217:                                             ; preds = %1214
  %1218 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %1216, i32 0, i32 22
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1218, ptr align 4 %92, i64 4, i1 false), !tbaa.struct !40
  call void @llvm.lifetime.end.p0(i64 4, ptr %92) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %93) #9
  %1219 = invoke noundef nonnull align 8 dereferenceable(88) ptr @_ZNSt13unordered_mapIjN11spirv_cross11SmallVectorImLm8EEESt4hashIjESt8equal_toIjESaISt4pairIKjS2_EEEixERS8_(ptr noundef nonnull align 8 dereferenceable(56) %61, ptr noundef nonnull align 4 dereferenceable(4) %91)
          to label %1220 unwind label %1237

1220:                                             ; preds = %1217
  store ptr %1219, ptr %93, align 8, !tbaa !5
  %1221 = load ptr, ptr %93, align 8, !tbaa !5
  %1222 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewImE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %1221) #9
  br i1 %1222, label %1223, label %1329

1223:                                             ; preds = %1220
  call void @llvm.lifetime.start.p0(i64 280, ptr %94) #9
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEC2Ev(ptr noundef nonnull align 8 dereferenceable(280) %94) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %95) #9
  store i64 0, ptr %95, align 8, !tbaa !56
  br label %1224

1224:                                             ; preds = %1294, %1223
  %1225 = load i64, ptr %95, align 8, !tbaa !56
  %1226 = load i64, ptr %83, align 8, !tbaa !56
  %1227 = icmp ult i64 %1225, %1226
  br i1 %1227, label %1241, label %1228

1228:                                             ; preds = %1224
  store i32 20, ptr %76, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %95) #9
  br label %1298

1229:                                             ; preds = %1203, %1199, %1194, %1187, %1182, %1178
  %1230 = landingpad { ptr, i32 }
          cleanup
  %1231 = extractvalue { ptr, i32 } %1230, 0
  store ptr %1231, ptr %11, align 8
  %1232 = extractvalue { ptr, i32 } %1230, 1
  store i32 %1232, ptr %12, align 4
  br label %1426

1233:                                             ; preds = %1214, %1210
  %1234 = landingpad { ptr, i32 }
          cleanup
  %1235 = extractvalue { ptr, i32 } %1234, 0
  store ptr %1235, ptr %11, align 8
  %1236 = extractvalue { ptr, i32 } %1234, 1
  store i32 %1236, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %92) #9
  br label %1421

1237:                                             ; preds = %1217
  %1238 = landingpad { ptr, i32 }
          cleanup
  %1239 = extractvalue { ptr, i32 } %1238, 0
  store ptr %1239, ptr %11, align 8
  %1240 = extractvalue { ptr, i32 } %1238, 1
  store i32 %1240, ptr %12, align 4
  br label %1420

1241:                                             ; preds = %1224
  call void @llvm.lifetime.start.p0(i64 8, ptr %96) #9
  %1242 = load i64, ptr %95, align 8, !tbaa !56
  %1243 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %62, i64 noundef %1242) #9
  %1244 = invoke noundef nonnull align 8 dereferenceable(88) ptr @_ZNSt13unordered_mapIjN11spirv_cross11SmallVectorImLm8EEESt4hashIjESt8equal_toIjESaISt4pairIKjS2_EEEixERS8_(ptr noundef nonnull align 8 dereferenceable(56) %61, ptr noundef nonnull align 4 dereferenceable(4) %1243)
          to label %1245 unwind label %1256

1245:                                             ; preds = %1241
  store ptr %1244, ptr %96, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %97) #9
  %1246 = load ptr, ptr %96, align 8, !tbaa !5
  store ptr %1246, ptr %97, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %98) #9
  %1247 = load ptr, ptr %97, align 8, !tbaa !5
  %1248 = call noundef ptr @_ZN11spirv_cross10VectorViewImE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %1247) #9
  store ptr %1248, ptr %98, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %99) #9
  %1249 = load ptr, ptr %97, align 8, !tbaa !5
  %1250 = call noundef ptr @_ZN11spirv_cross10VectorViewImE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %1249) #9
  store ptr %1250, ptr %99, align 8, !tbaa !5
  br label %1251

1251:                                             ; preds = %1276, %1245
  %1252 = load ptr, ptr %98, align 8, !tbaa !5
  %1253 = load ptr, ptr %99, align 8, !tbaa !5
  %1254 = icmp ne ptr %1252, %1253
  br i1 %1254, label %1260, label %1255

1255:                                             ; preds = %1251
  store i32 23, ptr %76, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %99) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %97) #9
  br label %1293

1256:                                             ; preds = %1241
  %1257 = landingpad { ptr, i32 }
          cleanup
  %1258 = extractvalue { ptr, i32 } %1257, 0
  store ptr %1258, ptr %11, align 8
  %1259 = extractvalue { ptr, i32 } %1257, 1
  store i32 %1259, ptr %12, align 4
  br label %1297

1260:                                             ; preds = %1251
  call void @llvm.lifetime.start.p0(i64 8, ptr %100) #9
  %1261 = load ptr, ptr %98, align 8, !tbaa !5
  store ptr %1261, ptr %100, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %101) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %102) #9
  %1262 = load ptr, ptr %4, align 8, !tbaa !5
  %1263 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %1262, i32 0, i32 8
  %1264 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1263)
          to label %1265 unwind label %1279

1265:                                             ; preds = %1260
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %102, ptr noundef nonnull align 8 dereferenceable(9848) %193, i32 noundef %1264, i1 noundef zeroext true)
          to label %1266 unwind label %1279

1266:                                             ; preds = %1265
  call void @llvm.lifetime.start.p0(i64 32, ptr %103) #9
  %1267 = load ptr, ptr %100, align 8, !tbaa !5
  %1268 = load i64, ptr %1267, align 8, !tbaa !56
  %1269 = load ptr, ptr %57, align 8, !tbaa !5
  %1270 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1269, i32 0, i32 3
  %1271 = load i32, ptr %1270, align 4, !tbaa !183
  %1272 = load i8, ptr %58, align 1, !tbaa !9, !range !50, !noundef !51
  %1273 = trunc i8 %1272 to i1
  invoke void @"_ZZN11spirv_cross12CompilerGLSL16emit_block_chainERNS_9SPIRBlockEENK3$_1clB5cxx11Emjb"(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %103, ptr noundef nonnull align 1 dereferenceable(1) %84, i64 noundef %1268, i32 noundef %1271, i1 noundef zeroext %1273)
          to label %1274 unwind label %1283

1274:                                             ; preds = %1266
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA5_KcS6_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %101, ptr noundef nonnull align 8 dereferenceable(32) %102, ptr noundef nonnull align 1 dereferenceable(5) @.str.1488, ptr noundef nonnull align 8 dereferenceable(32) %103)
          to label %1275 unwind label %1287

1275:                                             ; preds = %1274
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %94, ptr noundef nonnull align 8 dereferenceable(32) %101) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %101) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %103) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %103) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %102) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %102) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %101) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %100) #9
  br label %1276

1276:                                             ; preds = %1275
  %1277 = load ptr, ptr %98, align 8, !tbaa !5
  %1278 = getelementptr inbounds i64, ptr %1277, i32 1
  store ptr %1278, ptr %98, align 8, !tbaa !5
  br label %1251

1279:                                             ; preds = %1265, %1260
  %1280 = landingpad { ptr, i32 }
          cleanup
  %1281 = extractvalue { ptr, i32 } %1280, 0
  store ptr %1281, ptr %11, align 8
  %1282 = extractvalue { ptr, i32 } %1280, 1
  store i32 %1282, ptr %12, align 4
  br label %1292

1283:                                             ; preds = %1266
  %1284 = landingpad { ptr, i32 }
          cleanup
  %1285 = extractvalue { ptr, i32 } %1284, 0
  store ptr %1285, ptr %11, align 8
  %1286 = extractvalue { ptr, i32 } %1284, 1
  store i32 %1286, ptr %12, align 4
  br label %1291

1287:                                             ; preds = %1274
  %1288 = landingpad { ptr, i32 }
          cleanup
  %1289 = extractvalue { ptr, i32 } %1288, 0
  store ptr %1289, ptr %11, align 8
  %1290 = extractvalue { ptr, i32 } %1288, 1
  store i32 %1290, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %103) #9
  br label %1291

1291:                                             ; preds = %1287, %1283
  call void @llvm.lifetime.end.p0(i64 32, ptr %103) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %102) #9
  br label %1292

1292:                                             ; preds = %1291, %1279
  call void @llvm.lifetime.end.p0(i64 32, ptr %102) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %101) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %100) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %99) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %97) #9
  br label %1297

1293:                                             ; preds = %1255
  call void @llvm.lifetime.end.p0(i64 8, ptr %96) #9
  br label %1294

1294:                                             ; preds = %1293
  %1295 = load i64, ptr %95, align 8, !tbaa !56
  %1296 = add i64 %1295, 1
  store i64 %1296, ptr %95, align 8, !tbaa !56
  br label %1224, !llvm.loop !184

1297:                                             ; preds = %1292, %1256
  call void @llvm.lifetime.end.p0(i64 8, ptr %96) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %95) #9
  br label %1328

1298:                                             ; preds = %1228
  call void @llvm.lifetime.start.p0(i64 32, ptr %104) #9
  invoke void @_ZN11spirv_cross5mergeERKNS_11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEEPKc(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %104, ptr noundef nonnull align 8 dereferenceable(280) %94, ptr noundef @.str.136)
          to label %1299 unwind label %1315

1299:                                             ; preds = %1298
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA5_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 1 dereferenceable(5) @.str.1624, ptr noundef nonnull align 8 dereferenceable(32) %104, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %1300 unwind label %1319

1300:                                             ; preds = %1299
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %104) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %104) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL11begin_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848) %193)
          to label %1301 unwind label %1324

1301:                                             ; preds = %1300
  %1302 = load ptr, ptr %4, align 8, !tbaa !5
  %1303 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1302, i32 0, i32 1
  %1304 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_6EEEv(ptr noundef nonnull align 4 dereferenceable(4) %1303)
          to label %1305 unwind label %1324

1305:                                             ; preds = %1301
  %1306 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %105, i32 0, i32 0
  store i32 %1304, ptr %1306, align 4
  %1307 = load i32, ptr %91, align 4, !tbaa !41
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %106, i32 noundef %1307)
          to label %1308 unwind label %1324

1308:                                             ; preds = %1305
  %1309 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %105, i32 0, i32 0
  %1310 = load i32, ptr %1309, align 4
  %1311 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %106, i32 0, i32 0
  %1312 = load i32, ptr %1311, align 4
  invoke void @_ZN11spirv_cross12CompilerGLSL9flush_phiENS_7TypedIDILNS_5TypesE6EEES3_(ptr noundef nonnull align 8 dereferenceable(9848) %193, i32 %1310, i32 %1312)
          to label %1313 unwind label %1324

1313:                                             ; preds = %1308
  invoke void @_ZN11spirv_cross12CompilerGLSL9end_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848) %193)
          to label %1314 unwind label %1324

1314:                                             ; preds = %1313
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(280) %94) #9
  call void @llvm.lifetime.end.p0(i64 280, ptr %94) #9
  br label %1406

1315:                                             ; preds = %1298
  %1316 = landingpad { ptr, i32 }
          cleanup
  %1317 = extractvalue { ptr, i32 } %1316, 0
  store ptr %1317, ptr %11, align 8
  %1318 = extractvalue { ptr, i32 } %1316, 1
  store i32 %1318, ptr %12, align 4
  br label %1323

1319:                                             ; preds = %1299
  %1320 = landingpad { ptr, i32 }
          cleanup
  %1321 = extractvalue { ptr, i32 } %1320, 0
  store ptr %1321, ptr %11, align 8
  %1322 = extractvalue { ptr, i32 } %1320, 1
  store i32 %1322, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %104) #9
  br label %1323

1323:                                             ; preds = %1319, %1315
  call void @llvm.lifetime.end.p0(i64 32, ptr %104) #9
  br label %1328

1324:                                             ; preds = %1313, %1308, %1305, %1301, %1300
  %1325 = landingpad { ptr, i32 }
          cleanup
  %1326 = extractvalue { ptr, i32 } %1325, 0
  store ptr %1326, ptr %11, align 8
  %1327 = extractvalue { ptr, i32 } %1325, 1
  store i32 %1327, ptr %12, align 4
  br label %1328

1328:                                             ; preds = %1324, %1323, %1297
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(280) %94) #9
  call void @llvm.lifetime.end.p0(i64 280, ptr %94) #9
  br label %1420

1329:                                             ; preds = %1220
  call void @llvm.lifetime.start.p0(i64 280, ptr %107) #9
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEC2Ev(ptr noundef nonnull align 8 dereferenceable(280) %107) #9
  %1330 = load ptr, ptr %93, align 8, !tbaa !5
  %1331 = call noundef i64 @_ZNK11spirv_cross10VectorViewImE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %1330) #9
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE7reserveEm(ptr noundef nonnull align 8 dereferenceable(280) %107, i64 noundef %1331) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %108) #9
  %1332 = load ptr, ptr %93, align 8, !tbaa !5
  store ptr %1332, ptr %108, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %109) #9
  %1333 = load ptr, ptr %108, align 8, !tbaa !5
  %1334 = call noundef ptr @_ZN11spirv_cross10VectorViewImE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %1333) #9
  store ptr %1334, ptr %109, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %110) #9
  %1335 = load ptr, ptr %108, align 8, !tbaa !5
  %1336 = call noundef ptr @_ZN11spirv_cross10VectorViewImE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %1335) #9
  store ptr %1336, ptr %110, align 8, !tbaa !5
  br label %1337

1337:                                             ; preds = %1358, %1329
  %1338 = load ptr, ptr %109, align 8, !tbaa !5
  %1339 = load ptr, ptr %110, align 8, !tbaa !5
  %1340 = icmp ne ptr %1338, %1339
  br i1 %1340, label %1342, label %1341

1341:                                             ; preds = %1337
  store i32 25, ptr %76, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %110) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %109) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #9
  br label %1375

1342:                                             ; preds = %1337
  call void @llvm.lifetime.start.p0(i64 8, ptr %111) #9
  %1343 = load ptr, ptr %109, align 8, !tbaa !5
  store ptr %1343, ptr %111, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %112) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %113) #9
  %1344 = load ptr, ptr %4, align 8, !tbaa !5
  %1345 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %1344, i32 0, i32 8
  %1346 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1345)
          to label %1347 unwind label %1361

1347:                                             ; preds = %1342
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %113, ptr noundef nonnull align 8 dereferenceable(9848) %193, i32 noundef %1346, i1 noundef zeroext true)
          to label %1348 unwind label %1361

1348:                                             ; preds = %1347
  call void @llvm.lifetime.start.p0(i64 32, ptr %114) #9
  %1349 = load ptr, ptr %111, align 8, !tbaa !5
  %1350 = load i64, ptr %1349, align 8, !tbaa !56
  %1351 = load ptr, ptr %57, align 8, !tbaa !5
  %1352 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1351, i32 0, i32 3
  %1353 = load i32, ptr %1352, align 4, !tbaa !183
  %1354 = load i8, ptr %58, align 1, !tbaa !9, !range !50, !noundef !51
  %1355 = trunc i8 %1354 to i1
  invoke void @"_ZZN11spirv_cross12CompilerGLSL16emit_block_chainERNS_9SPIRBlockEENK3$_1clB5cxx11Emjb"(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %114, ptr noundef nonnull align 1 dereferenceable(1) %84, i64 noundef %1350, i32 noundef %1353, i1 noundef zeroext %1355)
          to label %1356 unwind label %1365

1356:                                             ; preds = %1348
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA5_KcS6_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %112, ptr noundef nonnull align 8 dereferenceable(32) %113, ptr noundef nonnull align 1 dereferenceable(5) @.str.1388, ptr noundef nonnull align 8 dereferenceable(32) %114)
          to label %1357 unwind label %1369

1357:                                             ; preds = %1356
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %107, ptr noundef nonnull align 8 dereferenceable(32) %112) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %112) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %114) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %114) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %113) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %113) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %112) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #9
  br label %1358

1358:                                             ; preds = %1357
  %1359 = load ptr, ptr %109, align 8, !tbaa !5
  %1360 = getelementptr inbounds i64, ptr %1359, i32 1
  store ptr %1360, ptr %109, align 8, !tbaa !5
  br label %1337

1361:                                             ; preds = %1347, %1342
  %1362 = landingpad { ptr, i32 }
          cleanup
  %1363 = extractvalue { ptr, i32 } %1362, 0
  store ptr %1363, ptr %11, align 8
  %1364 = extractvalue { ptr, i32 } %1362, 1
  store i32 %1364, ptr %12, align 4
  br label %1374

1365:                                             ; preds = %1348
  %1366 = landingpad { ptr, i32 }
          cleanup
  %1367 = extractvalue { ptr, i32 } %1366, 0
  store ptr %1367, ptr %11, align 8
  %1368 = extractvalue { ptr, i32 } %1366, 1
  store i32 %1368, ptr %12, align 4
  br label %1373

1369:                                             ; preds = %1356
  %1370 = landingpad { ptr, i32 }
          cleanup
  %1371 = extractvalue { ptr, i32 } %1370, 0
  store ptr %1371, ptr %11, align 8
  %1372 = extractvalue { ptr, i32 } %1370, 1
  store i32 %1372, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %114) #9
  br label %1373

1373:                                             ; preds = %1369, %1365
  call void @llvm.lifetime.end.p0(i64 32, ptr %114) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %113) #9
  br label %1374

1374:                                             ; preds = %1373, %1361
  call void @llvm.lifetime.end.p0(i64 32, ptr %113) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %112) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %110) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %109) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #9
  br label %1405

1375:                                             ; preds = %1341
  call void @llvm.lifetime.start.p0(i64 32, ptr %115) #9
  invoke void @_ZN11spirv_cross5mergeERKNS_11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEEPKc(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %115, ptr noundef nonnull align 8 dereferenceable(280) %107, ptr noundef @.str.1641)
          to label %1376 unwind label %1392

1376:                                             ; preds = %1375
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA5_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 1 dereferenceable(5) @.str.1624, ptr noundef nonnull align 8 dereferenceable(32) %115, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %1377 unwind label %1396

1377:                                             ; preds = %1376
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %115) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %115) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL11begin_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848) %193)
          to label %1378 unwind label %1401

1378:                                             ; preds = %1377
  %1379 = load ptr, ptr %4, align 8, !tbaa !5
  %1380 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1379, i32 0, i32 1
  %1381 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_6EEEv(ptr noundef nonnull align 4 dereferenceable(4) %1380)
          to label %1382 unwind label %1401

1382:                                             ; preds = %1378
  %1383 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %116, i32 0, i32 0
  store i32 %1381, ptr %1383, align 4
  %1384 = load i32, ptr %91, align 4, !tbaa !41
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %117, i32 noundef %1384)
          to label %1385 unwind label %1401

1385:                                             ; preds = %1382
  %1386 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %116, i32 0, i32 0
  %1387 = load i32, ptr %1386, align 4
  %1388 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %117, i32 0, i32 0
  %1389 = load i32, ptr %1388, align 4
  invoke void @_ZN11spirv_cross12CompilerGLSL9flush_phiENS_7TypedIDILNS_5TypesE6EEES3_(ptr noundef nonnull align 8 dereferenceable(9848) %193, i32 %1387, i32 %1389)
          to label %1390 unwind label %1401

1390:                                             ; preds = %1385
  invoke void @_ZN11spirv_cross12CompilerGLSL9end_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848) %193)
          to label %1391 unwind label %1401

1391:                                             ; preds = %1390
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(280) %107) #9
  call void @llvm.lifetime.end.p0(i64 280, ptr %107) #9
  br label %1406

1392:                                             ; preds = %1375
  %1393 = landingpad { ptr, i32 }
          cleanup
  %1394 = extractvalue { ptr, i32 } %1393, 0
  store ptr %1394, ptr %11, align 8
  %1395 = extractvalue { ptr, i32 } %1393, 1
  store i32 %1395, ptr %12, align 4
  br label %1400

1396:                                             ; preds = %1376
  %1397 = landingpad { ptr, i32 }
          cleanup
  %1398 = extractvalue { ptr, i32 } %1397, 0
  store ptr %1398, ptr %11, align 8
  %1399 = extractvalue { ptr, i32 } %1397, 1
  store i32 %1399, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %115) #9
  br label %1400

1400:                                             ; preds = %1396, %1392
  call void @llvm.lifetime.end.p0(i64 32, ptr %115) #9
  br label %1405

1401:                                             ; preds = %1390, %1385, %1382, %1378, %1377
  %1402 = landingpad { ptr, i32 }
          cleanup
  %1403 = extractvalue { ptr, i32 } %1402, 0
  store ptr %1403, ptr %11, align 8
  %1404 = extractvalue { ptr, i32 } %1402, 1
  store i32 %1404, ptr %12, align 4
  br label %1405

1405:                                             ; preds = %1401, %1400, %1374
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(280) %107) #9
  call void @llvm.lifetime.end.p0(i64 280, ptr %107) #9
  br label %1420

1406:                                             ; preds = %1391, %1314
  call void @llvm.lifetime.start.p0(i64 4, ptr %118) #9
  %1407 = load ptr, ptr %4, align 8, !tbaa !5
  %1408 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1407, i32 0, i32 1
  %1409 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_6EEEv(ptr noundef nonnull align 4 dereferenceable(4) %1408)
          to label %1410 unwind label %1416

1410:                                             ; preds = %1406
  %1411 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %118, i32 0, i32 0
  store i32 %1409, ptr %1411, align 4
  %1412 = load i32, ptr %91, align 4, !tbaa !41
  %1413 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %193, i32 noundef %1412)
          to label %1414 unwind label %1416

1414:                                             ; preds = %1410
  %1415 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %1413, i32 0, i32 22
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1415, ptr align 4 %118, i64 4, i1 false), !tbaa.struct !40
  call void @llvm.lifetime.end.p0(i64 4, ptr %118) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %91) #9
  br label %1422

1416:                                             ; preds = %1410, %1406
  %1417 = landingpad { ptr, i32 }
          cleanup
  %1418 = extractvalue { ptr, i32 } %1417, 0
  store ptr %1418, ptr %11, align 8
  %1419 = extractvalue { ptr, i32 } %1417, 1
  store i32 %1419, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %118) #9
  br label %1420

1420:                                             ; preds = %1416, %1405, %1328, %1237
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #9
  br label %1421

1421:                                             ; preds = %1420, %1233
  call void @llvm.lifetime.end.p0(i64 4, ptr %91) #9
  br label %1426

1422:                                             ; preds = %1414, %1209, %1193
  br label %1423

1423:                                             ; preds = %1422
  %1424 = load i64, ptr %86, align 8, !tbaa !56
  %1425 = add i64 %1424, 1
  store i64 %1425, ptr %86, align 8, !tbaa !56
  br label %1166, !llvm.loop !185

1426:                                             ; preds = %1421, %1229
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #9
  br label %1817

1427:                                             ; preds = %1177
  call void @llvm.lifetime.start.p0(i64 1, ptr %119) #9
  %1428 = load ptr, ptr %64, align 8, !tbaa !5
  %1429 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewINS_9SPIRBlock4CaseEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %1428) #9
  %1430 = zext i1 %1429 to i8
  store i8 %1430, ptr %119, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %120) #9
  %1431 = load i8, ptr %119, align 1, !tbaa !9, !range !50, !noundef !51
  %1432 = trunc i8 %1431 to i1
  br i1 %1432, label %1433, label %1443

1433:                                             ; preds = %1427
  %1434 = load ptr, ptr %4, align 8, !tbaa !5
  %1435 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %1434, i32 0, i32 11
  %1436 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1435)
          to label %1437 unwind label %1461

1437:                                             ; preds = %1433
  %1438 = load ptr, ptr %4, align 8, !tbaa !5
  %1439 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %1438, i32 0, i32 4
  %1440 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1439)
          to label %1441 unwind label %1461

1441:                                             ; preds = %1437
  %1442 = icmp eq i32 %1436, %1440
  br label %1443

1443:                                             ; preds = %1441, %1427
  %1444 = phi i1 [ false, %1427 ], [ %1442, %1441 ]
  %1445 = zext i1 %1444 to i8
  store i8 %1445, ptr %120, align 1, !tbaa !9
  %1446 = load i8, ptr %120, align 1, !tbaa !9, !range !50, !noundef !51
  %1447 = trunc i8 %1446 to i1
  br i1 %1447, label %1495, label %1448

1448:                                             ; preds = %1443
  %1449 = load i8, ptr %119, align 1, !tbaa !9, !range !50, !noundef !51
  %1450 = trunc i8 %1449 to i1
  br i1 %1450, label %1454, label %1451

1451:                                             ; preds = %1448
  %1452 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %193)
          to label %1453 unwind label %1461

1453:                                             ; preds = %1451
  br i1 %1452, label %1454, label %1472

1454:                                             ; preds = %1453, %1448
  %1455 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL12is_legacy_esEv(ptr noundef nonnull align 8 dereferenceable(9848) %193)
          to label %1456 unwind label %1461

1456:                                             ; preds = %1454
  br i1 %1455, label %1457, label %1469

1457:                                             ; preds = %1456
  call void @llvm.lifetime.start.p0(i64 4, ptr %121) #9
  %1458 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %193, i32 0, i32 33
  %1459 = load i32, ptr %1458, align 8, !tbaa !186
  store i32 %1459, ptr %121, align 4, !tbaa !41
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA18_KcRjRA15_S2_S5_S7_S5_RA4_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 1 dereferenceable(18) @.str.1642, ptr noundef nonnull align 4 dereferenceable(4) %121, ptr noundef nonnull align 1 dereferenceable(15) @.str.1643, ptr noundef nonnull align 4 dereferenceable(4) %121, ptr noundef nonnull align 1 dereferenceable(15) @.str.1644, ptr noundef nonnull align 4 dereferenceable(4) %121, ptr noundef nonnull align 1 dereferenceable(4) @.str.1645)
          to label %1460 unwind label %1465

1460:                                             ; preds = %1457
  call void @llvm.lifetime.end.p0(i64 4, ptr %121) #9
  br label %1471

1461:                                             ; preds = %1493, %1472, %1469, %1454, %1451, %1437, %1433
  %1462 = landingpad { ptr, i32 }
          cleanup
  %1463 = extractvalue { ptr, i32 } %1462, 0
  store ptr %1463, ptr %11, align 8
  %1464 = extractvalue { ptr, i32 } %1462, 1
  store i32 %1464, ptr %12, align 4
  br label %1816

1465:                                             ; preds = %1457
  %1466 = landingpad { ptr, i32 }
          cleanup
  %1467 = extractvalue { ptr, i32 } %1466, 0
  store ptr %1467, ptr %11, align 8
  %1468 = extractvalue { ptr, i32 } %1466, 1
  store i32 %1468, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %121) #9
  br label %1816

1469:                                             ; preds = %1456
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA3_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 1 dereferenceable(3) @.str.542)
          to label %1470 unwind label %1461

1470:                                             ; preds = %1469
  br label %1471

1471:                                             ; preds = %1470, %1460
  br label %1493

1472:                                             ; preds = %1453
  %1473 = load ptr, ptr %4, align 8, !tbaa !5
  %1474 = load ptr, ptr %193, align 8, !tbaa !60
  %1475 = getelementptr inbounds ptr, ptr %1474, i64 56
  %1476 = load ptr, ptr %1475, align 8
  invoke void %1476(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 8 dereferenceable(976) %1473)
          to label %1477 unwind label %1461

1477:                                             ; preds = %1472
  call void @llvm.lifetime.start.p0(i64 32, ptr %122) #9
  %1478 = load ptr, ptr %4, align 8, !tbaa !5
  %1479 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %1478, i32 0, i32 8
  %1480 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1479)
          to label %1481 unwind label %1484

1481:                                             ; preds = %1477
  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) %193, i32 noundef %1480, i1 noundef zeroext true)
          to label %1482 unwind label %1484

1482:                                             ; preds = %1481
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA9_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 1 dereferenceable(9) @.str.1646, ptr noundef nonnull align 8 dereferenceable(32) %122, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %1483 unwind label %1488

1483:                                             ; preds = %1482
  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
  br label %1493

1484:                                             ; preds = %1481, %1477
  %1485 = landingpad { ptr, i32 }
          cleanup
  %1486 = extractvalue { ptr, i32 } %1485, 0
  store ptr %1486, ptr %11, align 8
  %1487 = extractvalue { ptr, i32 } %1485, 1
  store i32 %1487, ptr %12, align 4
  br label %1492

1488:                                             ; preds = %1482
  %1489 = landingpad { ptr, i32 }
          cleanup
  %1490 = extractvalue { ptr, i32 } %1489, 0
  store ptr %1490, ptr %11, align 8
  %1491 = extractvalue { ptr, i32 } %1489, 1
  store i32 %1491, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %122) #9
  br label %1492

1492:                                             ; preds = %1488, %1484
  call void @llvm.lifetime.end.p0(i64 32, ptr %122) #9
  br label %1816

1493:                                             ; preds = %1483, %1471
  invoke void @_ZN11spirv_cross12CompilerGLSL11begin_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848) %193)
          to label %1494 unwind label %1461

1494:                                             ; preds = %1493
  br label %1495

1495:                                             ; preds = %1494, %1443
  call void @llvm.lifetime.start.p0(i64 8, ptr %123) #9
  store i64 0, ptr %123, align 8, !tbaa !56
  br label %1496

1496:                                             ; preds = %1641, %1495
  %1497 = load i64, ptr %123, align 8, !tbaa !56
  %1498 = load i64, ptr %83, align 8, !tbaa !56
  %1499 = icmp ult i64 %1497, %1498
  br i1 %1499, label %1501, label %1500

1500:                                             ; preds = %1496
  store i32 27, ptr %76, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %123) #9
  br label %1645

1501:                                             ; preds = %1496
  call void @llvm.lifetime.start.p0(i64 4, ptr %124) #9
  %1502 = load i64, ptr %123, align 8, !tbaa !56
  %1503 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %62, i64 noundef %1502) #9
  %1504 = load i32, ptr %1503, align 4, !tbaa !41
  store i32 %1504, ptr %124, align 4, !tbaa !41
  call void @llvm.lifetime.start.p0(i64 8, ptr %125) #9
  %1505 = invoke noundef nonnull align 8 dereferenceable(88) ptr @_ZNSt13unordered_mapIjN11spirv_cross11SmallVectorImLm8EEESt4hashIjESt8equal_toIjESaISt4pairIKjS2_EEEixERS8_(ptr noundef nonnull align 8 dereferenceable(56) %61, ptr noundef nonnull align 4 dereferenceable(4) %124)
          to label %1506 unwind label %1517

1506:                                             ; preds = %1501
  store ptr %1505, ptr %125, align 8, !tbaa !5
  %1507 = load ptr, ptr %125, align 8, !tbaa !5
  %1508 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewImE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %1507) #9
  br i1 %1508, label %1509, label %1525

1509:                                             ; preds = %1506
  %1510 = load i8, ptr %119, align 1, !tbaa !9, !range !50, !noundef !51
  %1511 = trunc i8 %1510 to i1
  br i1 %1511, label %1524, label %1512

1512:                                             ; preds = %1509
  %1513 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %193)
          to label %1514 unwind label %1517

1514:                                             ; preds = %1512
  br i1 %1513, label %1515, label %1521

1515:                                             ; preds = %1514
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA5_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 1 dereferenceable(5) @.str.547)
          to label %1516 unwind label %1517

1516:                                             ; preds = %1515
  br label %1523

1517:                                             ; preds = %1525, %1521, %1515, %1512, %1501
  %1518 = landingpad { ptr, i32 }
          cleanup
  %1519 = extractvalue { ptr, i32 } %1518, 0
  store ptr %1519, ptr %11, align 8
  %1520 = extractvalue { ptr, i32 } %1518, 1
  store i32 %1520, ptr %12, align 4
  br label %1644

1521:                                             ; preds = %1514
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA9_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 1 dereferenceable(9) @.str.1647)
          to label %1522 unwind label %1517

1522:                                             ; preds = %1521
  br label %1523

1523:                                             ; preds = %1522, %1516
  br label %1524

1524:                                             ; preds = %1523, %1509
  br label %1586

1525:                                             ; preds = %1506
  %1526 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %193)
          to label %1527 unwind label %1517

1527:                                             ; preds = %1525
  br i1 %1526, label %1528, label %1550

1528:                                             ; preds = %1527
  call void @llvm.lifetime.start.p0(i64 8, ptr %126) #9
  %1529 = load i64, ptr %123, align 8, !tbaa !56
  %1530 = icmp ne i64 %1529, 0
  %1531 = zext i1 %1530 to i64
  %1532 = select i1 %1530, ptr @.str.1648, ptr @.str.9
  store ptr %1532, ptr %126, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %127) #9
  %1533 = load ptr, ptr %4, align 8, !tbaa !5
  %1534 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %1533, i32 0, i32 8
  %1535 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1534)
          to label %1536 unwind label %1541

1536:                                             ; preds = %1528
  %1537 = load ptr, ptr %125, align 8, !tbaa !5
  %1538 = load ptr, ptr %59, align 8, !tbaa !5
  invoke void @"_ZZN11spirv_cross12CompilerGLSL16emit_block_chainERNS_9SPIRBlockEENK3$_2clB5cxx11EjRKNS_11SmallVectorImLm8EEEPKc"(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %127, ptr noundef nonnull align 8 dereferenceable(8) %85, i32 noundef %1535, ptr noundef nonnull align 8 dereferenceable(88) %1537, ptr noundef %1538)
          to label %1539 unwind label %1541

1539:                                             ; preds = %1536
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJPKcRA5_S2_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 8 dereferenceable(8) %126, ptr noundef nonnull align 1 dereferenceable(5) @.str.1624, ptr noundef nonnull align 8 dereferenceable(32) %127, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %1540 unwind label %1545

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

1541:                                             ; preds = %1536, %1528
  %1542 = landingpad { ptr, i32 }
          cleanup
  %1543 = extractvalue { ptr, i32 } %1542, 0
  store ptr %1543, ptr %11, align 8
  %1544 = extractvalue { ptr, i32 } %1542, 1
  store i32 %1544, ptr %12, align 4
  br label %1549

1545:                                             ; preds = %1539
  %1546 = landingpad { ptr, i32 }
          cleanup
  %1547 = extractvalue { ptr, i32 } %1546, 0
  store ptr %1547, ptr %11, align 8
  %1548 = extractvalue { ptr, i32 } %1546, 1
  store i32 %1548, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %127) #9
  br label %1549

1549:                                             ; preds = %1545, %1541
  call void @llvm.lifetime.end.p0(i64 32, ptr %127) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %126) #9
  br label %1644

1550:                                             ; preds = %1527
  call void @llvm.lifetime.start.p0(i64 8, ptr %128) #9
  %1551 = load ptr, ptr %125, align 8, !tbaa !5
  store ptr %1551, ptr %128, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %129) #9
  %1552 = load ptr, ptr %128, align 8, !tbaa !5
  %1553 = call noundef ptr @_ZN11spirv_cross10VectorViewImE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %1552) #9
  store ptr %1553, ptr %129, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %130) #9
  %1554 = load ptr, ptr %128, align 8, !tbaa !5
  %1555 = call noundef ptr @_ZN11spirv_cross10VectorViewImE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %1554) #9
  store ptr %1555, ptr %130, align 8, !tbaa !5
  br label %1556

1556:                                             ; preds = %1572, %1550
  %1557 = load ptr, ptr %129, align 8, !tbaa !5
  %1558 = load ptr, ptr %130, align 8, !tbaa !5
  %1559 = icmp ne ptr %1557, %1558
  br i1 %1559, label %1561, label %1560

1560:                                             ; preds = %1556
  store i32 30, ptr %76, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %130) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %129) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %128) #9
  br label %1584

1561:                                             ; preds = %1556
  call void @llvm.lifetime.start.p0(i64 8, ptr %131) #9
  %1562 = load ptr, ptr %129, align 8, !tbaa !5
  store ptr %1562, ptr %131, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %132) #9
  %1563 = load ptr, ptr %131, align 8, !tbaa !5
  %1564 = load i64, ptr %1563, align 8, !tbaa !56
  %1565 = load ptr, ptr %57, align 8, !tbaa !5
  %1566 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1565, i32 0, i32 3
  %1567 = load i32, ptr %1566, align 4, !tbaa !183
  %1568 = load i8, ptr %58, align 1, !tbaa !9, !range !50, !noundef !51
  %1569 = trunc i8 %1568 to i1
  invoke void @"_ZZN11spirv_cross12CompilerGLSL16emit_block_chainERNS_9SPIRBlockEENK3$_1clB5cxx11Emjb"(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %132, ptr noundef nonnull align 1 dereferenceable(1) %84, i64 noundef %1564, i32 noundef %1567, i1 noundef zeroext %1569)
          to label %1570 unwind label %1575

1570:                                             ; preds = %1561
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA6_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERPS2_RA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 1 dereferenceable(6) @.str.1649, ptr noundef nonnull align 8 dereferenceable(32) %132, ptr noundef nonnull align 8 dereferenceable(8) %59, ptr noundef nonnull align 1 dereferenceable(2) @.str.1650)
          to label %1571 unwind label %1579

1571:                                             ; preds = %1570
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %132) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %132) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %131) #9
  br label %1572

1572:                                             ; preds = %1571
  %1573 = load ptr, ptr %129, align 8, !tbaa !5
  %1574 = getelementptr inbounds i64, ptr %1573, i32 1
  store ptr %1574, ptr %129, align 8, !tbaa !5
  br label %1556

1575:                                             ; preds = %1561
  %1576 = landingpad { ptr, i32 }
          cleanup
  %1577 = extractvalue { ptr, i32 } %1576, 0
  store ptr %1577, ptr %11, align 8
  %1578 = extractvalue { ptr, i32 } %1576, 1
  store i32 %1578, ptr %12, align 4
  br label %1583

1579:                                             ; preds = %1570
  %1580 = landingpad { ptr, i32 }
          cleanup
  %1581 = extractvalue { ptr, i32 } %1580, 0
  store ptr %1581, ptr %11, align 8
  %1582 = extractvalue { ptr, i32 } %1580, 1
  store i32 %1582, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %132) #9
  br label %1583

1583:                                             ; preds = %1579, %1575
  call void @llvm.lifetime.end.p0(i64 32, ptr %132) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %131) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %130) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %129) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %128) #9
  br label %1644

1584:                                             ; preds = %1560
  br label %1585

1585:                                             ; preds = %1584, %1540
  br label %1586

1586:                                             ; preds = %1585, %1524
  call void @llvm.lifetime.start.p0(i64 8, ptr %133) #9
  %1587 = load i32, ptr %124, align 4, !tbaa !41
  %1588 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %193, i32 noundef %1587)
          to label %1589 unwind label %1611

1589:                                             ; preds = %1586
  store ptr %1588, ptr %133, align 8, !tbaa !5
  %1590 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %193, i32 0, i32 21
  %1591 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %1590, i32 0, i32 42
  %1592 = load i8, ptr %1591, align 1, !tbaa !182, !range !50, !noundef !51
  %1593 = trunc i8 %1592 to i1
  br i1 %1593, label %1594, label %1615

1594:                                             ; preds = %1589
  %1595 = load i64, ptr %123, align 8, !tbaa !56
  %1596 = add i64 %1595, 1
  %1597 = load i64, ptr %83, align 8, !tbaa !56
  %1598 = icmp ult i64 %1596, %1597
  br i1 %1598, label %1599, label %1615

1599:                                             ; preds = %1594
  %1600 = load ptr, ptr %133, align 8, !tbaa !5
  %1601 = load i64, ptr %123, align 8, !tbaa !56
  %1602 = add i64 %1601, 1
  %1603 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %62, i64 noundef %1602) #9
  %1604 = load i32, ptr %1603, align 4, !tbaa !41
  %1605 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %193, i32 noundef %1604)
          to label %1606 unwind label %1611

1606:                                             ; preds = %1599
  %1607 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler26execution_is_direct_branchERKNS_9SPIRBlockES3_(ptr noundef nonnull align 8 dereferenceable(3176) %193, ptr noundef nonnull align 8 dereferenceable(976) %1600, ptr noundef nonnull align 8 dereferenceable(976) %1605)
          to label %1608 unwind label %1611

1608:                                             ; preds = %1606
  br i1 %1607, label %1609, label %1615

1609:                                             ; preds = %1608
  %1610 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %193, i32 0, i32 3
  store i8 1, ptr %1610, align 8, !tbaa !187
  br label %1617

1611:                                             ; preds = %1637, %1629, %1626, %1622, %1620, %1606, %1599, %1586
  %1612 = landingpad { ptr, i32 }
          cleanup
  %1613 = extractvalue { ptr, i32 } %1612, 0
  store ptr %1613, ptr %11, align 8
  %1614 = extractvalue { ptr, i32 } %1612, 1
  store i32 %1614, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %133) #9
  br label %1644

1615:                                             ; preds = %1608, %1594, %1589
  %1616 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %193, i32 0, i32 3
  store i8 0, ptr %1616, align 8, !tbaa !187
  br label %1617

1617:                                             ; preds = %1615, %1609
  %1618 = load i8, ptr %119, align 1, !tbaa !9, !range !50, !noundef !51
  %1619 = trunc i8 %1618 to i1
  br i1 %1619, label %1622, label %1620

1620:                                             ; preds = %1617
  invoke void @_ZN11spirv_cross12CompilerGLSL11begin_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848) %193)
          to label %1621 unwind label %1611

1621:                                             ; preds = %1620
  br label %1622

1622:                                             ; preds = %1621, %1617
  %1623 = load ptr, ptr %4, align 8, !tbaa !5
  %1624 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1623, i32 0, i32 1
  %1625 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_6EEEv(ptr noundef nonnull align 4 dereferenceable(4) %1624)
          to label %1626 unwind label %1611

1626:                                             ; preds = %1622
  %1627 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %134, i32 0, i32 0
  store i32 %1625, ptr %1627, align 4
  %1628 = load i32, ptr %124, align 4, !tbaa !41
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %135, i32 noundef %1628)
          to label %1629 unwind label %1611

1629:                                             ; preds = %1626
  %1630 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %134, i32 0, i32 0
  %1631 = load i32, ptr %1630, align 4
  %1632 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %135, i32 0, i32 0
  %1633 = load i32, ptr %1632, align 4
  invoke void @_ZN11spirv_cross12CompilerGLSL6branchENS_7TypedIDILNS_5TypesE6EEES3_(ptr noundef nonnull align 8 dereferenceable(9848) %193, i32 %1631, i32 %1633)
          to label %1634 unwind label %1611

1634:                                             ; preds = %1629
  %1635 = load i8, ptr %119, align 1, !tbaa !9, !range !50, !noundef !51
  %1636 = trunc i8 %1635 to i1
  br i1 %1636, label %1639, label %1637

1637:                                             ; preds = %1634
  invoke void @_ZN11spirv_cross12CompilerGLSL9end_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848) %193)
          to label %1638 unwind label %1611

1638:                                             ; preds = %1637
  br label %1639

1639:                                             ; preds = %1638, %1634
  %1640 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %193, i32 0, i32 3
  store i8 0, ptr %1640, align 8, !tbaa !187
  call void @llvm.lifetime.end.p0(i64 8, ptr %133) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %125) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %124) #9
  br label %1641

1641:                                             ; preds = %1639
  %1642 = load i64, ptr %123, align 8, !tbaa !56
  %1643 = add i64 %1642, 1
  store i64 %1643, ptr %123, align 8, !tbaa !56
  br label %1496, !llvm.loop !188

1644:                                             ; preds = %1611, %1583, %1549, %1517
  call void @llvm.lifetime.end.p0(i64 8, ptr %125) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %124) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %123) #9
  br label %1816

1645:                                             ; preds = %1500
  call void @llvm.lifetime.start.p0(i64 1, ptr %136) #9
  %1646 = load ptr, ptr %4, align 8, !tbaa !5
  %1647 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1646, i32 0, i32 1
  %1648 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_6EEEv(ptr noundef nonnull align 4 dereferenceable(4) %1647)
          to label %1649 unwind label %1695

1649:                                             ; preds = %1645
  %1650 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %137, i32 0, i32 0
  store i32 %1648, ptr %1650, align 4
  %1651 = load ptr, ptr %4, align 8, !tbaa !5
  %1652 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %1651, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %138, ptr align 8 %1652, i64 4, i1 false), !tbaa.struct !40
  %1653 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %137, i32 0, i32 0
  %1654 = load i32, ptr %1653, align 4
  %1655 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %138, i32 0, i32 0
  %1656 = load i32, ptr %1655, align 4
  %1657 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler18flush_phi_requiredENS_7TypedIDILNS_5TypesE6EEES3_(ptr noundef nonnull align 8 dereferenceable(3176) %193, i32 %1654, i32 %1656)
          to label %1658 unwind label %1695

1658:                                             ; preds = %1649
  %1659 = zext i1 %1657 to i8
  store i8 %1659, ptr %136, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %139) #9
  %1660 = load ptr, ptr %4, align 8, !tbaa !5
  %1661 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %1660, i32 0, i32 11
  %1662 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1661)
          to label %1663 unwind label %1699

1663:                                             ; preds = %1658
  %1664 = load ptr, ptr %4, align 8, !tbaa !5
  %1665 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %1664, i32 0, i32 4
  %1666 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1665)
          to label %1667 unwind label %1699

1667:                                             ; preds = %1663
  %1668 = icmp eq i32 %1662, %1666
  br i1 %1668, label %1672, label %1669

1669:                                             ; preds = %1667
  %1670 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewImE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %63) #9
  %1671 = xor i1 %1670, true
  br label %1672

1672:                                             ; preds = %1669, %1667
  %1673 = phi i1 [ true, %1667 ], [ %1671, %1669 ]
  %1674 = zext i1 %1673 to i8
  store i8 %1674, ptr %139, align 1, !tbaa !9
  %1675 = load i8, ptr %120, align 1, !tbaa !9, !range !50, !noundef !51
  %1676 = trunc i8 %1675 to i1
  br i1 %1676, label %1760, label %1677

1677:                                             ; preds = %1672
  %1678 = load i8, ptr %136, align 1, !tbaa !9, !range !50, !noundef !51
  %1679 = trunc i8 %1678 to i1
  br i1 %1679, label %1680, label %1683

1680:                                             ; preds = %1677
  %1681 = load i8, ptr %139, align 1, !tbaa !9, !range !50, !noundef !51
  %1682 = trunc i8 %1681 to i1
  br i1 %1682, label %1685, label %1683

1683:                                             ; preds = %1680, %1677
  %1684 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewImE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %63) #9
  br i1 %1684, label %1760, label %1685

1685:                                             ; preds = %1683, %1680
  call void @llvm.lifetime.start.p0(i64 8, ptr %140) #9
  store ptr %63, ptr %140, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %141) #9
  %1686 = load ptr, ptr %140, align 8, !tbaa !5
  %1687 = call noundef ptr @_ZN11spirv_cross10VectorViewImE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %1686) #9
  store ptr %1687, ptr %141, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %142) #9
  %1688 = load ptr, ptr %140, align 8, !tbaa !5
  %1689 = call noundef ptr @_ZN11spirv_cross10VectorViewImE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %1688) #9
  store ptr %1689, ptr %142, align 8, !tbaa !5
  br label %1690

1690:                                             ; preds = %1714, %1685
  %1691 = load ptr, ptr %141, align 8, !tbaa !5
  %1692 = load ptr, ptr %142, align 8, !tbaa !5
  %1693 = icmp ne ptr %1691, %1692
  br i1 %1693, label %1703, label %1694

1694:                                             ; preds = %1690
  store i32 32, ptr %76, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %142) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %141) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %140) #9
  br label %1726

1695:                                             ; preds = %1649, %1645
  %1696 = landingpad { ptr, i32 }
          cleanup
  %1697 = extractvalue { ptr, i32 } %1696, 0
  store ptr %1697, ptr %11, align 8
  %1698 = extractvalue { ptr, i32 } %1696, 1
  store i32 %1698, ptr %12, align 4
  br label %1815

1699:                                             ; preds = %1810, %1809, %1808, %1805, %1791, %1787, %1784, %1769, %1766, %1758, %1757, %1749, %1745, %1744, %1741, %1739, %1736, %1730, %1726, %1663, %1658
  %1700 = landingpad { ptr, i32 }
          cleanup
  %1701 = extractvalue { ptr, i32 } %1700, 0
  store ptr %1701, ptr %11, align 8
  %1702 = extractvalue { ptr, i32 } %1700, 1
  store i32 %1702, ptr %12, align 4
  br label %1814

1703:                                             ; preds = %1690
  call void @llvm.lifetime.start.p0(i64 8, ptr %143) #9
  %1704 = load ptr, ptr %141, align 8, !tbaa !5
  store ptr %1704, ptr %143, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %144) #9
  %1705 = load ptr, ptr %143, align 8, !tbaa !5
  %1706 = load i64, ptr %1705, align 8, !tbaa !56
  %1707 = load ptr, ptr %57, align 8, !tbaa !5
  %1708 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1707, i32 0, i32 3
  %1709 = load i32, ptr %1708, align 4, !tbaa !183
  %1710 = load i8, ptr %58, align 1, !tbaa !9, !range !50, !noundef !51
  %1711 = trunc i8 %1710 to i1
  invoke void @"_ZZN11spirv_cross12CompilerGLSL16emit_block_chainERNS_9SPIRBlockEENK3$_1clB5cxx11Emjb"(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %144, ptr noundef nonnull align 1 dereferenceable(1) %84, i64 noundef %1706, i32 noundef %1709, i1 noundef zeroext %1711)
          to label %1712 unwind label %1717

1712:                                             ; preds = %1703
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA6_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERPS2_RA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 1 dereferenceable(6) @.str.1649, ptr noundef nonnull align 8 dereferenceable(32) %144, ptr noundef nonnull align 8 dereferenceable(8) %59, ptr noundef nonnull align 1 dereferenceable(2) @.str.1650)
          to label %1713 unwind label %1721

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

1714:                                             ; preds = %1713
  %1715 = load ptr, ptr %141, align 8, !tbaa !5
  %1716 = getelementptr inbounds i64, ptr %1715, i32 1
  store ptr %1716, ptr %141, align 8, !tbaa !5
  br label %1690

1717:                                             ; preds = %1703
  %1718 = landingpad { ptr, i32 }
          cleanup
  %1719 = extractvalue { ptr, i32 } %1718, 0
  store ptr %1719, ptr %11, align 8
  %1720 = extractvalue { ptr, i32 } %1718, 1
  store i32 %1720, ptr %12, align 4
  br label %1725

1721:                                             ; preds = %1712
  %1722 = landingpad { ptr, i32 }
          cleanup
  %1723 = extractvalue { ptr, i32 } %1722, 0
  store ptr %1723, ptr %11, align 8
  %1724 = extractvalue { ptr, i32 } %1722, 1
  store i32 %1724, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %144) #9
  br label %1725

1725:                                             ; preds = %1721, %1717
  call void @llvm.lifetime.end.p0(i64 32, ptr %144) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %143) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %142) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %141) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %140) #9
  br label %1814

1726:                                             ; preds = %1694
  %1727 = load ptr, ptr %4, align 8, !tbaa !5
  %1728 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %1727, i32 0, i32 11
  %1729 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1728)
          to label %1730 unwind label %1699

1730:                                             ; preds = %1726
  %1731 = load ptr, ptr %4, align 8, !tbaa !5
  %1732 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %1731, i32 0, i32 4
  %1733 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1732)
          to label %1734 unwind label %1699

1734:                                             ; preds = %1730
  %1735 = icmp eq i32 %1729, %1733
  br i1 %1735, label %1736, label %1744

1736:                                             ; preds = %1734
  %1737 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %193)
          to label %1738 unwind label %1699

1738:                                             ; preds = %1736
  br i1 %1737, label %1739, label %1741

1739:                                             ; preds = %1738
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA5_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 1 dereferenceable(5) @.str.547)
          to label %1740 unwind label %1699

1740:                                             ; preds = %1739
  br label %1743

1741:                                             ; preds = %1738
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA9_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 1 dereferenceable(9) @.str.1647)
          to label %1742 unwind label %1699

1742:                                             ; preds = %1741
  br label %1743

1743:                                             ; preds = %1742, %1740
  br label %1744

1744:                                             ; preds = %1743, %1734
  invoke void @_ZN11spirv_cross12CompilerGLSL11begin_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848) %193)
          to label %1745 unwind label %1699

1745:                                             ; preds = %1744
  %1746 = load ptr, ptr %4, align 8, !tbaa !5
  %1747 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1746, i32 0, i32 1
  %1748 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_6EEEv(ptr noundef nonnull align 4 dereferenceable(4) %1747)
          to label %1749 unwind label %1699

1749:                                             ; preds = %1745
  %1750 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %145, i32 0, i32 0
  store i32 %1748, ptr %1750, align 4
  %1751 = load ptr, ptr %4, align 8, !tbaa !5
  %1752 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %1751, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %146, ptr align 8 %1752, i64 4, i1 false), !tbaa.struct !40
  %1753 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %145, i32 0, i32 0
  %1754 = load i32, ptr %1753, align 4
  %1755 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %146, i32 0, i32 0
  %1756 = load i32, ptr %1755, align 4
  invoke void @_ZN11spirv_cross12CompilerGLSL9flush_phiENS_7TypedIDILNS_5TypesE6EEES3_(ptr noundef nonnull align 8 dereferenceable(9848) %193, i32 %1754, i32 %1756)
          to label %1757 unwind label %1699

1757:                                             ; preds = %1749
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA7_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 1 dereferenceable(7) @.str.1623)
          to label %1758 unwind label %1699

1758:                                             ; preds = %1757
  invoke void @_ZN11spirv_cross12CompilerGLSL9end_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848) %193)
          to label %1759 unwind label %1699

1759:                                             ; preds = %1758
  br label %1760

1760:                                             ; preds = %1759, %1683, %1672
  %1761 = load i8, ptr %120, align 1, !tbaa !9, !range !50, !noundef !51
  %1762 = trunc i8 %1761 to i1
  br i1 %1762, label %1787, label %1763

1763:                                             ; preds = %1760
  %1764 = load i8, ptr %119, align 1, !tbaa !9, !range !50, !noundef !51
  %1765 = trunc i8 %1764 to i1
  br i1 %1765, label %1769, label %1766

1766:                                             ; preds = %1763
  %1767 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %193)
          to label %1768 unwind label %1699

1768:                                             ; preds = %1766
  br i1 %1767, label %1769, label %1784

1769:                                             ; preds = %1768, %1763
  %1770 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL12is_legacy_esEv(ptr noundef nonnull align 8 dereferenceable(9848) %193)
          to label %1771 unwind label %1699

1771:                                             ; preds = %1769
  br i1 %1770, label %1784, label %1772

1772:                                             ; preds = %1771
  call void @llvm.lifetime.start.p0(i64 32, ptr %147) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %148) #9
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %148) #9
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %147, ptr noundef @.str.1651, ptr noundef nonnull align 1 dereferenceable(1) %148)
          to label %1773 unwind label %1775

1773:                                             ; preds = %1772
  invoke void @_ZN11spirv_cross12CompilerGLSL14end_scope_declERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 8 dereferenceable(32) %147)
          to label %1774 unwind label %1779

1774:                                             ; preds = %1773
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %147) #9
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %148) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %148) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %147) #9
  br label %1786

1775:                                             ; preds = %1772
  %1776 = landingpad { ptr, i32 }
          cleanup
  %1777 = extractvalue { ptr, i32 } %1776, 0
  store ptr %1777, ptr %11, align 8
  %1778 = extractvalue { ptr, i32 } %1776, 1
  store i32 %1778, ptr %12, align 4
  br label %1783

1779:                                             ; preds = %1773
  %1780 = landingpad { ptr, i32 }
          cleanup
  %1781 = extractvalue { ptr, i32 } %1780, 0
  store ptr %1781, ptr %11, align 8
  %1782 = extractvalue { ptr, i32 } %1780, 1
  store i32 %1782, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %147) #9
  br label %1783

1783:                                             ; preds = %1779, %1775
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %148) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %148) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %147) #9
  br label %1814

1784:                                             ; preds = %1771, %1768
  invoke void @_ZN11spirv_cross12CompilerGLSL9end_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848) %193)
          to label %1785 unwind label %1699

1785:                                             ; preds = %1784
  br label %1786

1786:                                             ; preds = %1785, %1774
  br label %1800

1787:                                             ; preds = %1760
  %1788 = load ptr, ptr %4, align 8, !tbaa !5
  %1789 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1788, i32 0, i32 1
  %1790 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_6EEEv(ptr noundef nonnull align 4 dereferenceable(4) %1789)
          to label %1791 unwind label %1699

1791:                                             ; preds = %1787
  %1792 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %149, i32 0, i32 0
  store i32 %1790, ptr %1792, align 4
  %1793 = load ptr, ptr %4, align 8, !tbaa !5
  %1794 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %1793, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %150, ptr align 8 %1794, i64 4, i1 false), !tbaa.struct !40
  %1795 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %149, i32 0, i32 0
  %1796 = load i32, ptr %1795, align 4
  %1797 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %150, i32 0, i32 0
  %1798 = load i32, ptr %1797, align 4
  invoke void @_ZN11spirv_cross12CompilerGLSL9flush_phiENS_7TypedIDILNS_5TypesE6EEES3_(ptr noundef nonnull align 8 dereferenceable(9848) %193, i32 %1796, i32 %1798)
          to label %1799 unwind label %1699

1799:                                             ; preds = %1791
  br label %1800

1800:                                             ; preds = %1799, %1786
  %1801 = load ptr, ptr %4, align 8, !tbaa !5
  %1802 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %1801, i32 0, i32 21
  %1803 = load i8, ptr %1802, align 2, !tbaa !178, !range !50, !noundef !51
  %1804 = trunc i8 %1803 to i1
  br i1 %1804, label %1805, label %1812

1805:                                             ; preds = %1800
  %1806 = load ptr, ptr %4, align 8, !tbaa !5
  %1807 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1806, i32 0, i32 1
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA6_KcRNS_7TypedIDILNS_5TypesE0EEERA15_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 1 dereferenceable(6) @.str.1652, ptr noundef nonnull align 4 dereferenceable(4) %1807, ptr noundef nonnull align 1 dereferenceable(15) @.str.1653)
          to label %1808 unwind label %1699

1808:                                             ; preds = %1805
  invoke void @_ZN11spirv_cross12CompilerGLSL11begin_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848) %193)
          to label %1809 unwind label %1699

1809:                                             ; preds = %1808
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA7_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 1 dereferenceable(7) @.str.1623)
          to label %1810 unwind label %1699

1810:                                             ; preds = %1809
  invoke void @_ZN11spirv_cross12CompilerGLSL9end_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848) %193)
          to label %1811 unwind label %1699

1811:                                             ; preds = %1810
  br label %1812

1812:                                             ; preds = %1811, %1800
  %1813 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %193, i32 0, i32 2
  call void @_ZN11spirv_cross11SmallVectorIPNS_9SPIRBlockELm8EE8pop_backEv(ptr noundef nonnull align 8 dereferenceable(88) %1813) #9
  store i32 11, ptr %76, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %139) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %136) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %120) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %119) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %84) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #9
  call void @_ZN11spirv_cross11SmallVectorImLm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(88) %63) #9
  call void @llvm.lifetime.end.p0(i64 88, ptr %63) #9
  call void @_ZN11spirv_cross11SmallVectorIjLm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %62) #9
  call void @llvm.lifetime.end.p0(i64 56, ptr %62) #9
  call void @_ZNSt13unordered_mapIjN11spirv_cross11SmallVectorImLm8EEESt4hashIjESt8equal_toIjESaISt4pairIKjS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %61) #9
  call void @llvm.lifetime.end.p0(i64 56, ptr %61) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %58) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #9
  br label %2178

1814:                                             ; preds = %1783, %1725, %1699
  call void @llvm.lifetime.end.p0(i64 1, ptr %139) #9
  br label %1815

1815:                                             ; preds = %1814, %1695
  call void @llvm.lifetime.end.p0(i64 1, ptr %136) #9
  br label %1816

1816:                                             ; preds = %1815, %1644, %1492, %1465, %1461
  call void @llvm.lifetime.end.p0(i64 1, ptr %120) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %119) #9
  br label %1817

1817:                                             ; preds = %1816, %1426
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %84) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #9
  br label %1818

1818:                                             ; preds = %1817, %1162, %1038, %946
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #9
  call void @_ZN11spirv_cross11SmallVectorImLm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(88) %63) #9
  call void @llvm.lifetime.end.p0(i64 88, ptr %63) #9
  call void @_ZN11spirv_cross11SmallVectorIjLm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %62) #9
  call void @llvm.lifetime.end.p0(i64 56, ptr %62) #9
  call void @_ZNSt13unordered_mapIjN11spirv_cross11SmallVectorImLm8EEESt4hashIjESt8equal_toIjESaISt4pairIKjS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %61) #9
  call void @llvm.lifetime.end.p0(i64 56, ptr %61) #9
  br label %1819

1819:                                             ; preds = %1818, %928
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #9
  br label %1820

1820:                                             ; preds = %1819, %858, %836, %832
  call void @llvm.lifetime.end.p0(i64 1, ptr %58) #9
  br label %1821

1821:                                             ; preds = %1820, %828
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #9
  br label %2507

1822:                                             ; preds = %555
  call void @llvm.lifetime.start.p0(i64 8, ptr %151) #9
  %1823 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %193, i32 0, i32 4
  %1824 = load ptr, ptr %1823, align 8, !tbaa !189
  %1825 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %1824, i32 0, i32 12
  store ptr %1825, ptr %151, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %152) #9
  %1826 = load ptr, ptr %151, align 8, !tbaa !5
  %1827 = call noundef ptr @_ZN11spirv_cross10VectorViewISt8functionIFvvEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %1826) #9
  store ptr %1827, ptr %152, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %153) #9
  %1828 = load ptr, ptr %151, align 8, !tbaa !5
  %1829 = call noundef ptr @_ZN11spirv_cross10VectorViewISt8functionIFvvEEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %1828) #9
  store ptr %1829, ptr %153, align 8, !tbaa !5
  br label %1830

1830:                                             ; preds = %1839, %1822
  %1831 = load ptr, ptr %152, align 8, !tbaa !5
  %1832 = load ptr, ptr %153, align 8, !tbaa !5
  %1833 = icmp ne ptr %1831, %1832
  br i1 %1833, label %1835, label %1834

1834:                                             ; preds = %1830
  store i32 34, ptr %76, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %153) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %152) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %151) #9
  br label %1846

1835:                                             ; preds = %1830
  call void @llvm.lifetime.start.p0(i64 8, ptr %154) #9
  %1836 = load ptr, ptr %152, align 8, !tbaa !5
  store ptr %1836, ptr %154, align 8, !tbaa !5
  %1837 = load ptr, ptr %154, align 8, !tbaa !5
  invoke void @_ZNKSt8functionIFvvEEclEv(ptr noundef nonnull align 8 dereferenceable(32) %1837)
          to label %1838 unwind label %1842

1838:                                             ; preds = %1835
  call void @llvm.lifetime.end.p0(i64 8, ptr %154) #9
  br label %1839

1839:                                             ; preds = %1838
  %1840 = load ptr, ptr %152, align 8, !tbaa !5
  %1841 = getelementptr inbounds %"class.std::function.349", ptr %1840, i32 1
  store ptr %1841, ptr %152, align 8, !tbaa !5
  br label %1830

1842:                                             ; preds = %1835
  %1843 = landingpad { ptr, i32 }
          cleanup
  %1844 = extractvalue { ptr, i32 } %1843, 0
  store ptr %1844, ptr %11, align 8
  %1845 = extractvalue { ptr, i32 } %1843, 1
  store i32 %1845, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %154) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %153) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %152) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %151) #9
  br label %2507

1846:                                             ; preds = %1834
  %1847 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %193, i32 0, i32 19
  %1848 = load i8, ptr %1847, align 8, !tbaa !190, !range !50, !noundef !51
  %1849 = trunc i8 %1848 to i1
  br i1 %1849, label %1850, label %1855

1850:                                             ; preds = %1846
  %1851 = load ptr, ptr %193, align 8, !tbaa !60
  %1852 = getelementptr inbounds ptr, ptr %1851, i64 26
  %1853 = load ptr, ptr %1852, align 8
  invoke void %1853(ptr noundef nonnull align 8 dereferenceable(9848) %193)
          to label %1854 unwind label %582

1854:                                             ; preds = %1850
  br label %1855

1855:                                             ; preds = %1854, %1846
  call void @llvm.lifetime.start.p0(i64 8, ptr %155) #9
  %1856 = invoke noundef nonnull align 8 dereferenceable(356) ptr @_ZNK11spirv_cross8Compiler28get_cfg_for_current_functionEv(ptr noundef nonnull align 8 dereferenceable(3176) %193)
          to label %1857 unwind label %1906

1857:                                             ; preds = %1855
  store ptr %1856, ptr %155, align 8, !tbaa !5
  %1858 = load ptr, ptr %4, align 8, !tbaa !5
  %1859 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %1858, i32 0, i32 7
  %1860 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1859)
          to label %1861 unwind label %1906

1861:                                             ; preds = %1857
  %1862 = icmp ne i32 %1860, 0
  br i1 %1862, label %1863, label %1979

1863:                                             ; preds = %1861
  call void @llvm.lifetime.start.p0(i64 8, ptr %156) #9
  %1864 = load ptr, ptr %4, align 8, !tbaa !5
  %1865 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %1864, i32 0, i32 7
  %1866 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1865)
          to label %1867 unwind label %1910

1867:                                             ; preds = %1863
  %1868 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %193, i32 noundef %1866)
          to label %1869 unwind label %1910

1869:                                             ; preds = %1867
  store ptr %1868, ptr %156, align 8, !tbaa !5
  %1870 = load ptr, ptr %156, align 8, !tbaa !5
  %1871 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1870, i32 0, i32 6
  %1872 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %1871) #9
  br i1 %1872, label %1948, label %1873

1873:                                             ; preds = %1869
  %1874 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %193, i32 0, i32 21
  %1875 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %1874, i32 0, i32 33
  %1876 = load i8, ptr %1875, align 2, !tbaa !191, !range !50, !noundef !51
  %1877 = trunc i8 %1876 to i1
  br i1 %1877, label %1948, label %1878

1878:                                             ; preds = %1873
  %1879 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %193, i32 0, i32 1
  %1880 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %1879, i32 0, i32 2
  %1881 = load ptr, ptr %4, align 8, !tbaa !5
  %1882 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %1881, i32 0, i32 7
  %1883 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1882)
          to label %1884 unwind label %1910

1884:                                             ; preds = %1878
  %1885 = zext i32 %1883 to i64
  %1886 = call noundef nonnull align 8 dereferenceable(21) ptr @_ZN11spirv_cross10VectorViewINS_7VariantEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %1880, i64 noundef %1885) #9
  %1887 = invoke noundef i32 @_ZNK11spirv_cross7Variant8get_typeEv(ptr noundef nonnull align 8 dereferenceable(21) %1886)
          to label %1888 unwind label %1910

1888:                                             ; preds = %1884
  %1889 = icmp ne i32 %1887, 12
  br i1 %1889, label %1890, label %1914

1890:                                             ; preds = %1888
  %1891 = load ptr, ptr %4, align 8, !tbaa !5
  %1892 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %1891, i32 0, i32 7
  %1893 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1892)
          to label %1894 unwind label %1910

1894:                                             ; preds = %1890
  %1895 = load ptr, ptr %4, align 8, !tbaa !5
  %1896 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %1895, i32 0, i32 7
  %1897 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1896)
          to label %1898 unwind label %1910

1898:                                             ; preds = %1894
  %1899 = invoke noundef i32 @_ZN11spirv_cross12CompilerGLSL38get_expression_effective_storage_classEj(ptr noundef nonnull align 8 dereferenceable(9848) %193, i32 noundef %1897)
          to label %1900 unwind label %1910

1900:                                             ; preds = %1898
  %1901 = load ptr, ptr %193, align 8, !tbaa !60
  %1902 = getelementptr inbounds ptr, ptr %1901, i64 55
  %1903 = load ptr, ptr %1902, align 8
  %1904 = invoke noundef zeroext i1 %1903(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef @.str.1654, i32 noundef 0, i32 noundef %1893, i32 noundef 7, i32 noundef %1899)
          to label %1905 unwind label %1910

1905:                                             ; preds = %1900
  br label %1914

1906:                                             ; preds = %2006, %1995, %1987, %1979, %1857, %1855
  %1907 = landingpad { ptr, i32 }
          cleanup
  %1908 = extractvalue { ptr, i32 } %1907, 0
  store ptr %1908, ptr %11, align 8
  %1909 = extractvalue { ptr, i32 } %1907, 1
  store i32 %1909, ptr %12, align 4
  br label %2014

1910:                                             ; preds = %1954, %1948, %1941, %1930, %1922, %1914, %1900, %1898, %1894, %1890, %1884, %1878, %1867, %1863
  %1911 = landingpad { ptr, i32 }
          cleanup
  %1912 = extractvalue { ptr, i32 } %1911, 0
  store ptr %1912, ptr %11, align 8
  %1913 = extractvalue { ptr, i32 } %1911, 1
  store i32 %1913, ptr %12, align 4
  br label %1978

1914:                                             ; preds = %1905, %1888
  %1915 = load ptr, ptr %155, align 8, !tbaa !5
  %1916 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %193, i32 0, i32 4
  %1917 = load ptr, ptr %1916, align 8, !tbaa !189
  %1918 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %1917, i32 0, i32 7
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %157, ptr align 8 %1918, i64 4, i1 false), !tbaa.struct !40
  %1919 = load ptr, ptr %4, align 8, !tbaa !5
  %1920 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1919, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 4, ptr %159) #9
  %1921 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_6EEEv(ptr noundef nonnull align 4 dereferenceable(4) %1920)
          to label %1922 unwind label %1910

1922:                                             ; preds = %1914
  %1923 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %158, i32 0, i32 0
  store i32 %1921, ptr %1923, align 4
  %1924 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %157, i32 0, i32 0
  %1925 = load i32, ptr %1924, align 4
  %1926 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %158, i32 0, i32 0
  %1927 = load i32, ptr %1926, align 4
  %1928 = invoke noundef zeroext i1 @_ZNK11spirv_cross3CFG41node_terminates_control_flow_in_sub_graphENS_7TypedIDILNS_5TypesE6EEES3_(ptr noundef nonnull align 8 dereferenceable(356) %1915, i32 %1925, i32 %1927)
          to label %1929 unwind label %1910

1929:                                             ; preds = %1922
  br i1 %1928, label %1930, label %1939

1930:                                             ; preds = %1929
  %1931 = load ptr, ptr %4, align 8, !tbaa !5
  %1932 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %1931, i32 0, i32 23
  %1933 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1932)
          to label %1934 unwind label %1910

1934:                                             ; preds = %1930
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %159, i32 noundef -1)
          to label %1935 unwind label %1943

1935:                                             ; preds = %1934
  %1936 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %159)
          to label %1937 unwind label %1943

1937:                                             ; preds = %1935
  %1938 = icmp ne i32 %1933, %1936
  br label %1939

1939:                                             ; preds = %1937, %1929
  %1940 = phi i1 [ true, %1929 ], [ %1938, %1937 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr %159) #9
  br i1 %1940, label %1941, label %1947

1941:                                             ; preds = %1939
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA8_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 1 dereferenceable(8) @.str.1655)
          to label %1942 unwind label %1910

1942:                                             ; preds = %1941
  br label %1947

1943:                                             ; preds = %1935, %1934
  %1944 = landingpad { ptr, i32 }
          cleanup
  %1945 = extractvalue { ptr, i32 } %1944, 0
  store ptr %1945, ptr %11, align 8
  %1946 = extractvalue { ptr, i32 } %1944, 1
  store i32 %1946, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %159) #9
  br label %1978

1947:                                             ; preds = %1942, %1939
  br label %1977

1948:                                             ; preds = %1873, %1869
  %1949 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %193, i32 0, i32 1
  %1950 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %1949, i32 0, i32 2
  %1951 = load ptr, ptr %4, align 8, !tbaa !5
  %1952 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %1951, i32 0, i32 7
  %1953 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1952)
          to label %1954 unwind label %1910

1954:                                             ; preds = %1948
  %1955 = zext i32 %1953 to i64
  %1956 = call noundef nonnull align 8 dereferenceable(21) ptr @_ZN11spirv_cross10VectorViewINS_7VariantEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %1950, i64 noundef %1955) #9
  %1957 = invoke noundef i32 @_ZNK11spirv_cross7Variant8get_typeEv(ptr noundef nonnull align 8 dereferenceable(21) %1956)
          to label %1958 unwind label %1910

1958:                                             ; preds = %1954
  %1959 = icmp ne i32 %1957, 12
  br i1 %1959, label %1960, label %1976

1960:                                             ; preds = %1958
  call void @llvm.lifetime.start.p0(i64 32, ptr %160) #9
  %1961 = load ptr, ptr %4, align 8, !tbaa !5
  %1962 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %1961, i32 0, i32 7
  %1963 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1962)
          to label %1964 unwind label %1967

1964:                                             ; preds = %1960
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %160, ptr noundef nonnull align 8 dereferenceable(9848) %193, i32 noundef %1963, i1 noundef zeroext true)
          to label %1965 unwind label %1967

1965:                                             ; preds = %1964
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA8_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 1 dereferenceable(8) @.str.809, ptr noundef nonnull align 8 dereferenceable(32) %160, ptr noundef nonnull align 1 dereferenceable(2) @.str.298)
          to label %1966 unwind label %1971

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

1967:                                             ; preds = %1964, %1960
  %1968 = landingpad { ptr, i32 }
          cleanup
  %1969 = extractvalue { ptr, i32 } %1968, 0
  store ptr %1969, ptr %11, align 8
  %1970 = extractvalue { ptr, i32 } %1968, 1
  store i32 %1970, ptr %12, align 4
  br label %1975

1971:                                             ; preds = %1965
  %1972 = landingpad { ptr, i32 }
          cleanup
  %1973 = extractvalue { ptr, i32 } %1972, 0
  store ptr %1973, ptr %11, align 8
  %1974 = extractvalue { ptr, i32 } %1972, 1
  store i32 %1974, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %160) #9
  br label %1975

1975:                                             ; preds = %1971, %1967
  call void @llvm.lifetime.end.p0(i64 32, ptr %160) #9
  br label %1978

1976:                                             ; preds = %1966, %1958
  br label %1977

1977:                                             ; preds = %1976, %1947
  call void @llvm.lifetime.end.p0(i64 8, ptr %156) #9
  br label %2013

1978:                                             ; preds = %1975, %1943, %1910
  call void @llvm.lifetime.end.p0(i64 8, ptr %156) #9
  br label %2014

1979:                                             ; preds = %1861
  %1980 = load ptr, ptr %155, align 8, !tbaa !5
  %1981 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %193, i32 0, i32 4
  %1982 = load ptr, ptr %1981, align 8, !tbaa !189
  %1983 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %1982, i32 0, i32 7
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %161, ptr align 8 %1983, i64 4, i1 false), !tbaa.struct !40
  %1984 = load ptr, ptr %4, align 8, !tbaa !5
  %1985 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %1984, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 4, ptr %163) #9
  %1986 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_6EEEv(ptr noundef nonnull align 4 dereferenceable(4) %1985)
          to label %1987 unwind label %1906

1987:                                             ; preds = %1979
  %1988 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %162, i32 0, i32 0
  store i32 %1986, ptr %1988, align 4
  %1989 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %161, i32 0, i32 0
  %1990 = load i32, ptr %1989, align 4
  %1991 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %162, i32 0, i32 0
  %1992 = load i32, ptr %1991, align 4
  %1993 = invoke noundef zeroext i1 @_ZNK11spirv_cross3CFG41node_terminates_control_flow_in_sub_graphENS_7TypedIDILNS_5TypesE6EEES3_(ptr noundef nonnull align 8 dereferenceable(356) %1980, i32 %1990, i32 %1992)
          to label %1994 unwind label %1906

1994:                                             ; preds = %1987
  br i1 %1993, label %1995, label %2004

1995:                                             ; preds = %1994
  %1996 = load ptr, ptr %4, align 8, !tbaa !5
  %1997 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %1996, i32 0, i32 23
  %1998 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1997)
          to label %1999 unwind label %1906

1999:                                             ; preds = %1995
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %163, i32 noundef -1)
          to label %2000 unwind label %2008

2000:                                             ; preds = %1999
  %2001 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %163)
          to label %2002 unwind label %2008

2002:                                             ; preds = %2000
  %2003 = icmp ne i32 %1998, %2001
  br label %2004

2004:                                             ; preds = %2002, %1994
  %2005 = phi i1 [ true, %1994 ], [ %2003, %2002 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr %163) #9
  br i1 %2005, label %2006, label %2012

2006:                                             ; preds = %2004
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA8_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 1 dereferenceable(8) @.str.1655)
          to label %2007 unwind label %1906

2007:                                             ; preds = %2006
  br label %2012

2008:                                             ; preds = %2000, %1999
  %2009 = landingpad { ptr, i32 }
          cleanup
  %2010 = extractvalue { ptr, i32 } %2009, 0
  store ptr %2010, ptr %11, align 8
  %2011 = extractvalue { ptr, i32 } %2009, 1
  store i32 %2011, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %163) #9
  br label %2014

2012:                                             ; preds = %2007, %2004
  br label %2013

2013:                                             ; preds = %2012, %1977
  store i32 11, ptr %76, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %155) #9
  br label %2178

2014:                                             ; preds = %2008, %1978, %1906
  call void @llvm.lifetime.end.p0(i64 8, ptr %155) #9
  br label %2507

2015:                                             ; preds = %555
  %2016 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %193, i32 0, i32 21
  %2017 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::BackendVariations", ptr %2016, i32 0, i32 0
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 8 dereferenceable(32) %2017, ptr noundef nonnull align 1 dereferenceable(2) @.str.298)
          to label %2018 unwind label %582

2018:                                             ; preds = %2015
  %2019 = load ptr, ptr %4, align 8, !tbaa !5
  %2020 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2019, i32 0, i32 7
  %2021 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2020)
          to label %2022 unwind label %582

2022:                                             ; preds = %2018
  %2023 = icmp ne i32 %2021, 0
  br i1 %2023, label %2024, label %2040

2024:                                             ; preds = %2022
  call void @llvm.lifetime.start.p0(i64 32, ptr %164) #9
  %2025 = load ptr, ptr %4, align 8, !tbaa !5
  %2026 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2025, i32 0, i32 7
  %2027 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2026)
          to label %2028 unwind label %2031

2028:                                             ; preds = %2024
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %164, ptr noundef nonnull align 8 dereferenceable(9848) %193, i32 noundef %2027, i1 noundef zeroext true)
          to label %2029 unwind label %2031

2029:                                             ; preds = %2028
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA8_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 1 dereferenceable(8) @.str.809, ptr noundef nonnull align 8 dereferenceable(32) %164, ptr noundef nonnull align 1 dereferenceable(2) @.str.298)
          to label %2030 unwind label %2035

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

2031:                                             ; preds = %2028, %2024
  %2032 = landingpad { ptr, i32 }
          cleanup
  %2033 = extractvalue { ptr, i32 } %2032, 0
  store ptr %2033, ptr %11, align 8
  %2034 = extractvalue { ptr, i32 } %2032, 1
  store i32 %2034, ptr %12, align 4
  br label %2039

2035:                                             ; preds = %2029
  %2036 = landingpad { ptr, i32 }
          cleanup
  %2037 = extractvalue { ptr, i32 } %2036, 0
  store ptr %2037, ptr %11, align 8
  %2038 = extractvalue { ptr, i32 } %2036, 1
  store i32 %2038, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %164) #9
  br label %2039

2039:                                             ; preds = %2035, %2031
  call void @llvm.lifetime.end.p0(i64 32, ptr %164) #9
  br label %2507

2040:                                             ; preds = %2030, %2022
  br label %2178

2041:                                             ; preds = %555
  call void @llvm.lifetime.start.p0(i64 8, ptr %165) #9
  %2042 = invoke noundef nonnull align 8 dereferenceable(356) ptr @_ZNK11spirv_cross8Compiler28get_cfg_for_current_functionEv(ptr noundef nonnull align 8 dereferenceable(3176) %193)
          to label %2043 unwind label %2105

2043:                                             ; preds = %2041
  store ptr %2042, ptr %165, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %166) #9
  store i8 0, ptr %166, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %167) #9
  %2044 = load ptr, ptr %4, align 8, !tbaa !5
  %2045 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %2044, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %167, ptr align 8 %2045, i64 4, i1 false), !tbaa.struct !40
  br label %2046

2046:                                             ; preds = %2147, %2043
  %2047 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %167)
          to label %2048 unwind label %2109

2048:                                             ; preds = %2046
  %2049 = icmp ne i32 %2047, 0
  br i1 %2049, label %2050, label %2153

2050:                                             ; preds = %2048
  call void @llvm.lifetime.start.p0(i64 8, ptr %168) #9
  %2051 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %167)
          to label %2052 unwind label %2113

2052:                                             ; preds = %2050
  %2053 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %193, i32 noundef %2051)
          to label %2054 unwind label %2113

2054:                                             ; preds = %2052
  store ptr %2053, ptr %168, align 8, !tbaa !5
  %2055 = load ptr, ptr %168, align 8, !tbaa !5
  %2056 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2055, i32 0, i32 1
  %2057 = load i32, ptr %2056, align 4, !tbaa !63
  %2058 = icmp eq i32 %2057, 3
  br i1 %2058, label %2064, label %2059

2059:                                             ; preds = %2054
  %2060 = load ptr, ptr %168, align 8, !tbaa !5
  %2061 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2060, i32 0, i32 2
  %2062 = load i32, ptr %2061, align 8, !tbaa !11
  %2063 = icmp eq i32 %2062, 1
  br i1 %2063, label %2064, label %2130

2064:                                             ; preds = %2059, %2054
  call void @llvm.lifetime.start.p0(i64 4, ptr %169) #9
  %2065 = load ptr, ptr %168, align 8, !tbaa !5
  %2066 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2065, i32 0, i32 2
  %2067 = load i32, ptr %2066, align 8, !tbaa !11
  %2068 = icmp eq i32 %2067, 1
  br i1 %2068, label %2069, label %2072

2069:                                             ; preds = %2064
  %2070 = load ptr, ptr %168, align 8, !tbaa !5
  %2071 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2070, i32 0, i32 5
  br label %2075

2072:                                             ; preds = %2064
  %2073 = load ptr, ptr %168, align 8, !tbaa !5
  %2074 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2073, i32 0, i32 4
  br label %2075

2075:                                             ; preds = %2072, %2069
  %2076 = phi ptr [ %2071, %2069 ], [ %2074, %2072 ]
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2ILS1_6EEERKNS0_IXT_EEE(ptr noundef nonnull align 4 dereferenceable(4) %169, ptr noundef nonnull align 4 dereferenceable(4) %2076)
          to label %2077 unwind label %2117

2077:                                             ; preds = %2075
  call void @llvm.lifetime.start.p0(i64 1, ptr %170) #9
  %2078 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %169)
          to label %2079 unwind label %2121

2079:                                             ; preds = %2077
  %2080 = icmp ne i32 %2078, 0
  br i1 %2080, label %2081, label %2094

2081:                                             ; preds = %2079
  %2082 = load ptr, ptr %165, align 8, !tbaa !5
  %2083 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %169)
          to label %2084 unwind label %2121

2084:                                             ; preds = %2081
  %2085 = load ptr, ptr %4, align 8, !tbaa !5
  %2086 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %2085, i32 0, i32 1
  %2087 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2086)
          to label %2088 unwind label %2121

2088:                                             ; preds = %2084
  %2089 = invoke noundef i32 @_ZNK11spirv_cross3CFG21find_common_dominatorEjj(ptr noundef nonnull align 8 dereferenceable(356) %2082, i32 noundef %2083, i32 noundef %2087)
          to label %2090 unwind label %2121

2090:                                             ; preds = %2088
  %2091 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %169)
          to label %2092 unwind label %2121

2092:                                             ; preds = %2090
  %2093 = icmp eq i32 %2089, %2091
  br label %2094

2094:                                             ; preds = %2092, %2079
  %2095 = phi i1 [ false, %2079 ], [ %2093, %2092 ]
  %2096 = zext i1 %2095 to i8
  store i8 %2096, ptr %170, align 1, !tbaa !9
  %2097 = load i8, ptr %170, align 1, !tbaa !9, !range !50, !noundef !51
  %2098 = trunc i8 %2097 to i1
  br i1 %2098, label %2125, label %2099

2099:                                             ; preds = %2094
  %2100 = load ptr, ptr %168, align 8, !tbaa !5
  %2101 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2100, i32 0, i32 1
  %2102 = load i32, ptr %2101, align 4, !tbaa !63
  %2103 = icmp eq i32 %2102, 3
  %2104 = zext i1 %2103 to i8
  store i8 %2104, ptr %166, align 1, !tbaa !9
  store i32 37, ptr %76, align 4
  br label %2126

2105:                                             ; preds = %2041
  %2106 = landingpad { ptr, i32 }
          cleanup
  %2107 = extractvalue { ptr, i32 } %2106, 0
  store ptr %2107, ptr %11, align 8
  %2108 = extractvalue { ptr, i32 } %2106, 1
  store i32 %2108, ptr %12, align 4
  br label %2160

2109:                                             ; preds = %2156, %2046
  %2110 = landingpad { ptr, i32 }
          cleanup
  %2111 = extractvalue { ptr, i32 } %2110, 0
  store ptr %2111, ptr %11, align 8
  %2112 = extractvalue { ptr, i32 } %2110, 1
  store i32 %2112, ptr %12, align 4
  br label %2159

2113:                                             ; preds = %2133, %2130, %2052, %2050
  %2114 = landingpad { ptr, i32 }
          cleanup
  %2115 = extractvalue { ptr, i32 } %2114, 0
  store ptr %2115, ptr %11, align 8
  %2116 = extractvalue { ptr, i32 } %2114, 1
  store i32 %2116, ptr %12, align 4
  br label %2152

2117:                                             ; preds = %2075
  %2118 = landingpad { ptr, i32 }
          cleanup
  %2119 = extractvalue { ptr, i32 } %2118, 0
  store ptr %2119, ptr %11, align 8
  %2120 = extractvalue { ptr, i32 } %2118, 1
  store i32 %2120, ptr %12, align 4
  br label %2129

2121:                                             ; preds = %2090, %2088, %2084, %2081, %2077
  %2122 = landingpad { ptr, i32 }
          cleanup
  %2123 = extractvalue { ptr, i32 } %2122, 0
  store ptr %2123, ptr %11, align 8
  %2124 = extractvalue { ptr, i32 } %2122, 1
  store i32 %2124, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %170) #9
  br label %2129

2125:                                             ; preds = %2094
  store i32 0, ptr %76, align 4
  br label %2126

2126:                                             ; preds = %2125, %2099
  call void @llvm.lifetime.end.p0(i64 1, ptr %170) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %169) #9
  %2127 = load i32, ptr %76, align 4
  switch i32 %2127, label %2145 [
    i32 0, label %2128
  ]

2128:                                             ; preds = %2126
  br label %2130

2129:                                             ; preds = %2121, %2117
  call void @llvm.lifetime.end.p0(i64 4, ptr %169) #9
  br label %2152

2130:                                             ; preds = %2128, %2059
  %2131 = load ptr, ptr %165, align 8, !tbaa !5
  %2132 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %167)
          to label %2133 unwind label %2113

2133:                                             ; preds = %2130
  %2134 = invoke noundef nonnull align 8 dereferenceable(56) ptr @_ZNK11spirv_cross3CFG19get_preceding_edgesEj(ptr noundef nonnull align 8 dereferenceable(356) %2131, i32 noundef %2132)
          to label %2135 unwind label %2113

2135:                                             ; preds = %2133
  %2136 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %2134) #9
  br i1 %2136, label %2137, label %2138

2137:                                             ; preds = %2135
  store i32 37, ptr %76, align 4
  br label %2145

2138:                                             ; preds = %2135
  call void @llvm.lifetime.start.p0(i64 4, ptr %171) #9
  %2139 = load ptr, ptr %165, align 8, !tbaa !5
  %2140 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %167)
          to label %2141 unwind label %2148

2141:                                             ; preds = %2138
  %2142 = invoke noundef i32 @_ZNK11spirv_cross3CFG23get_immediate_dominatorEj(ptr noundef nonnull align 8 dereferenceable(356) %2139, i32 noundef %2140)
          to label %2143 unwind label %2148

2143:                                             ; preds = %2141
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %171, i32 noundef %2142)
          to label %2144 unwind label %2148

2144:                                             ; preds = %2143
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %167, ptr align 4 %171, i64 4, i1 false), !tbaa.struct !40
  call void @llvm.lifetime.end.p0(i64 4, ptr %171) #9
  store i32 0, ptr %76, align 4
  br label %2145

2145:                                             ; preds = %2144, %2137, %2126
  call void @llvm.lifetime.end.p0(i64 8, ptr %168) #9
  %2146 = load i32, ptr %76, align 4
  switch i32 %2146, label %2516 [
    i32 0, label %2147
    i32 37, label %2153
  ]

2147:                                             ; preds = %2145
  br label %2046, !llvm.loop !192

2148:                                             ; preds = %2143, %2141, %2138
  %2149 = landingpad { ptr, i32 }
          cleanup
  %2150 = extractvalue { ptr, i32 } %2149, 0
  store ptr %2150, ptr %11, align 8
  %2151 = extractvalue { ptr, i32 } %2149, 1
  store i32 %2151, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %171) #9
  br label %2152

2152:                                             ; preds = %2148, %2129, %2113
  call void @llvm.lifetime.end.p0(i64 8, ptr %168) #9
  br label %2159

2153:                                             ; preds = %2145, %2048
  %2154 = load i8, ptr %166, align 1, !tbaa !9, !range !50, !noundef !51
  %2155 = trunc i8 %2154 to i1
  br i1 %2155, label %2156, label %2158

2156:                                             ; preds = %2153
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA33_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 1 dereferenceable(33) @.str.1656)
          to label %2157 unwind label %2109

2157:                                             ; preds = %2156
  br label %2158

2158:                                             ; preds = %2157, %2153
  store i8 0, ptr %37, align 1, !tbaa !9
  store i32 11, ptr %76, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %167) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %166) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %165) #9
  br label %2178

2159:                                             ; preds = %2152, %2109
  call void @llvm.lifetime.end.p0(i64 4, ptr %167) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %166) #9
  br label %2160

2160:                                             ; preds = %2159, %2105
  call void @llvm.lifetime.end.p0(i64 8, ptr %165) #9
  br label %2507

2161:                                             ; preds = %555
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA23_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 1 dereferenceable(23) @.str.1657)
          to label %2162 unwind label %582

2162:                                             ; preds = %2161
  br label %2178

2163:                                             ; preds = %555
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA17_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 1 dereferenceable(17) @.str.1658)
          to label %2164 unwind label %582

2164:                                             ; preds = %2163
  br label %2178

2165:                                             ; preds = %555
  %2166 = load ptr, ptr %4, align 8, !tbaa !5
  %2167 = load ptr, ptr %193, align 8, !tbaa !60
  %2168 = getelementptr inbounds ptr, ptr %2167, i64 44
  %2169 = load ptr, ptr %2168, align 8
  invoke void %2169(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 8 dereferenceable(976) %2166)
          to label %2170 unwind label %582

2170:                                             ; preds = %2165
  br label %2178

2171:                                             ; preds = %555
  %2172 = call ptr @__cxa_allocate_exception(i64 16) #9
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %2172, ptr noundef @.str.1659)
          to label %2173 unwind label %2174

2173:                                             ; preds = %2171
  invoke void @__cxa_throw(ptr %2172, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #11
          to label %2516 unwind label %582

2174:                                             ; preds = %2171
  %2175 = landingpad { ptr, i32 }
          cleanup
  %2176 = extractvalue { ptr, i32 } %2175, 0
  store ptr %2176, ptr %11, align 8
  %2177 = extractvalue { ptr, i32 } %2175, 1
  store i32 %2177, ptr %12, align 4
  call void @__cxa_free_exception(ptr %2172) #9
  br label %2507

2178:                                             ; preds = %2170, %2164, %2162, %2158, %2040, %2013, %1812, %791, %626
  %2179 = load ptr, ptr %4, align 8, !tbaa !5
  %2180 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2179, i32 0, i32 4
  %2181 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2180)
          to label %2182 unwind label %582

2182:                                             ; preds = %2178
  %2183 = icmp ne i32 %2181, 0
  br i1 %2183, label %2184, label %2291

2184:                                             ; preds = %2182
  %2185 = load i8, ptr %37, align 1, !tbaa !9, !range !50, !noundef !51
  %2186 = trunc i8 %2185 to i1
  br i1 %2186, label %2187, label %2291

2187:                                             ; preds = %2184
  %2188 = load ptr, ptr %4, align 8, !tbaa !5
  %2189 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2188, i32 0, i32 2
  %2190 = load i32, ptr %2189, align 8, !tbaa !11
  %2191 = icmp ne i32 %2190, 2
  br i1 %2191, label %2192, label %2215

2192:                                             ; preds = %2187
  %2193 = load ptr, ptr %4, align 8, !tbaa !5
  %2194 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %2193, i32 0, i32 1
  %2195 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_6EEEv(ptr noundef nonnull align 4 dereferenceable(4) %2194)
          to label %2196 unwind label %582

2196:                                             ; preds = %2192
  %2197 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %172, i32 0, i32 0
  store i32 %2195, ptr %2197, align 4
  %2198 = load ptr, ptr %4, align 8, !tbaa !5
  %2199 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2198, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %173, ptr align 8 %2199, i64 4, i1 false), !tbaa.struct !40
  %2200 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %172, i32 0, i32 0
  %2201 = load i32, ptr %2200, align 4
  %2202 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %173, i32 0, i32 0
  %2203 = load i32, ptr %2202, align 4
  invoke void @_ZN11spirv_cross12CompilerGLSL9flush_phiENS_7TypedIDILNS_5TypesE6EEES3_(ptr noundef nonnull align 8 dereferenceable(9848) %193, i32 %2201, i32 %2203)
          to label %2204 unwind label %582

2204:                                             ; preds = %2196
  %2205 = load ptr, ptr %4, align 8, !tbaa !5
  %2206 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2205, i32 0, i32 26
  %2207 = load ptr, ptr %4, align 8, !tbaa !5
  %2208 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2207, i32 0, i32 4
  %2209 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2208)
          to label %2210 unwind label %582

2210:                                             ; preds = %2204
  %2211 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %193, i32 noundef %2209)
          to label %2212 unwind label %582

2212:                                             ; preds = %2210
  %2213 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2211, i32 0, i32 26
  %2214 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(56) %2213, ptr noundef nonnull align 8 dereferenceable(56) %2206) #9
  br label %2215

2215:                                             ; preds = %2212, %2187
  %2216 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %193, i32 0, i32 3
  %2217 = load i8, ptr %2216, align 8, !tbaa !187, !range !50, !noundef !51
  %2218 = trunc i8 %2217 to i1
  br i1 %2218, label %2290, label %2219

2219:                                             ; preds = %2215
  %2220 = load ptr, ptr %4, align 8, !tbaa !5
  %2221 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2220, i32 0, i32 4
  %2222 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2221)
          to label %2223 unwind label %582

2223:                                             ; preds = %2219
  %2224 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler13is_loop_breakEj(ptr noundef nonnull align 8 dereferenceable(3176) %193, i32 noundef %2222)
          to label %2225 unwind label %582

2225:                                             ; preds = %2223
  br i1 %2224, label %2226, label %2236

2226:                                             ; preds = %2225
  %2227 = load ptr, ptr %4, align 8, !tbaa !5
  %2228 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2227, i32 0, i32 2
  %2229 = load i32, ptr %2228, align 8, !tbaa !11
  %2230 = icmp eq i32 %2229, 2
  br i1 %2230, label %2231, label %2232

2231:                                             ; preds = %2226
  br label %2234

2232:                                             ; preds = %2226
  call void @__assert_fail(ptr noundef @.str.1660, ptr noundef @.str.11, i32 noundef 17945, ptr noundef @__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL16emit_block_chainERNS_9SPIRBlockE) #10
  unreachable

2233:                                             ; No predecessors!
  br label %2234

2234:                                             ; preds = %2233, %2231
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA7_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 1 dereferenceable(7) @.str.1623)
          to label %2235 unwind label %582

2235:                                             ; preds = %2234
  br label %2289

2236:                                             ; preds = %2225
  %2237 = load ptr, ptr %4, align 8, !tbaa !5
  %2238 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2237, i32 0, i32 4
  %2239 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2238)
          to label %2240 unwind label %582

2240:                                             ; preds = %2236
  %2241 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler11is_continueEj(ptr noundef nonnull align 8 dereferenceable(3176) %193, i32 noundef %2239)
          to label %2242 unwind label %582

2242:                                             ; preds = %2240
  br i1 %2241, label %2243, label %2264

2243:                                             ; preds = %2242
  %2244 = load ptr, ptr %4, align 8, !tbaa !5
  %2245 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2244, i32 0, i32 2
  %2246 = load i32, ptr %2245, align 8, !tbaa !11
  %2247 = icmp eq i32 %2246, 2
  br i1 %2247, label %2248, label %2249

2248:                                             ; preds = %2243
  br label %2251

2249:                                             ; preds = %2243
  call void @__assert_fail(ptr noundef @.str.1660, ptr noundef @.str.11, i32 noundef 17950, ptr noundef @__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL16emit_block_chainERNS_9SPIRBlockE) #10
  unreachable

2250:                                             ; No predecessors!
  br label %2251

2251:                                             ; preds = %2250, %2248
  %2252 = load ptr, ptr %4, align 8, !tbaa !5
  %2253 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %2252, i32 0, i32 1
  %2254 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_6EEEv(ptr noundef nonnull align 4 dereferenceable(4) %2253)
          to label %2255 unwind label %582

2255:                                             ; preds = %2251
  %2256 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %174, i32 0, i32 0
  store i32 %2254, ptr %2256, align 4
  %2257 = load ptr, ptr %4, align 8, !tbaa !5
  %2258 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2257, i32 0, i32 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %175, ptr align 8 %2258, i64 4, i1 false), !tbaa.struct !40
  %2259 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %174, i32 0, i32 0
  %2260 = load i32, ptr %2259, align 4
  %2261 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %175, i32 0, i32 0
  %2262 = load i32, ptr %2261, align 4
  invoke void @_ZN11spirv_cross12CompilerGLSL18branch_to_continueENS_7TypedIDILNS_5TypesE6EEES3_(ptr noundef nonnull align 8 dereferenceable(9848) %193, i32 %2260, i32 %2262)
          to label %2263 unwind label %582

2263:                                             ; preds = %2255
  br label %2288

2264:                                             ; preds = %2242
  call void @llvm.lifetime.start.p0(i64 4, ptr %176) #9
  %2265 = load ptr, ptr %4, align 8, !tbaa !5
  %2266 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %2265, i32 0, i32 1
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2ERKNS0_ILS1_0EEE(ptr noundef nonnull align 4 dereferenceable(4) %176, ptr noundef nonnull align 4 dereferenceable(4) %2266)
          to label %2267 unwind label %2283

2267:                                             ; preds = %2264
  %2268 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %176)
          to label %2269 unwind label %2283

2269:                                             ; preds = %2267
  %2270 = load ptr, ptr %4, align 8, !tbaa !5
  %2271 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2270, i32 0, i32 4
  %2272 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2271)
          to label %2273 unwind label %2283

2273:                                             ; preds = %2269
  %2274 = icmp ne i32 %2268, %2272
  call void @llvm.lifetime.end.p0(i64 4, ptr %176) #9
  br i1 %2274, label %2275, label %2287

2275:                                             ; preds = %2273
  %2276 = load ptr, ptr %4, align 8, !tbaa !5
  %2277 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2276, i32 0, i32 4
  %2278 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2277)
          to label %2279 unwind label %582

2279:                                             ; preds = %2275
  %2280 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %193, i32 noundef %2278)
          to label %2281 unwind label %582

2281:                                             ; preds = %2279
  invoke void @_ZN11spirv_cross12CompilerGLSL16emit_block_chainERNS_9SPIRBlockE(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 8 dereferenceable(976) %2280)
          to label %2282 unwind label %582

2282:                                             ; preds = %2281
  br label %2287

2283:                                             ; preds = %2269, %2267, %2264
  %2284 = landingpad { ptr, i32 }
          cleanup
  %2285 = extractvalue { ptr, i32 } %2284, 0
  store ptr %2285, ptr %11, align 8
  %2286 = extractvalue { ptr, i32 } %2284, 1
  store i32 %2286, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %176) #9
  br label %2507

2287:                                             ; preds = %2282, %2273
  br label %2288

2288:                                             ; preds = %2287, %2263
  br label %2289

2289:                                             ; preds = %2288, %2235
  br label %2290

2290:                                             ; preds = %2289, %2215
  br label %2291

2291:                                             ; preds = %2290, %2184, %2182
  %2292 = load ptr, ptr %4, align 8, !tbaa !5
  %2293 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2292, i32 0, i32 2
  %2294 = load i32, ptr %2293, align 8, !tbaa !11
  %2295 = icmp eq i32 %2294, 1
  br i1 %2295, label %2296, label %2437

2296:                                             ; preds = %2291
  %2297 = load i32, ptr %23, align 4, !tbaa !52
  %2298 = icmp eq i32 %2297, 3
  br i1 %2298, label %2299, label %2405

2299:                                             ; preds = %2296
  call void @llvm.lifetime.start.p0(i64 8, ptr %177) #9
  %2300 = load ptr, ptr %4, align 8, !tbaa !5
  %2301 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2300, i32 0, i32 6
  %2302 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2301)
          to label %2303 unwind label %2346

2303:                                             ; preds = %2299
  %2304 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %193, i32 noundef %2302)
          to label %2305 unwind label %2346

2305:                                             ; preds = %2303
  store ptr %2304, ptr %177, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %178) #9
  %2306 = load ptr, ptr %177, align 8, !tbaa !5
  %2307 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2306, i32 0, i32 9
  %2308 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2307)
          to label %2309 unwind label %2350

2309:                                             ; preds = %2305
  %2310 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %193, i32 noundef %2308)
          to label %2311 unwind label %2350

2311:                                             ; preds = %2309
  %2312 = load ptr, ptr %177, align 8, !tbaa !5
  %2313 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2312, i32 0, i32 23
  %2314 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2313)
          to label %2315 unwind label %2350

2315:                                             ; preds = %2311
  %2316 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %193, i32 noundef %2314)
          to label %2317 unwind label %2350

2317:                                             ; preds = %2315
  %2318 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler17execution_is_noopERKNS_9SPIRBlockES3_(ptr noundef nonnull align 8 dereferenceable(3176) %193, ptr noundef nonnull align 8 dereferenceable(976) %2310, ptr noundef nonnull align 8 dereferenceable(976) %2316)
          to label %2319 unwind label %2350

2319:                                             ; preds = %2317
  %2320 = zext i1 %2318 to i8
  store i8 %2320, ptr %178, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %179) #9
  %2321 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %193, i32 0, i32 33
  %2322 = load i32, ptr %2321, align 8, !tbaa !186
  store i32 %2322, ptr %179, align 4, !tbaa !41
  call void @llvm.lifetime.start.p0(i64 32, ptr %180) #9
  %2323 = load ptr, ptr %4, align 8, !tbaa !5
  %2324 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2323, i32 0, i32 6
  %2325 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2324)
          to label %2326 unwind label %2354

2326:                                             ; preds = %2319
  %2327 = load i8, ptr %178, align 1, !tbaa !9, !range !50, !noundef !51
  %2328 = trunc i8 %2327 to i1
  %2329 = load i8, ptr %178, align 1, !tbaa !9, !range !50, !noundef !51
  %2330 = trunc i8 %2329 to i1
  %2331 = xor i1 %2330, true
  invoke void @_ZN11spirv_cross12CompilerGLSL19emit_continue_blockB5cxx11Ejbb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %180, ptr noundef nonnull align 8 dereferenceable(9848) %193, i32 noundef %2325, i1 noundef zeroext %2328, i1 noundef zeroext %2331)
          to label %2332 unwind label %2354

2332:                                             ; preds = %2326
  %2333 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %193, i32 0, i32 33
  %2334 = load i32, ptr %2333, align 8, !tbaa !186
  %2335 = load i32, ptr %179, align 4, !tbaa !41
  %2336 = icmp ne i32 %2334, %2335
  br i1 %2336, label %2337, label %2362

2337:                                             ; preds = %2332
  %2338 = load ptr, ptr %4, align 8, !tbaa !5
  %2339 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2338, i32 0, i32 6
  %2340 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2339)
          to label %2341 unwind label %2358

2341:                                             ; preds = %2337
  %2342 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %193, i32 noundef %2340)
          to label %2343 unwind label %2358

2343:                                             ; preds = %2341
  %2344 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2342, i32 0, i32 20
  store i8 1, ptr %2344, align 1, !tbaa !54
  invoke void @_ZN11spirv_cross8Compiler15force_recompileEv(ptr noundef nonnull align 8 dereferenceable(3176) %193)
          to label %2345 unwind label %2358

2345:                                             ; preds = %2343
  br label %2362

2346:                                             ; preds = %2303, %2299
  %2347 = landingpad { ptr, i32 }
          cleanup
  %2348 = extractvalue { ptr, i32 } %2347, 0
  store ptr %2348, ptr %11, align 8
  %2349 = extractvalue { ptr, i32 } %2347, 1
  store i32 %2349, ptr %12, align 4
  br label %2404

2350:                                             ; preds = %2317, %2315, %2311, %2309, %2305
  %2351 = landingpad { ptr, i32 }
          cleanup
  %2352 = extractvalue { ptr, i32 } %2351, 0
  store ptr %2352, ptr %11, align 8
  %2353 = extractvalue { ptr, i32 } %2351, 1
  store i32 %2353, ptr %12, align 4
  br label %2403

2354:                                             ; preds = %2326, %2319
  %2355 = landingpad { ptr, i32 }
          cleanup
  %2356 = extractvalue { ptr, i32 } %2355, 0
  store ptr %2356, ptr %11, align 8
  %2357 = extractvalue { ptr, i32 } %2355, 1
  store i32 %2357, ptr %12, align 4
  br label %2402

2358:                                             ; preds = %2343, %2341, %2337
  %2359 = landingpad { ptr, i32 }
          cleanup
  %2360 = extractvalue { ptr, i32 } %2359, 0
  store ptr %2360, ptr %11, align 8
  %2361 = extractvalue { ptr, i32 } %2359, 1
  store i32 %2361, ptr %12, align 4
  br label %2401

2362:                                             ; preds = %2345, %2332
  call void @llvm.lifetime.start.p0(i64 32, ptr %181) #9
  %2363 = load ptr, ptr %177, align 8, !tbaa !5
  %2364 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2363, i32 0, i32 8
  %2365 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2364)
          to label %2366 unwind label %2374

2366:                                             ; preds = %2362
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %181, ptr noundef nonnull align 8 dereferenceable(9848) %193, i32 noundef %2365, i1 noundef zeroext true)
          to label %2367 unwind label %2374

2367:                                             ; preds = %2366
  %2368 = load i8, ptr %178, align 1, !tbaa !9, !range !50, !noundef !51
  %2369 = trunc i8 %2368 to i1
  br i1 %2369, label %2387, label %2370

2370:                                             ; preds = %2367
  call void @llvm.lifetime.start.p0(i64 32, ptr %182) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %183) #9
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %183, ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 8 dereferenceable(32) %181)
          to label %2371 unwind label %2378

2371:                                             ; preds = %2370
  invoke void @_ZN11spirv_cross4joinIJRA2_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %182, ptr noundef nonnull align 1 dereferenceable(2) @.str.968, ptr noundef nonnull align 8 dereferenceable(32) %183)
          to label %2372 unwind label %2382

2372:                                             ; preds = %2371
  %2373 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %181, ptr noundef nonnull align 8 dereferenceable(32) %182) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %182) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %183) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %183) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %182) #9
  br label %2387

2374:                                             ; preds = %2366, %2362
  %2375 = landingpad { ptr, i32 }
          cleanup
  %2376 = extractvalue { ptr, i32 } %2375, 0
  store ptr %2376, ptr %11, align 8
  %2377 = extractvalue { ptr, i32 } %2375, 1
  store i32 %2377, ptr %12, align 4
  br label %2400

2378:                                             ; preds = %2370
  %2379 = landingpad { ptr, i32 }
          cleanup
  %2380 = extractvalue { ptr, i32 } %2379, 0
  store ptr %2380, ptr %11, align 8
  %2381 = extractvalue { ptr, i32 } %2379, 1
  store i32 %2381, ptr %12, align 4
  br label %2386

2382:                                             ; preds = %2371
  %2383 = landingpad { ptr, i32 }
          cleanup
  %2384 = extractvalue { ptr, i32 } %2383, 0
  store ptr %2384, ptr %11, align 8
  %2385 = extractvalue { ptr, i32 } %2383, 1
  store i32 %2385, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %183) #9
  br label %2386

2386:                                             ; preds = %2382, %2378
  call void @llvm.lifetime.end.p0(i64 32, ptr %183) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %182) #9
  br label %2399

2387:                                             ; preds = %2372, %2367
  call void @llvm.lifetime.start.p0(i64 32, ptr %184) #9
  invoke void @_ZN11spirv_cross4joinIJRA8_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %184, ptr noundef nonnull align 1 dereferenceable(8) @.str.1631, ptr noundef nonnull align 8 dereferenceable(32) %181, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %2388 unwind label %2390

2388:                                             ; preds = %2387
  invoke void @_ZN11spirv_cross12CompilerGLSL14end_scope_declERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 8 dereferenceable(32) %184)
          to label %2389 unwind label %2394

2389:                                             ; preds = %2388
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %184) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %184) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %181) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %181) #9
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %180) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %180) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %179) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %178) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %177) #9
  br label %2407

2390:                                             ; preds = %2387
  %2391 = landingpad { ptr, i32 }
          cleanup
  %2392 = extractvalue { ptr, i32 } %2391, 0
  store ptr %2392, ptr %11, align 8
  %2393 = extractvalue { ptr, i32 } %2391, 1
  store i32 %2393, ptr %12, align 4
  br label %2398

2394:                                             ; preds = %2388
  %2395 = landingpad { ptr, i32 }
          cleanup
  %2396 = extractvalue { ptr, i32 } %2395, 0
  store ptr %2396, ptr %11, align 8
  %2397 = extractvalue { ptr, i32 } %2395, 1
  store i32 %2397, ptr %12, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %184) #9
  br label %2398

2398:                                             ; preds = %2394, %2390
  call void @llvm.lifetime.end.p0(i64 32, ptr %184) #9
  br label %2399

2399:                                             ; preds = %2398, %2386
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %181) #9
  br label %2400

2400:                                             ; preds = %2399, %2374
  call void @llvm.lifetime.end.p0(i64 32, ptr %181) #9
  br label %2401

2401:                                             ; preds = %2400, %2358
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %180) #9
  br label %2402

2402:                                             ; preds = %2401, %2354
  call void @llvm.lifetime.end.p0(i64 32, ptr %180) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %179) #9
  br label %2403

2403:                                             ; preds = %2402, %2350
  call void @llvm.lifetime.end.p0(i64 1, ptr %178) #9
  br label %2404

2404:                                             ; preds = %2403, %2346
  call void @llvm.lifetime.end.p0(i64 8, ptr %177) #9
  br label %2507

2405:                                             ; preds = %2296
  invoke void @_ZN11spirv_cross12CompilerGLSL9end_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848) %193)
          to label %2406 unwind label %582

2406:                                             ; preds = %2405
  br label %2407

2407:                                             ; preds = %2406, %2389
  invoke void @_ZN11spirv_cross10ValueSaverIjE7releaseEv(ptr noundef nonnull align 8 dereferenceable(12) %10)
          to label %2408 unwind label %582

2408:                                             ; preds = %2407
  %2409 = load ptr, ptr %4, align 8, !tbaa !5
  %2410 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2409, i32 0, i32 5
  %2411 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2410)
          to label %2412 unwind label %582

2412:                                             ; preds = %2408
  %2413 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler11is_continueEj(ptr noundef nonnull align 8 dereferenceable(3176) %193, i32 noundef %2411)
          to label %2414 unwind label %582

2414:                                             ; preds = %2412
  br i1 %2413, label %2415, label %2428

2415:                                             ; preds = %2414
  %2416 = load ptr, ptr %4, align 8, !tbaa !5
  %2417 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %2416, i32 0, i32 1
  %2418 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_6EEEv(ptr noundef nonnull align 4 dereferenceable(4) %2417)
          to label %2419 unwind label %582

2419:                                             ; preds = %2415
  %2420 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %185, i32 0, i32 0
  store i32 %2418, ptr %2420, align 4
  %2421 = load ptr, ptr %4, align 8, !tbaa !5
  %2422 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2421, i32 0, i32 5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %186, ptr align 4 %2422, i64 4, i1 false), !tbaa.struct !40
  %2423 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %185, i32 0, i32 0
  %2424 = load i32, ptr %2423, align 4
  %2425 = getelementptr inbounds %"class.spirv_cross::TypedID.283", ptr %186, i32 0, i32 0
  %2426 = load i32, ptr %2425, align 4
  invoke void @_ZN11spirv_cross12CompilerGLSL18branch_to_continueENS_7TypedIDILNS_5TypesE6EEES3_(ptr noundef nonnull align 8 dereferenceable(9848) %193, i32 %2424, i32 %2426)
          to label %2427 unwind label %582

2427:                                             ; preds = %2419
  br label %2436

2428:                                             ; preds = %2414
  %2429 = load ptr, ptr %4, align 8, !tbaa !5
  %2430 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2429, i32 0, i32 5
  %2431 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2430)
          to label %2432 unwind label %582

2432:                                             ; preds = %2428
  %2433 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %193, i32 noundef %2431)
          to label %2434 unwind label %582

2434:                                             ; preds = %2432
  invoke void @_ZN11spirv_cross12CompilerGLSL16emit_block_chainERNS_9SPIRBlockE(ptr noundef nonnull align 8 dereferenceable(9848) %193, ptr noundef nonnull align 8 dereferenceable(976) %2433)
          to label %2435 unwind label %582

2435:                                             ; preds = %2434
  br label %2436

2436:                                             ; preds = %2435, %2427
  br label %2437

2437:                                             ; preds = %2436, %2291
  %2438 = load ptr, ptr %4, align 8, !tbaa !5
  %2439 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2438, i32 0, i32 26
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EE5clearEv(ptr noundef nonnull align 8 dereferenceable(56) %2439) #9
  %2440 = call noundef i64 @_ZNK11spirv_cross10VectorViewIbE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %29) #9
  %2441 = load ptr, ptr %4, align 8, !tbaa !5
  %2442 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2441, i32 0, i32 24
  %2443 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %2442) #9
  %2444 = icmp eq i64 %2440, %2443
  br i1 %2444, label %2445, label %2446

2445:                                             ; preds = %2437
  br label %2448

2446:                                             ; preds = %2437
  call void @__assert_fail(ptr noundef @.str.1661, ptr noundef @.str.11, i32 noundef 18004, ptr noundef @__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL16emit_block_chainERNS_9SPIRBlockE) #10
  unreachable

2447:                                             ; No predecessors!
  br label %2448

2448:                                             ; preds = %2447, %2445
  call void @llvm.lifetime.start.p0(i64 8, ptr %187) #9
  store i64 0, ptr %187, align 8, !tbaa !56
  br label %2449

2449:                                             ; preds = %2472, %2448
  %2450 = load i64, ptr %187, align 8, !tbaa !56
  %2451 = load ptr, ptr %4, align 8, !tbaa !5
  %2452 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2451, i32 0, i32 24
  %2453 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %2452) #9
  %2454 = icmp ult i64 %2450, %2453
  br i1 %2454, label %2456, label %2455

2455:                                             ; preds = %2449
  store i32 38, ptr %76, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %187) #9
  br label %2479

2456:                                             ; preds = %2449
  call void @llvm.lifetime.start.p0(i64 4, ptr %188) #9
  %2457 = load ptr, ptr %4, align 8, !tbaa !5
  %2458 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2457, i32 0, i32 24
  %2459 = load i64, ptr %187, align 8, !tbaa !56
  %2460 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %2458, i64 noundef %2459) #9
  %2461 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2460)
          to label %2462 unwind label %2475

2462:                                             ; preds = %2456
  store i32 %2461, ptr %188, align 4, !tbaa !41
  %2463 = load i64, ptr %187, align 8, !tbaa !56
  %2464 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZN11spirv_cross10VectorViewIbEixEm(ptr noundef nonnull align 8 dereferenceable(16) %29, i64 noundef %2463) #9
  %2465 = load i8, ptr %2464, align 1, !tbaa !9, !range !50, !noundef !51
  %2466 = trunc i8 %2465 to i1
  %2467 = load i32, ptr %188, align 4, !tbaa !41
  %2468 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %193, i32 noundef %2467)
          to label %2469 unwind label %2475

2469:                                             ; preds = %2462
  %2470 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %2468, i32 0, i32 11
  %2471 = zext i1 %2466 to i8
  store i8 %2471, ptr %2470, align 8, !tbaa !57
  call void @llvm.lifetime.end.p0(i64 4, ptr %188) #9
  br label %2472

2472:                                             ; preds = %2469
  %2473 = load i64, ptr %187, align 8, !tbaa !56
  %2474 = add i64 %2473, 1
  store i64 %2474, ptr %187, align 8, !tbaa !56
  br label %2449, !llvm.loop !193

2475:                                             ; preds = %2462, %2456
  %2476 = landingpad { ptr, i32 }
          cleanup
  %2477 = extractvalue { ptr, i32 } %2476, 0
  store ptr %2477, ptr %11, align 8
  %2478 = extractvalue { ptr, i32 } %2476, 1
  store i32 %2478, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %188) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %187) #9
  br label %2507

2479:                                             ; preds = %2455
  call void @llvm.lifetime.start.p0(i64 8, ptr %189) #9
  %2480 = load ptr, ptr %4, align 8, !tbaa !5
  %2481 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %2480, i32 0, i32 25
  store ptr %2481, ptr %189, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %190) #9
  %2482 = load ptr, ptr %189, align 8, !tbaa !5
  %2483 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %2482) #9
  store ptr %2483, ptr %190, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %191) #9
  %2484 = load ptr, ptr %189, align 8, !tbaa !5
  %2485 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %2484) #9
  store ptr %2485, ptr %191, align 8, !tbaa !5
  br label %2486

2486:                                             ; preds = %2499, %2479
  %2487 = load ptr, ptr %190, align 8, !tbaa !5
  %2488 = load ptr, ptr %191, align 8, !tbaa !5
  %2489 = icmp ne ptr %2487, %2488
  br i1 %2489, label %2491, label %2490

2490:                                             ; preds = %2486
  store i32 41, ptr %76, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %191) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %190) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %189) #9
  br label %2506

2491:                                             ; preds = %2486
  call void @llvm.lifetime.start.p0(i64 8, ptr %192) #9
  %2492 = load ptr, ptr %190, align 8, !tbaa !5
  store ptr %2492, ptr %192, align 8, !tbaa !5
  %2493 = load ptr, ptr %192, align 8, !tbaa !5
  %2494 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %2493)
          to label %2495 unwind label %2502

2495:                                             ; preds = %2491
  %2496 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %193, i32 noundef %2494)
          to label %2497 unwind label %2502

2497:                                             ; preds = %2495
  %2498 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %2496, i32 0, i32 18
  store i8 0, ptr %2498, align 1, !tbaa !55
  call void @llvm.lifetime.end.p0(i64 8, ptr %192) #9
  br label %2499

2499:                                             ; preds = %2497
  %2500 = load ptr, ptr %190, align 8, !tbaa !5
  %2501 = getelementptr inbounds %"class.spirv_cross::TypedID.282", ptr %2500, i32 1
  store ptr %2501, ptr %190, align 8, !tbaa !5
  br label %2486

2502:                                             ; preds = %2495, %2491
  %2503 = landingpad { ptr, i32 }
          cleanup
  %2504 = extractvalue { ptr, i32 } %2503, 0
  store ptr %2504, ptr %11, align 8
  %2505 = extractvalue { ptr, i32 } %2503, 1
  store i32 %2505, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %192) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %191) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %190) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %189) #9
  br label %2507

2506:                                             ; preds = %2490
  call void @llvm.lifetime.end.p0(i64 1, ptr %37) #9
  call void @_ZN11spirv_cross11SmallVectorIbLm64EED2Ev(ptr noundef nonnull align 8 dereferenceable(88) %29) #9
  call void @llvm.lifetime.end.p0(i64 88, ptr %29) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #9
  call void @_ZN11spirv_cross10ValueSaverIjED2Ev(ptr noundef nonnull align 8 dereferenceable(12) %10) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %10) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %7) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %6) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %5) #9
  ret void

2507:                                             ; preds = %2502, %2475, %2404, %2283, %2174, %2160, %2039, %2014, %1842, %1821, %754, %683, %582
  call void @llvm.lifetime.end.p0(i64 1, ptr %37) #9
  br label %2508

2508:                                             ; preds = %2507, %546, %417, %387
  call void @_ZN11spirv_cross11SmallVectorIbLm64EED2Ev(ptr noundef nonnull align 8 dereferenceable(88) %29) #9
  call void @llvm.lifetime.end.p0(i64 88, ptr %29) #9
  br label %2509

2509:                                             ; preds = %2508, %344, %314
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #9
  br label %2510

2510:                                             ; preds = %2509, %290, %201
  call void @_ZN11spirv_cross10ValueSaverIjED2Ev(ptr noundef nonnull align 8 dereferenceable(12) %10) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %10) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %7) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %6) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %5) #9
  br label %2511

2511:                                             ; preds = %2510
  %2512 = load ptr, ptr %11, align 8
  %2513 = load i32, ptr %12, align 4
  %2514 = insertvalue { ptr, i32 } poison, ptr %2512, 0
  %2515 = insertvalue { ptr, i32 } %2514, i32 %2513, 1
  resume { ptr, i32 } %2515

2516:                                             ; preds = %2173, %2145, %1139, %857, %827
  unreachable
}

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

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

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

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

declare noundef nonnull align 8 dereferenceable(356) ptr @_ZNK11spirv_cross8Compiler28get_cfg_for_current_functionEv(ptr noundef nonnull align 8 dereferenceable(3176)) #5

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRA5_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 1 dereferenceable(5), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) #7 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL19emit_continue_blockB5cxx11Ejbb(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, i1 noundef zeroext) #2 align 2

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross10ValueSaverIjEC2ERj(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(4)) unnamed_addr #4 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef ptr @"_ZSt7find_ifIPSt4pairIN11spirv_cross7TypedIDILNS1_5TypesE1EEENS2_ILS3_0EEEEZNS1_12CompilerGLSL16emit_block_chainERNS1_9SPIRBlockEE3$_0ET_SC_SC_T0_"(ptr noundef, ptr noundef, ptr) #7

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross11SmallVectorIbLm64EEC2Em(ptr noundef nonnull align 8 dereferenceable(88), i64 noundef) unnamed_addr #4 align 2

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross11SmallVectorImLm8EEC2Ev(ptr noundef nonnull align 8 dereferenceable(88)) unnamed_addr #4 align 2

declare noundef nonnull align 8 dereferenceable(152) ptr @_ZNK11spirv_cross8Compiler13get_case_listERKNS_9SPIRBlockE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(976)) #5

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(88) ptr @_ZN11spirv_cross11SmallVectorImLm8EEaSEOS1_(ptr noundef nonnull align 8 dereferenceable(88), ptr noundef nonnull align 8 dereferenceable(88)) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross11SmallVectorImLm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(88)) unnamed_addr #4 align 2

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @"_ZZN11spirv_cross12CompilerGLSL16emit_block_chainERNS_9SPIRBlockEENK3$_1clB5cxx11Emjb"(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(1), i64 noundef, i32 noundef, i1 noundef zeroext) #7 align 2

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJPKcRA5_S2_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 1 dereferenceable(5), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) #7 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @"_ZZN11spirv_cross12CompilerGLSL16emit_block_chainERNS_9SPIRBlockEENK3$_2clB5cxx11EjRKNS_11SmallVectorImLm8EEEPKc"(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(8), i32 noundef, ptr noundef nonnull align 8 dereferenceable(88), ptr noundef) #7 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross11SmallVectorIPNS_9SPIRBlockELm8EE8pop_backEv(ptr noundef nonnull align 8 dereferenceable(88)) #4 align 2

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

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

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

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

declare noundef i32 @_ZNK11spirv_cross3CFG21find_common_dominatorEjj(ptr noundef nonnull align 8 dereferenceable(356), i32 noundef, i32 noundef) #5

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross10ValueSaverIjE7releaseEv(ptr noundef nonnull align 8 dereferenceable(12)) #4 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross11SmallVectorIbLm64EED2Ev(ptr noundef nonnull align 8 dereferenceable(88)) unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross10ValueSaverIjED2Ev(ptr noundef nonnull align 8 dereferenceable(12)) unnamed_addr #4 align 2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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 #5 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { 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 #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, !10, i64 0}
!10 = !{!"bool", !7, i64 0}
!11 = !{!12, !17, i64 16}
!12 = !{!"_ZTSN11spirv_cross9SPIRBlockE", !13, i64 0, !16, i64 12, !17, i64 16, !18, i64 20, !19, i64 24, !19, i64 28, !19, i64 32, !14, i64 36, !14, i64 40, !19, i64 44, !19, i64 48, !19, i64 52, !20, i64 56, !21, i64 72, !25, i64 192, !28, i64 312, !28, i64 400, !31, i64 488, !31, i64 640, !10, i64 792, !10, i64 793, !10, i64 794, !19, i64 796, !19, i64 800, !34, i64 808, !34, i64 864, !37, i64 920}
!13 = !{!"_ZTSN11spirv_cross8IVariantE", !14, i64 8}
!14 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !15, i64 0}
!15 = !{!"int", !7, i64 0}
!16 = !{!"_ZTSN11spirv_cross9SPIRBlock10TerminatorE", !7, i64 0}
!17 = !{!"_ZTSN11spirv_cross9SPIRBlock5MergeE", !7, i64 0}
!18 = !{!"_ZTSN11spirv_cross9SPIRBlock5HintsE", !7, i64 0}
!19 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE6EEE", !15, i64 0}
!20 = !{!"_ZTSN11spirv_cross9SPIRBlockUt1_E", !7, i64 0, !14, i64 12}
!21 = !{!"_ZTSN11spirv_cross11SmallVectorINS_11InstructionELm8EEE", !22, i64 0, !23, i64 16, !24, i64 24}
!22 = !{!"_ZTSN11spirv_cross10VectorViewINS_11InstructionEEE", !6, i64 0, !23, i64 8}
!23 = !{!"long", !7, i64 0}
!24 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_11InstructionELm8EEE", !7, i64 0}
!25 = !{!"_ZTSN11spirv_cross11SmallVectorINS_9SPIRBlock3PhiELm8EEE", !26, i64 0, !23, i64 16, !27, i64 24}
!26 = !{!"_ZTSN11spirv_cross10VectorViewINS_9SPIRBlock3PhiEEE", !6, i64 0, !23, i64 8}
!27 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_9SPIRBlock3PhiELm8EEE", !7, i64 0}
!28 = !{!"_ZTSN11spirv_cross11SmallVectorISt4pairINS_7TypedIDILNS_5TypesE1EEENS2_ILS3_0EEEELm8EEE", !29, i64 0, !23, i64 16, !30, i64 24}
!29 = !{!"_ZTSN11spirv_cross10VectorViewISt4pairINS_7TypedIDILNS_5TypesE1EEENS2_ILS3_0EEEEEE", !6, i64 0, !23, i64 8}
!30 = !{!"_ZTSN11spirv_cross13AlignedBufferISt4pairINS_7TypedIDILNS_5TypesE1EEENS2_ILS3_0EEEELm8EEE", !7, i64 0}
!31 = !{!"_ZTSN11spirv_cross11SmallVectorINS_9SPIRBlock4CaseELm8EEE", !32, i64 0, !23, i64 16, !33, i64 24}
!32 = !{!"_ZTSN11spirv_cross10VectorViewINS_9SPIRBlock4CaseEEE", !6, i64 0, !23, i64 8}
!33 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_9SPIRBlock4CaseELm8EEE", !7, i64 0}
!34 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE2EEELm8EEE", !35, i64 0, !23, i64 16, !36, i64 24}
!35 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEEE", !6, i64 0, !23, i64 8}
!36 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE2EEELm8EEE", !7, i64 0}
!37 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EEE", !38, i64 0, !23, i64 16, !39, i64 24}
!38 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEEE", !6, i64 0, !23, i64 8}
!39 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE0EEELm8EEE", !7, i64 0}
!40 = !{i64 0, i64 4, !41}
!41 = !{!15, !15, i64 0}
!42 = !{!43, !10, i64 153}
!43 = !{!"_ZTSN11spirv_cross12SPIRVariableE", !13, i64 0, !44, i64 12, !45, i64 16, !15, i64 20, !14, i64 24, !46, i64 28, !47, i64 32, !10, i64 88, !10, i64 89, !14, i64 92, !37, i64 96, !10, i64 152, !10, i64 153, !10, i64 154, !10, i64 155, !15, i64 156, !19, i64 160, !10, i64 164, !10, i64 165, !10, i64 166, !6, i64 168}
!44 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !15, i64 0}
!45 = !{!"_ZTSN3spv12StorageClassE", !7, i64 0}
!46 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE2EEE", !15, i64 0}
!47 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !48, i64 0, !23, i64 16, !49, i64 24}
!48 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !6, i64 0, !23, i64 8}
!49 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !7, i64 0}
!50 = !{i8 0, i8 2}
!51 = !{}
!52 = !{!53, !53, i64 0}
!53 = !{!"_ZTSN11spirv_cross9SPIRBlock17ContinueBlockTypeE", !7, i64 0}
!54 = !{!12, !10, i64 793}
!55 = !{!43, !10, i64 165}
!56 = !{!23, !23, i64 0}
!57 = !{!43, !10, i64 152}
!58 = distinct !{!58, !59}
!59 = !{!"llvm.loop.mustprogress"}
!60 = !{!61, !61, i64 0}
!61 = !{!"vtable pointer", !8, i64 0}
!62 = !{!43, !10, i64 164}
!63 = !{!12, !16, i64 12}
!64 = !{!65, !67, i64 16}
!65 = !{!"_ZTSN11spirv_cross8SPIRTypeE", !13, i64 0, !66, i64 12, !67, i64 16, !15, i64 20, !15, i64 24, !15, i64 28, !47, i64 32, !68, i64 88, !15, i64 120, !10, i64 124, !10, i64 125, !45, i64 128, !71, i64 136, !47, i64 192, !74, i64 248, !44, i64 272, !44, i64 276, !78, i64 280}
!66 = !{!"_ZTSN3spv2OpE", !7, i64 0}
!67 = !{!"_ZTSN11spirv_cross8SPIRType8BaseTypeE", !7, i64 0}
!68 = !{!"_ZTSN11spirv_cross11SmallVectorIbLm8EEE", !69, i64 0, !23, i64 16, !70, i64 24}
!69 = !{!"_ZTSN11spirv_cross10VectorViewIbEE", !6, i64 0, !23, i64 8}
!70 = !{!"_ZTSN11spirv_cross13AlignedBufferIbLm8EEE", !7, i64 0}
!71 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEE", !72, i64 0, !23, i64 16, !73, i64 24}
!72 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEE", !6, i64 0, !23, i64 8}
!73 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE1EEELm8EEE", !7, i64 0}
!74 = !{!"_ZTSN11spirv_cross8SPIRType9ImageTypeE", !44, i64 0, !75, i64 4, !10, i64 8, !10, i64 9, !10, i64 10, !15, i64 12, !76, i64 16, !77, i64 20}
!75 = !{!"_ZTSN3spv3DimE", !7, i64 0}
!76 = !{!"_ZTSN3spv11ImageFormatE", !7, i64 0}
!77 = !{!"_ZTSN3spv15AccessQualifierE", !7, i64 0}
!78 = !{!"_ZTSSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE", !79, i64 0}
!79 = !{!"_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, !23, i64 8, !80, i64 16, !23, i64 24, !81, i64 32, !6, i64 48}
!80 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!81 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !82, i64 0, !23, i64 8}
!82 = !{!"float", !7, i64 0}
!83 = !{!84, !10, i64 8408}
!84 = !{!"_ZTSN11spirv_cross12CompilerGLSLE", !85, i64 0, !6, i64 3176, !139, i64 3184, !10, i64 3272, !142, i64 3280, !6, i64 7616, !6, i64 7624, !10, i64 7632, !10, i64 7633, !147, i64 7636, !78, i64 7680, !78, i64 7736, !78, i64 7792, !78, i64 7848, !78, i64 7904, !78, i64 7960, !78, i64 8016, !151, i64 8072, !137, i64 8128, !10, i64 8184, !153, i64 8192, !15, i64 8416, !124, i64 8424, !124, i64 8480, !124, i64 8536, !154, i64 8592, !156, i64 8648, !157, i64 8656, !107, i64 8712, !107, i64 8992, !157, i64 9272, !71, i64 9328, !15, i64 9384, !15, i64 9388, !15, i64 9392, !10, i64 9396, !10, i64 9397, !159, i64 9400, !159, i64 9424, !163, i64 9448, !167, i64 9472, !157, i64 9496, !124, i64 9552, !124, i64 9608, !7, i64 9664, !171, i64 9672, !124, i64 9728, !6, i64 9784, !173, i64 9792}
!85 = !{!"_ZTSN11spirv_cross8CompilerE", !86, i64 8, !47, i64 1928, !47, i64 1984, !6, i64 2040, !6, i64 2048, !15, i64 2056, !126, i64 2064, !10, i64 2120, !124, i64 2128, !10, i64 2184, !10, i64 2185, !128, i64 2192, !47, i64 2312, !131, i64 2368, !124, i64 2400, !124, i64 2456, !124, i64 2512, !124, i64 2568, !124, i64 2624, !123, i64 2680, !123, i64 2744, !15, i64 2808, !15, i64 2812, !10, i64 2816, !124, i64 2824, !10, i64 2880, !10, i64 2881, !15, i64 2884, !133, i64 2888, !47, i64 2944, !135, i64 3000, !124, i64 3056, !10, i64 3112, !137, i64 3120}
!86 = !{!"_ZTSN11spirv_cross8ParsedIRE", !87, i64 0, !93, i64 8, !97, i64 32, !100, i64 248, !7, i64 304, !37, i64 1088, !37, i64 1144, !102, i64 1200, !104, i64 1256, !107, i64 1312, !110, i64 1592, !113, i64 1624, !115, i64 1680, !117, i64 1736, !118, i64 1740, !119, i64 1748, !120, i64 1752, !15, i64 1756, !15, i64 1760, !121, i64 1768, !123, i64 1800, !124, i64 1864}
!87 = !{!"_ZTSSt10unique_ptrIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EE", !88, i64 0}
!88 = !{!"_ZTSSt15__uniq_ptr_dataIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_ELb1ELb1EE", !89, i64 0}
!89 = !{!"_ZTSSt15__uniq_ptr_implIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EE", !90, i64 0}
!90 = !{!"_ZTSSt5tupleIJPN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EEE", !91, i64 0}
!91 = !{!"_ZTSSt11_Tuple_implILm0EJPN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EEE", !92, i64 0}
!92 = !{!"_ZTSSt10_Head_baseILm0EPN11spirv_cross15ObjectPoolGroupELb0EE", !6, i64 0}
!93 = !{!"_ZTSSt6vectorIjSaIjEE", !94, i64 0}
!94 = !{!"_ZTSSt12_Vector_baseIjSaIjEE", !95, i64 0}
!95 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE12_Vector_implE", !96, i64 0}
!96 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!97 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7VariantELm8EEE", !98, i64 0, !23, i64 16, !99, i64 24}
!98 = !{!"_ZTSN11spirv_cross10VectorViewINS_7VariantEEE", !6, i64 0, !23, i64 8}
!99 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7VariantELm8EEE", !7, i64 0}
!100 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !101, i64 0}
!101 = !{!"_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, !23, i64 8, !80, i64 16, !23, i64 24, !81, i64 32, !6, i64 48}
!102 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEEjSt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_jEEE", !103, i64 0}
!103 = !{!"_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, !23, i64 8, !80, i64 16, !23, i64 24, !81, i64 32, !6, i64 48}
!104 = !{!"_ZTSN11spirv_cross11SmallVectorIN3spv10CapabilityELm8EEE", !105, i64 0, !23, i64 16, !106, i64 24}
!105 = !{!"_ZTSN11spirv_cross10VectorViewIN3spv10CapabilityEEE", !6, i64 0, !23, i64 8}
!106 = !{!"_ZTSN11spirv_cross13AlignedBufferIN3spv10CapabilityELm8EEE", !7, i64 0}
!107 = !{!"_ZTSN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !108, i64 0, !23, i64 16, !109, i64 24}
!108 = !{!"_ZTSN11spirv_cross10VectorViewINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE", !6, i64 0, !23, i64 8}
!109 = !{!"_ZTSN11spirv_cross13AlignedBufferINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !7, i64 0}
!110 = !{!"_ZTSN11spirv_cross11SmallVectorIhLm8EEE", !111, i64 0, !23, i64 16, !112, i64 24}
!111 = !{!"_ZTSN11spirv_cross10VectorViewIhEE", !6, i64 0, !23, i64 8}
!112 = !{!"_ZTSN11spirv_cross13AlignedBufferIhLm8EEE", !7, i64 0}
!113 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE6EEES3_St4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S3_EEE", !114, i64 0}
!114 = !{!"_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, !23, i64 8, !80, i64 16, !23, i64 24, !81, i64 32, !6, i64 48}
!115 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE4EEENS0_14SPIREntryPointESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !116, i64 0}
!116 = !{!"_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, !23, i64 8, !80, i64 16, !23, i64 24, !81, i64 32, !6, i64 48}
!117 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE4EEE", !15, i64 0}
!118 = !{!"_ZTSN11spirv_cross8ParsedIR6SourceE", !15, i64 0, !10, i64 4, !10, i64 5, !10, i64 6}
!119 = !{!"_ZTSN3spv15AddressingModelE", !7, i64 0}
!120 = !{!"_ZTSN3spv11MemoryModelE", !7, i64 0}
!121 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !122, i64 0, !23, i64 8, !7, i64 16}
!122 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!123 = !{!"_ZTSN11spirv_cross6BitsetE", !23, i64 0, !124, i64 8}
!124 = !{!"_ZTSSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE", !125, i64 0}
!125 = !{!"_ZTSSt10_HashtableIjjSaIjENSt8__detail9_IdentityESt8equal_toIjESt4hashIjENS1_18_Mod_range_hashingENS1_20_Default_ranged_hashENS1_20_Prime_rehash_policyENS1_17_Hashtable_traitsILb0ELb1ELb1EEEE", !6, i64 0, !23, i64 8, !80, i64 16, !23, i64 24, !81, i64 32, !6, i64 48}
!126 = !{!"_ZTSSt13unordered_setIN11spirv_cross7TypedIDILNS0_5TypesE2EEESt4hashIS3_ESt8equal_toIS3_ESaIS3_EE", !127, i64 0}
!127 = !{!"_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, !23, i64 8, !80, i64 16, !23, i64 24, !81, i64 32, !6, i64 48}
!128 = !{!"_ZTSN11spirv_cross11SmallVectorINS_20CombinedImageSamplerELm8EEE", !129, i64 0, !23, i64 16, !130, i64 24}
!129 = !{!"_ZTSN11spirv_cross10VectorViewINS_20CombinedImageSamplerEEE", !6, i64 0, !23, i64 8}
!130 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_20CombinedImageSamplerELm8EEE", !7, i64 0}
!131 = !{!"_ZTSSt8functionIFvRKN11spirv_cross8SPIRTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERS9_EE", !132, i64 0, !6, i64 24}
!132 = !{!"_ZTSSt14_Function_base", !7, i64 0, !6, i64 16}
!133 = !{!"_ZTSSt13unordered_mapIjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS2_EESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !134, i64 0}
!134 = !{!"_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, !23, i64 8, !80, i64 16, !23, i64 24, !81, i64 32, !6, i64 48}
!135 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross8Compiler17PhysicalBlockMetaESt4hashIjESt8equal_toIjESaISt4pairIKjS2_EEE", !136, i64 0}
!136 = !{!"_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, !23, i64 8, !80, i64 16, !23, i64 24, !81, i64 32, !6, i64 48}
!137 = !{!"_ZTSSt13unordered_mapIjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !138, i64 0}
!138 = !{!"_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, !23, i64 8, !80, i64 16, !23, i64 24, !81, i64 32, !6, i64 48}
!139 = !{!"_ZTSN11spirv_cross11SmallVectorIPNS_9SPIRBlockELm8EEE", !140, i64 0, !23, i64 16, !141, i64 24}
!140 = !{!"_ZTSN11spirv_cross10VectorViewIPNS_9SPIRBlockEEE", !6, i64 0, !23, i64 8}
!141 = !{!"_ZTSN11spirv_cross13AlignedBufferIPNS_9SPIRBlockELm8EEE", !7, i64 0}
!142 = !{!"_ZTSN11spirv_cross12StringStreamILm4096ELm4096EEE", !143, i64 0, !7, i64 24, !144, i64 4120}
!143 = !{!"_ZTSN11spirv_cross12StringStreamILm4096ELm4096EE6BufferE", !6, i64 0, !23, i64 8, !23, i64 16}
!144 = !{!"_ZTSN11spirv_cross11SmallVectorINS_12StringStreamILm4096ELm4096EE6BufferELm8EEE", !145, i64 0, !23, i64 16, !146, i64 24}
!145 = !{!"_ZTSN11spirv_cross10VectorViewINS_12StringStreamILm4096ELm4096EE6BufferEEE", !6, i64 0, !23, i64 8}
!146 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_12StringStreamILm4096ELm4096EE6BufferELm8EEE", !7, i64 0}
!147 = !{!"_ZTSN11spirv_cross12CompilerGLSL7OptionsE", !15, i64 0, !10, i64 4, !10, i64 5, !15, i64 8, !10, i64 12, !10, i64 13, !10, i64 14, !10, i64 15, !10, i64 16, !10, i64 17, !10, i64 18, !10, i64 19, !10, i64 20, !10, i64 21, !10, i64 22, !10, i64 23, !15, i64 24, !148, i64 28, !149, i64 32}
!148 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options13VertexOptionsE", !10, i64 0, !10, i64 1, !10, i64 2}
!149 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options15FragmentOptionsE", !150, i64 0, !150, i64 4}
!150 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options9PrecisionE", !7, i64 0}
!151 = !{!"_ZTSSt13unordered_mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt13unordered_setImSt4hashImESt8equal_toImESaImEES7_IS5_ES9_IS5_ESaISt4pairIKS5_SC_EEE", !152, i64 0}
!152 = !{!"_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, !23, i64 8, !80, i64 16, !23, i64 24, !81, i64 32, !6, i64 48}
!153 = !{!"_ZTSN11spirv_cross12CompilerGLSL17BackendVariationsE", !121, i64 0, !121, i64 32, !121, i64 64, !10, i64 96, !10, i64 97, !10, i64 98, !10, i64 99, !6, i64 104, !6, i64 112, !6, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !6, i64 176, !67, i64 184, !10, i64 188, !10, i64 189, !10, i64 190, !10, i64 191, !10, i64 192, !10, i64 193, !10, i64 194, !10, i64 195, !10, i64 196, !10, i64 197, !10, i64 198, !10, i64 199, !10, i64 200, !10, i64 201, !10, i64 202, !10, i64 203, !10, i64 204, !10, i64 205, !10, i64 206, !10, i64 207, !10, i64 208, !10, i64 209, !10, i64 210, !10, i64 211, !10, i64 212, !10, i64 213, !10, i64 214, !10, i64 215, !10, i64 216, !10, i64 217, !10, i64 218, !10, i64 219}
!154 = !{!"_ZTSSt13unordered_mapIjbSt4hashIjESt8equal_toIjESaISt4pairIKjbEEE", !155, i64 0}
!155 = !{!"_ZTSSt10_HashtableIjSt4pairIKjbESaIS2_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !23, i64 8, !80, i64 16, !23, i64 24, !81, i64 32, !6, i64 48}
!156 = !{!"_ZTSN11spirv_cross12CompilerGLSL27ShaderSubgroupSupportHelperE", !15, i64 0}
!157 = !{!"_ZTSSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEE", !158, i64 0}
!158 = !{!"_ZTSSt10_HashtableIjSt4pairIKjjESaIS2_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !23, i64 8, !80, i64 16, !23, i64 24, !81, i64 32, !6, i64 48}
!159 = !{!"_ZTSSt6vectorIN11spirv_cross8PlsRemapESaIS1_EE", !160, i64 0}
!160 = !{!"_ZTSSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE", !161, i64 0}
!161 = !{!"_ZTSNSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE12_Vector_implE", !162, i64 0}
!162 = !{!"_ZTSNSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!163 = !{!"_ZTSSt6vectorISt4pairIjjESaIS1_EE", !164, i64 0}
!164 = !{!"_ZTSSt12_Vector_baseISt4pairIjjESaIS1_EE", !165, i64 0}
!165 = !{!"_ZTSNSt12_Vector_baseISt4pairIjjESaIS1_EE12_Vector_implE", !166, i64 0}
!166 = !{!"_ZTSNSt12_Vector_baseISt4pairIjjESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!167 = !{!"_ZTSSt6vectorISt4pairIjbESaIS1_EE", !168, i64 0}
!168 = !{!"_ZTSSt12_Vector_baseISt4pairIjbESaIS1_EE", !169, i64 0}
!169 = !{!"_ZTSNSt12_Vector_baseISt4pairIjbESaIS1_EE12_Vector_implE", !170, i64 0}
!170 = !{!"_ZTSNSt12_Vector_baseISt4pairIjbESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!171 = !{!"_ZTSSt13unordered_setIN11spirv_cross21LocationComponentPairENS0_14InternalHasherESt8equal_toIS1_ESaIS1_EE", !172, i64 0}
!172 = !{!"_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, !23, i64 8, !80, i64 16, !23, i64 24, !81, i64 32, !6, i64 48}
!173 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross11SmallVectorINS0_7TypedIDILNS0_5TypesE3EEELm8EEESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !174, i64 0}
!174 = !{!"_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, !23, i64 8, !80, i64 16, !23, i64 24, !81, i64 32, !6, i64 48}
!175 = !{!84, !10, i64 8290}
!176 = !{!84, !6, i64 8352}
!177 = !{!84, !6, i64 8344}
!178 = !{!12, !10, i64 794}
!179 = distinct !{!179, !59}
!180 = !{!181, !6, i64 0}
!181 = !{!"_ZTSZN11spirv_cross12CompilerGLSL16emit_block_chainERNS_9SPIRBlockEE3$_2", !6, i64 0}
!182 = !{!84, !10, i64 8403}
!183 = !{!65, !15, i64 20}
!184 = distinct !{!184, !59}
!185 = distinct !{!185, !59}
!186 = !{!84, !15, i64 9384}
!187 = !{!84, !10, i64 3272}
!188 = distinct !{!188, !59}
!189 = !{!85, !6, i64 2040}
!190 = !{!84, !10, i64 8184}
!191 = !{!84, !10, i64 8394}
!192 = distinct !{!192, !59}
!193 = distinct !{!193, !59}


; 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::ValueSaver" = type <{ ptr, i32, [4 x i8] }>
%"class.spirv_cross::TypedID.282" = type { i32 }
%"struct.std::__detail::_Node_iterator.339" = type { %"struct.std::__detail::_Node_iterator_base.340" }
%"struct.std::__detail::_Node_iterator_base.340" = type { ptr }
%"struct.std::pair.457" = type { %"class.spirv_cross::TypedID.281", %"class.spirv_cross::TypedID.280" }
%"class.spirv_cross::TypedID.281" = type { i32 }
%"class.spirv_cross::TypedID.280" = type { i32 }
%"class.spirv_cross::SmallVector.460" = type { %"class.spirv_cross::VectorView.285", i64, %"class.spirv_cross::AlignedBuffer.461" }
%"class.spirv_cross::VectorView.285" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.461" = type { [64 x i8] }
%"class.std::unordered_map.462" = type { %"class.std::_Hashtable.463" }
%"class.std::_Hashtable.463" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%"class.spirv_cross::SmallVector.92" = type { %"class.spirv_cross::VectorView.93", i64, %"class.spirv_cross::AlignedBuffer.94" }
%"class.spirv_cross::VectorView.93" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.94" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.476" = type { %"class.spirv_cross::VectorView.477", i64, %"class.spirv_cross::AlignedBuffer.478" }
%"class.spirv_cross::VectorView.477" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.478" = type { [64 x i8] }
%class.anon.479 = type { i8 }
%class.anon.481 = type { ptr }
%"class.spirv_cross::TypedID.283" = type { i32 }
%"class.spirv_cross::SmallVector.27" = type { %"class.spirv_cross::VectorView.28", i64, %"class.spirv_cross::AlignedBuffer.29" }
%"class.spirv_cross::VectorView.28" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.29" = type { [256 x i8] }
%"class.std::allocator.71" = type { i8 }

@.str.9 = external hidden unnamed_addr constant [1 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.135 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.136 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.298 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.542 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.547 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.809 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.968 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1003 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1011 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1388 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1488 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1623 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1624 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1631 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1632 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.1633 = external hidden unnamed_addr constant [41 x i8], align 1
@__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL16emit_block_chainERNS_9SPIRBlockE = external hidden unnamed_addr constant [62 x i8], align 1
@.str.1634 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.1635 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.1636 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.1637 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1638 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1639 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.1640 = external hidden unnamed_addr constant [81 x i8], align 1
@.str.1641 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1642 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.1643 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.1644 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.1645 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1646 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.1647 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.1648 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1649 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1650 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1651 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.1652 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1653 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.1654 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.1655 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1656 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.1657 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.1658 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.1659 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.1660 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.1661 = external hidden unnamed_addr constant [69 x i8], align 1

; 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: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #1

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

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

declare 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 #3

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9end_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848)) local_unnamed_addr #2 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 #4 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRA33_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 1 dereferenceable(33)) local_unnamed_addr #7 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 #4 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 #4 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 #7 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 #7

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #4 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 #6 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 #4 align 2

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #4 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 #2 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 #7 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNKSt8__detail14_Node_iteratorISt4pairIKjjELb0ELb0EEptEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #4 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 #4 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 #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE7reserveEm(ptr noundef nonnull align 8 dereferenceable(280), i64 noundef) local_unnamed_addr #4 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 #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRA5_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 1 dereferenceable(5)) local_unnamed_addr #7 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 #4 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEE3endEv(ptr noundef nonnull align 8 dereferenceable(56)) local_unnamed_addr #4 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 #2 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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL30emit_variable_temporary_copiesERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(176)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL23emit_block_instructionsERNS_9SPIRBlockE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(976)) local_unnamed_addr #2 align 2

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNKSt8functionIFvvEEclEv(ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross12CompilerGLSL16emit_block_chainERNS_9SPIRBlockE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(976) %1) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca %"struct.spirv_cross::ValueSaver", align 8
  %4 = alloca %"class.spirv_cross::TypedID.282", align 4
  %5 = alloca %"struct.std::__detail::_Node_iterator.339", align 8
  %6 = alloca i32, align 4
  %7 = alloca %"struct.std::__detail::_Node_iterator.339", align 8
  %8 = alloca %"struct.std::pair.457", align 4
  %9 = alloca %"class.spirv_cross::TypedID.282", align 4
  %10 = alloca %"class.spirv_cross::SmallVector.460", align 8
  %11 = alloca %"class.spirv_cross::TypedID.282", align 4
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca %"class.std::unordered_map.462", align 8
  %15 = alloca %"class.spirv_cross::SmallVector.92", align 8
  %16 = alloca %"class.spirv_cross::SmallVector.476", align 8
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca %"class.spirv_cross::SmallVector.476", align 8
  %24 = alloca i32, align 4
  %25 = alloca %class.anon.479, align 1
  %26 = alloca %class.anon.481, align 8
  %27 = alloca %"class.spirv_cross::TypedID.283", align 4
  %28 = alloca %"class.spirv_cross::TypedID.283", align 4
  %29 = alloca %"class.spirv_cross::TypedID.283", align 4
  %30 = alloca i32, align 4
  %31 = alloca %"class.spirv_cross::TypedID.283", align 4
  %32 = alloca %"class.spirv_cross::SmallVector.27", align 8
  %33 = alloca %"class.std::__cxx11::basic_string", align 8
  %34 = alloca %"class.std::__cxx11::basic_string", align 8
  %35 = alloca %"class.std::__cxx11::basic_string", align 8
  %36 = alloca %"class.std::__cxx11::basic_string", align 8
  %37 = alloca %"class.spirv_cross::TypedID.283", align 4
  %38 = alloca %"class.spirv_cross::SmallVector.27", align 8
  %39 = alloca %"class.std::__cxx11::basic_string", align 8
  %40 = alloca %"class.std::__cxx11::basic_string", align 8
  %41 = alloca %"class.std::__cxx11::basic_string", align 8
  %42 = alloca %"class.std::__cxx11::basic_string", align 8
  %43 = alloca %"class.spirv_cross::TypedID.283", align 4
  %44 = alloca i32, align 4
  %45 = alloca %"class.std::__cxx11::basic_string", align 8
  %46 = alloca i32, align 4
  %47 = alloca ptr, align 8
  %48 = alloca %"class.std::__cxx11::basic_string", align 8
  %49 = alloca %"class.std::__cxx11::basic_string", align 8
  %50 = alloca %"class.spirv_cross::TypedID.283", align 4
  %51 = alloca %"class.std::__cxx11::basic_string", align 8
  %52 = alloca %"class.std::__cxx11::basic_string", align 8
  %53 = alloca %"class.std::allocator.71", align 1
  %54 = alloca %"class.spirv_cross::TypedID.283", align 4
  %55 = alloca %"class.std::__cxx11::basic_string", align 8
  %56 = alloca %"class.spirv_cross::TypedID.283", align 4
  %57 = alloca %"class.std::__cxx11::basic_string", align 8
  %58 = alloca %"class.spirv_cross::TypedID.280", align 4
  %59 = alloca %"class.spirv_cross::TypedID.280", align 4
  %60 = alloca %"class.spirv_cross::TypedID.280", align 4
  %61 = alloca %"class.spirv_cross::TypedID.283", align 4
  %62 = alloca %"class.std::__cxx11::basic_string", align 8
  %63 = alloca %"class.std::__cxx11::basic_string", align 8
  %64 = alloca %"class.std::__cxx11::basic_string", align 8
  %65 = alloca %"class.std::__cxx11::basic_string", align 8
  %66 = alloca %"class.std::__cxx11::basic_string", align 8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3) #8
  %67 = getelementptr inbounds i8, ptr %0, i64 2056
  call void @_ZN11spirv_cross10ValueSaverIjEC2ERj(ptr noundef nonnull align 8 dereferenceable(12) %3, ptr noundef nonnull align 4 dereferenceable(4) %67)
  %68 = getelementptr inbounds i8, ptr %1, i64 16
  %69 = load i32, ptr %68, align 8, !tbaa !5
  %70 = icmp eq i32 %69, 1
  br i1 %70, label %71, label %74

71:                                               ; preds = %2
  invoke void @_ZN11spirv_cross8Compiler14add_loop_levelEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
          to label %74 unwind label %72

72:                                               ; preds = %._crit_edge, %71
  %73 = landingpad { ptr, i32 }
          cleanup
  br label %1115

74:                                               ; preds = %71, %2
  %75 = getelementptr inbounds i8, ptr %1, i64 808
  %76 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %75) #8
  %77 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %75) #8
  %.not691 = icmp eq ptr %76, %77
  br i1 %.not691, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %74
  %78 = getelementptr inbounds i8, ptr %0, i64 9496
  %79 = getelementptr inbounds i8, ptr %1, i64 312
  br label %81

._crit_edge:                                      ; preds = %117, %74
  %80 = getelementptr inbounds i8, ptr %1, i64 312
  invoke void @_ZN11spirv_cross12CompilerGLSL24emit_hoisted_temporariesERNS_11SmallVectorISt4pairINS_7TypedIDILNS_5TypesE1EEENS3_ILS4_0EEEELm8EEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(88) %80)
          to label %120 unwind label %72

81:                                               ; preds = %.lr.ph, %117
  %.0465692 = phi ptr [ %76, %.lr.ph ], [ %118, %117 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #8
  %82 = load i32, ptr %.0465692, align 4, !tbaa !38
  store i32 %82, ptr %4, align 4, !tbaa !38
  %83 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %4)
  %84 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %83)
          to label %85 unwind label %107

85:                                               ; preds = %81
  %86 = getelementptr inbounds i8, ptr %84, i64 153
  %87 = load i8, ptr %86, align 1, !tbaa !39, !range !47, !noundef !48
  %88 = trunc nuw i8 %87 to i1
  br i1 %88, label %89, label %117

89:                                               ; preds = %85
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #8
  %90 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %4)
  store i32 %90, ptr %6, align 4, !tbaa !38
  %91 = invoke ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEE4findERS5_(ptr noundef nonnull align 8 dereferenceable(56) %78, ptr noundef nonnull align 4 dereferenceable(4) %6)
          to label %92 unwind label %109

92:                                               ; preds = %89
  store ptr %91, ptr %5, align 8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #8
  %93 = call ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %78) #8
  store ptr %93, ptr %7, align 8
  %94 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseISt4pairIKjjELb0EEES6_(ptr noundef nonnull align 8 dereferenceable(8) %5, ptr noundef nonnull align 8 dereferenceable(8) %7) #8
  br i1 %94, label %95, label %.critedge

95:                                               ; preds = %92
  %96 = call noundef ptr @_ZN11spirv_cross10VectorViewISt4pairINS_7TypedIDILNS_5TypesE1EEENS2_ILS3_0EEEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %79) #8
  %97 = call noundef ptr @_ZN11spirv_cross10VectorViewISt4pairINS_7TypedIDILNS_5TypesE1EEENS2_ILS3_0EEEEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %79) #8
  %.sroa.0226.0.copyload = load ptr, ptr %5, align 8
  %98 = invoke noundef ptr @"_ZSt7find_ifIPSt4pairIN11spirv_cross7TypedIDILNS1_5TypesE1EEENS2_ILS3_0EEEEZNS1_12CompilerGLSL16emit_block_chainERNS1_9SPIRBlockEE3$_0ET_SC_SC_T0_"(ptr noundef %96, ptr noundef %97, ptr %.sroa.0226.0.copyload)
          to label %99 unwind label %111

99:                                               ; preds = %95
  %100 = call noundef ptr @_ZN11spirv_cross10VectorViewISt4pairINS_7TypedIDILNS_5TypesE1EEENS2_ILS3_0EEEEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %79) #8
  %101 = icmp eq ptr %98, %100
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #8
  br i1 %101, label %102, label %115

102:                                              ; preds = %99
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #8
  %103 = getelementptr inbounds i8, ptr %84, i64 12
  %104 = call noundef ptr @_ZNKSt8__detail14_Node_iteratorISt4pairIKjjELb0ELb0EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %5) #8
  %105 = getelementptr inbounds i8, ptr %104, i64 4
  invoke void @_ZNSt4pairIN11spirv_cross7TypedIDILNS0_5TypesE1EEENS1_ILS2_0EEEEC2IRS3_RjTnNSt9enable_ifIXaaclsr5_PCCPE22_MoveConstructiblePairIT_T0_EEclsr5_PCCPE30_ImplicitlyMoveConvertiblePairISA_SB_EEEbE4typeELb1EEEOSA_OSB_(ptr noundef nonnull align 4 dereferenceable(8) %8, ptr noundef nonnull align 4 dereferenceable(4) %103, ptr noundef nonnull align 4 dereferenceable(4) %105)
          to label %106 unwind label %113

106:                                              ; preds = %102
  call void @_ZN11spirv_cross11SmallVectorISt4pairINS_7TypedIDILNS_5TypesE1EEENS2_ILS3_0EEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(88) %79, ptr noundef nonnull align 4 dereferenceable(8) %8) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #8
  br label %115

107:                                              ; preds = %81
  %108 = landingpad { ptr, i32 }
          cleanup
  br label %119

109:                                              ; preds = %89
  %110 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #8
  br label %116

111:                                              ; preds = %95
  %112 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #8
  br label %116

113:                                              ; preds = %102
  %114 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #8
  br label %116

.critedge:                                        ; preds = %92
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #8
  br label %115

115:                                              ; preds = %.critedge, %106, %99
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #8
  br label %117

116:                                              ; preds = %113, %111, %109
  %.pn604 = phi { ptr, i32 } [ %114, %113 ], [ %112, %111 ], [ %110, %109 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #8
  br label %119

117:                                              ; preds = %115, %85
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #8
  %118 = getelementptr inbounds i8, ptr %.0465692, i64 4
  %.not = icmp eq ptr %118, %77
  br i1 %.not, label %._crit_edge, label %81

119:                                              ; preds = %116, %107
  %.pn604.pn = phi { ptr, i32 } [ %.pn604, %116 ], [ %108, %107 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #8
  br label %1115

120:                                              ; preds = %._crit_edge
  %121 = getelementptr inbounds i8, ptr %1, i64 32
  %122 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %121)
  %.not501 = icmp eq i32 %122, 0
  br i1 %.not501, label %134, label %123

123:                                              ; preds = %120
  %124 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %121)
  %125 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %124)
          to label %126 unwind label %132

126:                                              ; preds = %123
  %127 = invoke noundef i32 @_ZNK11spirv_cross8Compiler19continue_block_typeERKNS_9SPIRBlockE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(976) %125)
          to label %128 unwind label %132

128:                                              ; preds = %126
  %129 = icmp eq i32 %127, 4
  br i1 %129, label %130, label %134

130:                                              ; preds = %128
  %131 = getelementptr inbounds i8, ptr %1, i64 793
  store i8 1, ptr %131, align 1, !tbaa !49
  br label %134

132:                                              ; preds = %126, %123
  %133 = landingpad { ptr, i32 }
          cleanup
  br label %1115

134:                                              ; preds = %128, %130, %120
  %.0466 = phi i32 [ 4, %130 ], [ %127, %128 ], [ 0, %120 ]
  %135 = getelementptr inbounds i8, ptr %1, i64 864
  %136 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %135) #8
  %137 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %135) #8
  %.not502693 = icmp eq ptr %136, %137
  br i1 %.not502693, label %._crit_edge697, label %.lr.ph696

._crit_edge697:                                   ; preds = %145, %134
  call void @llvm.lifetime.start.p0(i64 88, ptr nonnull %10) #8
  %138 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %75) #8
  call void @_ZN11spirv_cross11SmallVectorIbLm64EEC2Em(ptr noundef nonnull align 8 dereferenceable(88) %10, i64 noundef %138) #8
  %139 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %75) #8
  %.not763 = icmp eq i64 %139, 0
  br i1 %.not763, label %._crit_edge701, label %.lr.ph700

.lr.ph696:                                        ; preds = %134, %145
  %.0468694 = phi ptr [ %146, %145 ], [ %136, %134 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #8
  %140 = load i32, ptr %.0468694, align 4, !tbaa !38
  store i32 %140, ptr %9, align 4, !tbaa !38
  %141 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %9)
  %142 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %141)
          to label %143 unwind label %147

143:                                              ; preds = %.lr.ph696
  %144 = getelementptr inbounds i8, ptr %142, i64 165
  store i8 1, ptr %144, align 1, !tbaa !50
  invoke void @_ZN11spirv_cross12CompilerGLSL30emit_variable_temporary_copiesERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(176) %142)
          to label %145 unwind label %147

145:                                              ; preds = %143
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #8
  %146 = getelementptr inbounds i8, ptr %.0468694, i64 4
  %.not502 = icmp eq ptr %146, %137
  br i1 %.not502, label %._crit_edge697, label %.lr.ph696

147:                                              ; preds = %143, %.lr.ph696
  %148 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #8
  br label %1115

._crit_edge701:                                   ; preds = %153, %._crit_edge697
  %149 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL12is_legacy_esEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
  br i1 %149, label %182, label %162

.lr.ph700:                                        ; preds = %._crit_edge697, %153
  %.0469698 = phi i64 [ %157, %153 ], [ 0, %._crit_edge697 ]
  %150 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %75, i64 noundef %.0469698) #8
  %151 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %150)
  %152 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %151)
          to label %153 unwind label %160

153:                                              ; preds = %.lr.ph700
  %154 = getelementptr inbounds i8, ptr %152, i64 152
  %155 = load i8, ptr %154, align 8, !tbaa !51, !range !47, !noundef !48
  %156 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZN11spirv_cross10VectorViewIbEixEm(ptr noundef nonnull align 8 dereferenceable(16) %10, i64 noundef %.0469698) #8
  store i8 %155, ptr %156, align 1, !tbaa !52
  %157 = add nuw i64 %.0469698, 1
  %158 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %75) #8
  %159 = icmp ult i64 %157, %158
  br i1 %159, label %.lr.ph700, label %._crit_edge701, !llvm.loop !53

160:                                              ; preds = %.lr.ph700
  %161 = landingpad { ptr, i32 }
          cleanup
  br label %1114

162:                                              ; preds = %._crit_edge701
  %163 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler23block_is_loop_candidateERKNS_9SPIRBlockENS1_6MethodE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(976) %1, i32 noundef 2)
          to label %164 unwind label %179

164:                                              ; preds = %162
  br i1 %163, label %165, label %182

165:                                              ; preds = %164
  invoke void @_ZN11spirv_cross12CompilerGLSL26flush_undeclared_variablesERNS_9SPIRBlockE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(976) %1)
          to label %166 unwind label %179

166:                                              ; preds = %165
  %167 = invoke noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL24attempt_emit_loop_headerERNS_9SPIRBlockENS1_6MethodE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(976) %1, i32 noundef 2)
          to label %168 unwind label %179

168:                                              ; preds = %166
  br i1 %167, label %169, label %.thread629

169:                                              ; preds = %168
  %170 = getelementptr inbounds i8, ptr %1, i64 44
  %171 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %170)
  %172 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %171)
          to label %173 unwind label %179

173:                                              ; preds = %169
  %174 = getelementptr inbounds i8, ptr %1, i64 28
  %175 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %174)
  %176 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %175)
          to label %177 unwind label %179

177:                                              ; preds = %173
  %178 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler17execution_is_noopERKNS_9SPIRBlockES3_(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(976) %172, ptr noundef nonnull align 8 dereferenceable(976) %176)
          to label %181 unwind label %179

179:                                              ; preds = %.thread, %236, %233, %232, %231, %230, %226, %223, %220, %219, %218, %214, %213, %212, %210, %209, %208, %204, %203, %200, %197, %193, %189, %186, %185, %182, %177, %173, %169, %166, %165, %162
  %180 = landingpad { ptr, i32 }
          cleanup
  br label %1114

181:                                              ; preds = %177
  %.0 = xor i1 %178, true
  br label %.thread

182:                                              ; preds = %164, %._crit_edge701
  %183 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler23block_is_loop_candidateERKNS_9SPIRBlockENS1_6MethodE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(976) %1, i32 noundef 0)
          to label %184 unwind label %179

184:                                              ; preds = %182
  br i1 %183, label %185, label %200

185:                                              ; preds = %184
  invoke void @_ZN11spirv_cross12CompilerGLSL26flush_undeclared_variablesERNS_9SPIRBlockE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(976) %1)
          to label %186 unwind label %179

186:                                              ; preds = %185
  %187 = invoke noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL24attempt_emit_loop_headerERNS_9SPIRBlockENS1_6MethodE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(976) %1, i32 noundef 0)
          to label %188 unwind label %179

188:                                              ; preds = %186
  br i1 %187, label %189, label %.thread629

189:                                              ; preds = %188
  %190 = getelementptr inbounds i8, ptr %1, i64 44
  %191 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %190)
  %192 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %191)
          to label %193 unwind label %179

193:                                              ; preds = %189
  %194 = getelementptr inbounds i8, ptr %1, i64 28
  %195 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %194)
  %196 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %195)
          to label %197 unwind label %179

197:                                              ; preds = %193
  %198 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler17execution_is_noopERKNS_9SPIRBlockES3_(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(976) %192, ptr noundef nonnull align 8 dereferenceable(976) %196)
          to label %199 unwind label %179

199:                                              ; preds = %197
  %.1 = xor i1 %198, true
  br label %.thread

200:                                              ; preds = %184
  %201 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler23block_is_loop_candidateERKNS_9SPIRBlockENS1_6MethodE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(976) %1, i32 noundef 1)
          to label %202 unwind label %179

202:                                              ; preds = %200
  br i1 %201, label %203, label %206

203:                                              ; preds = %202
  invoke void @_ZN11spirv_cross12CompilerGLSL26flush_undeclared_variablesERNS_9SPIRBlockE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(976) %1)
          to label %204 unwind label %179

204:                                              ; preds = %203
  %205 = invoke noundef zeroext i1 @_ZN11spirv_cross12CompilerGLSL24attempt_emit_loop_headerERNS_9SPIRBlockENS1_6MethodE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(976) %1, i32 noundef 1)
          to label %234 unwind label %179

206:                                              ; preds = %202
  %207 = icmp eq i32 %.0466, 3
  br i1 %207, label %208, label %215

208:                                              ; preds = %206
  invoke void @_ZN11spirv_cross12CompilerGLSL26flush_undeclared_variablesERNS_9SPIRBlockE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(976) %1)
          to label %209 unwind label %179

209:                                              ; preds = %208
  invoke void @_ZN11spirv_cross12CompilerGLSL28emit_while_loop_initializersERKNS_9SPIRBlockE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(976) %1)
          to label %210 unwind label %179

210:                                              ; preds = %209
  %211 = getelementptr inbounds i8, ptr %1, i64 400
  invoke void @_ZN11spirv_cross12CompilerGLSL24emit_hoisted_temporariesERNS_11SmallVectorISt4pairINS_7TypedIDILNS_5TypesE1EEENS3_ILS4_0EEEELm8EEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(88) %211)
          to label %212 unwind label %179

212:                                              ; preds = %210
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA3_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(3) @.str.542)
          to label %213 unwind label %179

213:                                              ; preds = %212
  invoke void @_ZN11spirv_cross12CompilerGLSL11begin_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
          to label %214 unwind label %179

214:                                              ; preds = %213
  invoke void @_ZN11spirv_cross12CompilerGLSL23emit_block_instructionsERNS_9SPIRBlockE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(976) %1)
          to label %.thread unwind label %179

215:                                              ; preds = %206
  %216 = load i32, ptr %68, align 8, !tbaa !5
  %217 = icmp eq i32 %216, 1
  br i1 %217, label %218, label %233

218:                                              ; preds = %215
  invoke void @_ZN11spirv_cross12CompilerGLSL26flush_undeclared_variablesERNS_9SPIRBlockE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(976) %1)
          to label %219 unwind label %179

219:                                              ; preds = %218
  invoke void @_ZN11spirv_cross12CompilerGLSL28emit_while_loop_initializersERKNS_9SPIRBlockE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(976) %1)
          to label %220 unwind label %179

220:                                              ; preds = %219
  %221 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %121)
  %222 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %221)
          to label %223 unwind label %179

223:                                              ; preds = %220
  %224 = getelementptr inbounds i8, ptr %222, i64 793
  store i8 1, ptr %224, align 1, !tbaa !49
  %225 = getelementptr inbounds i8, ptr %1, i64 400
  invoke void @_ZN11spirv_cross12CompilerGLSL24emit_hoisted_temporariesERNS_11SmallVectorISt4pairINS_7TypedIDILNS_5TypesE1EEENS3_ILS4_0EEEELm8EEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(88) %225)
          to label %226 unwind label %179

226:                                              ; preds = %223
  %227 = load ptr, ptr %0, align 8, !tbaa !55
  %228 = getelementptr inbounds i8, ptr %227, i64 448
  %229 = load ptr, ptr %228, align 8
  invoke void %229(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(976) %1)
          to label %230 unwind label %179

230:                                              ; preds = %226
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA9_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(9) @.str.1632)
          to label %231 unwind label %179

231:                                              ; preds = %230
  invoke void @_ZN11spirv_cross12CompilerGLSL11begin_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
          to label %232 unwind label %179

232:                                              ; preds = %231
  invoke void @_ZN11spirv_cross12CompilerGLSL23emit_block_instructionsERNS_9SPIRBlockE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(976) %1)
          to label %.thread unwind label %179

233:                                              ; preds = %215
  invoke void @_ZN11spirv_cross12CompilerGLSL23emit_block_instructionsERNS_9SPIRBlockE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(976) %1)
          to label %.thread629 unwind label %179

234:                                              ; preds = %204
  br i1 %205, label %.thread, label %.thread629

.thread629:                                       ; preds = %168, %233, %188, %234
  %235 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %135) #8
  br i1 %235, label %.thread, label %236

236:                                              ; preds = %.thread629
  invoke void @_ZN11spirv_cross8Compiler42force_recompile_guarantee_forward_progressEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
          to label %237 unwind label %179

237:                                              ; preds = %236
  %238 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %135) #8
  %239 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %135) #8
  %.not503702 = icmp eq ptr %238, %239
  br i1 %.not503702, label %._crit_edge706, label %.lr.ph705

._crit_edge706:                                   ; preds = %243, %237
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE2EEELm8EE5clearEv(ptr noundef nonnull align 8 dereferenceable(56) %135) #8
  br label %.thread

.lr.ph705:                                        ; preds = %237, %243
  %.0470703 = phi ptr [ %245, %243 ], [ %238, %237 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #8
  %240 = load i32, ptr %.0470703, align 4, !tbaa !38
  store i32 %240, ptr %11, align 4, !tbaa !38
  %241 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %11)
  %242 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %241)
          to label %243 unwind label %246

243:                                              ; preds = %.lr.ph705
  %244 = getelementptr inbounds i8, ptr %242, i64 164
  store i8 0, ptr %244, align 4, !tbaa !57
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #8
  %245 = getelementptr inbounds i8, ptr %.0470703, i64 4
  %.not503 = icmp eq ptr %245, %239
  br i1 %.not503, label %._crit_edge706, label %.lr.ph705

246:                                              ; preds = %.lr.ph705
  %247 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #8
  br label %1114

.thread:                                          ; preds = %181, %232, %214, %199, %._crit_edge706, %.thread629, %234
  %.2627 = phi i1 [ false, %._crit_edge706 ], [ false, %.thread629 ], [ false, %234 ], [ %.0, %181 ], [ false, %232 ], [ false, %214 ], [ %.1, %199 ]
  %.2403626 = phi i1 [ false, %._crit_edge706 ], [ false, %.thread629 ], [ false, %234 ], [ %178, %181 ], [ false, %232 ], [ false, %214 ], [ %198, %199 ]
  %.0405625 = phi i1 [ false, %._crit_edge706 ], [ false, %.thread629 ], [ true, %234 ], [ false, %181 ], [ false, %232 ], [ false, %214 ], [ false, %199 ]
  %.0408624 = phi i1 [ false, %._crit_edge706 ], [ false, %.thread629 ], [ false, %234 ], [ true, %181 ], [ false, %232 ], [ false, %214 ], [ false, %199 ]
  %.1467623 = phi i32 [ %.0466, %._crit_edge706 ], [ %.0466, %.thread629 ], [ %.0466, %234 ], [ %.0466, %181 ], [ 4, %232 ], [ 3, %214 ], [ %.0466, %199 ]
  invoke void @_ZN11spirv_cross12CompilerGLSL26flush_undeclared_variablesERNS_9SPIRBlockE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(976) %1)
          to label %248 unwind label %179

248:                                              ; preds = %.thread
  %249 = getelementptr inbounds i8, ptr %1, i64 12
  %250 = load i32, ptr %249, align 4, !tbaa !58
  switch i32 %250, label %954 [
    i32 1, label %251
    i32 2, label %271
    i32 3, label %332
    i32 4, label %789
    i32 6, label %881
    i32 5, label %895
    i32 7, label %948
    i32 8, label %949
    i32 9, label %950
  ]

251:                                              ; preds = %248
  %252 = getelementptr inbounds i8, ptr %1, i64 800
  %253 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %252)
  %254 = getelementptr inbounds i8, ptr %1, i64 24
  %255 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %254)
  %256 = icmp eq i32 %253, %255
  br i1 %256, label %.invoke789, label %259

257:                                              ; preds = %.invoke789, %.invoke787, %.invoke, %1085, %1082, %1081, %1078, %1073, %1007, %1004, %999, %996, %988, %970, %969, %966, %956, %950, %949, %948, %881, %802, %327, %324, %318, %293
  %258 = landingpad { ptr, i32 }
          cleanup
  br label %1114

259:                                              ; preds = %251
  br i1 %.0405625, label %.thread776, label %260

260:                                              ; preds = %259
  %261 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %254)
  %262 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler11is_continueEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %261)
  br i1 %262, label %.invoke789, label %263

263:                                              ; preds = %260
  %264 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %254)
  %265 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_breakEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %264)
  br i1 %265, label %.invoke789, label %266

266:                                              ; preds = %263
  %267 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %254)
  %268 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14is_conditionalEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %267)
  br i1 %268, label %.invoke789, label %961

.invoke789:                                       ; preds = %260, %263, %266, %251
  %269 = getelementptr inbounds i8, ptr %1, i64 8
  %270 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_6EEEv(ptr noundef nonnull align 4 dereferenceable(4) %269)
          to label %.invoke787 unwind label %257

.invoke787:                                       ; preds = %.invoke789
  %.sroa.0200.0.copyload = load i32, ptr %254, align 8, !tbaa !38
  invoke void @_ZN11spirv_cross12CompilerGLSL6branchENS_7TypedIDILNS_5TypesE6EEES3_(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 %270, i32 %.sroa.0200.0.copyload)
          to label %.thread776 unwind label %257

271:                                              ; preds = %248
  br i1 %.2627, label %272, label %296

272:                                              ; preds = %271
  br i1 %.0408624, label %273, label %293

273:                                              ; preds = %272
  %274 = getelementptr inbounds i8, ptr %1, i64 44
  %275 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %274)
  %276 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %121)
  %277 = icmp eq i32 %275, %276
  br i1 %277, label %279, label %278

278:                                              ; preds = %273
  call void @__assert_fail(ptr noundef nonnull @.str.1633, ptr noundef nonnull @.str.11, i32 noundef 17467, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL16emit_block_chainERNS_9SPIRBlockE) #9
  unreachable

279:                                              ; preds = %273
  %280 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %121)
  %281 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %280)
          to label %282 unwind label %289

282:                                              ; preds = %279
  %283 = getelementptr inbounds i8, ptr %281, i64 793
  %284 = load i8, ptr %283, align 1, !tbaa !52, !range !47, !noundef !48
  store i8 1, ptr %283, align 1, !tbaa !52
  %285 = getelementptr inbounds i8, ptr %1, i64 8
  %286 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_6EEEv(ptr noundef nonnull align 4 dereferenceable(4) %285)
          to label %287 unwind label %291

287:                                              ; preds = %282
  %.sroa.0192.0.copyload = load i32, ptr %274, align 4, !tbaa !38
  invoke void @_ZN11spirv_cross12CompilerGLSL6branchENS_7TypedIDILNS_5TypesE6EEES3_(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 %286, i32 %.sroa.0192.0.copyload)
          to label %288 unwind label %291

288:                                              ; preds = %287
  store i8 %284, ptr %283, align 1, !tbaa !52
  br label %961

289:                                              ; preds = %279
  %290 = landingpad { ptr, i32 }
          cleanup
  br label %1114

291:                                              ; preds = %287, %282
  %292 = landingpad { ptr, i32 }
          cleanup
  br label %1114

293:                                              ; preds = %272
  %294 = getelementptr inbounds i8, ptr %1, i64 8
  %295 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_6EEEv(ptr noundef nonnull align 4 dereferenceable(4) %294)
          to label %.invoke unwind label %257

296:                                              ; preds = %271
  br i1 %.2403626, label %297, label %324

297:                                              ; preds = %296
  br i1 %.0408624, label %298, label %318

298:                                              ; preds = %297
  %299 = getelementptr inbounds i8, ptr %1, i64 48
  %300 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %299)
  %301 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %121)
  %302 = icmp eq i32 %300, %301
  br i1 %302, label %304, label %303

303:                                              ; preds = %298
  call void @__assert_fail(ptr noundef nonnull @.str.1634, ptr noundef nonnull @.str.11, i32 noundef 17483, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL16emit_block_chainERNS_9SPIRBlockE) #9
  unreachable

304:                                              ; preds = %298
  %305 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %121)
  %306 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %305)
          to label %307 unwind label %314

307:                                              ; preds = %304
  %308 = getelementptr inbounds i8, ptr %306, i64 793
  %309 = load i8, ptr %308, align 1, !tbaa !52, !range !47, !noundef !48
  store i8 1, ptr %308, align 1, !tbaa !52
  %310 = getelementptr inbounds i8, ptr %1, i64 8
  %311 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_6EEEv(ptr noundef nonnull align 4 dereferenceable(4) %310)
          to label %312 unwind label %316

312:                                              ; preds = %307
  %.sroa.0184.0.copyload = load i32, ptr %299, align 8, !tbaa !38
  invoke void @_ZN11spirv_cross12CompilerGLSL6branchENS_7TypedIDILNS_5TypesE6EEES3_(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 %311, i32 %.sroa.0184.0.copyload)
          to label %313 unwind label %316

313:                                              ; preds = %312
  store i8 %309, ptr %308, align 1, !tbaa !52
  br label %961

314:                                              ; preds = %304
  %315 = landingpad { ptr, i32 }
          cleanup
  br label %1114

316:                                              ; preds = %312, %307
  %317 = landingpad { ptr, i32 }
          cleanup
  br label %1114

318:                                              ; preds = %297
  %319 = getelementptr inbounds i8, ptr %1, i64 8
  %320 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_6EEEv(ptr noundef nonnull align 4 dereferenceable(4) %319)
          to label %.invoke unwind label %257

.invoke:                                          ; preds = %318, %293
  %.sink = phi i64 [ 44, %293 ], [ 48, %318 ]
  %321 = phi i32 [ %295, %293 ], [ %320, %318 ]
  %322 = getelementptr inbounds i8, ptr %1, i64 %.sink
  %323 = load i32, ptr %322, align 4, !tbaa !38
  invoke void @_ZN11spirv_cross12CompilerGLSL6branchENS_7TypedIDILNS_5TypesE6EEES3_(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 %321, i32 %323)
          to label %961 unwind label %257

324:                                              ; preds = %296
  %325 = getelementptr inbounds i8, ptr %1, i64 8
  %326 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_6EEEv(ptr noundef nonnull align 4 dereferenceable(4) %325)
          to label %327 unwind label %257

327:                                              ; preds = %324
  %328 = getelementptr inbounds i8, ptr %1, i64 40
  %329 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %328)
  %330 = getelementptr inbounds i8, ptr %1, i64 44
  %.sroa.0180.0.copyload = load i32, ptr %330, align 4, !tbaa !38
  %331 = getelementptr inbounds i8, ptr %1, i64 48
  %.sroa.0179.0.copyload = load i32, ptr %331, align 8, !tbaa !38
  invoke void @_ZN11spirv_cross12CompilerGLSL6branchENS_7TypedIDILNS_5TypesE6EEEjS3_S3_(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 %326, i32 noundef %329, i32 %.sroa.0180.0.copyload, i32 %.sroa.0179.0.copyload)
          to label %961 unwind label %257

332:                                              ; preds = %248
  %333 = getelementptr inbounds i8, ptr %1, i64 40
  %334 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %333)
  %335 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %334)
          to label %336 unwind label %344

336:                                              ; preds = %332
  %337 = getelementptr inbounds i8, ptr %335, i64 16
  %338 = load i32, ptr %337, align 8, !tbaa !59
  %339 = add i32 %338, -4
  %switch.and = and i32 %339, -7
  %switch.selectcmp = icmp eq i32 %switch.and, 0
  %340 = load i32, ptr %68, align 8, !tbaa !5
  %341 = icmp eq i32 %340, 0
  br i1 %341, label %342, label %350

342:                                              ; preds = %336
  %343 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %343, ptr noundef nonnull @.str.1635)
          to label %.invoke788 unwind label %346

344:                                              ; preds = %332
  %345 = landingpad { ptr, i32 }
          cleanup
  br label %1114

346:                                              ; preds = %342
  %347 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %343) #8
  br label %1114

348:                                              ; preds = %.invoke788
  %349 = landingpad { ptr, i32 }
          cleanup
  br label %1114

350:                                              ; preds = %336
  %351 = getelementptr inbounds i8, ptr %0, i64 8408
  %352 = load i8, ptr %351, align 8, !tbaa !78, !range !47, !noundef !48
  %353 = trunc nuw i8 %352 to i1
  %354 = add i32 %338, -11
  %switch616 = icmp ult i32 %354, -2
  %or.cond665.not = select i1 %353, i1 true, i1 %switch616
  br i1 %or.cond665.not, label %360, label %355

355:                                              ; preds = %350
  %356 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %356, ptr noundef nonnull @.str.1636)
          to label %.invoke788 unwind label %358

.invoke788:                                       ; preds = %342, %355
  %357 = phi ptr [ %356, %355 ], [ %343, %342 ]
  invoke void @__cxa_throw(ptr nonnull %357, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
          to label %.cont unwind label %348

.cont:                                            ; preds = %.invoke788
  unreachable

358:                                              ; preds = %355
  %359 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %356) #8
  br label %1114

360:                                              ; preds = %350
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #8
  store ptr @.str.9, ptr %12, align 8, !tbaa !170
  switch i32 %338, label %.thread644 [
    i32 8, label %361
    i32 9, label %366
    i32 10, label %368
    i32 6, label %370
    i32 5, label %373
  ]

361:                                              ; preds = %360
  %362 = getelementptr inbounds i8, ptr %0, i64 8290
  %363 = load i8, ptr %362, align 2, !tbaa !171, !range !47, !noundef !48
  %364 = trunc nuw i8 %363 to i1
  br i1 %364, label %365, label %.thread644

365:                                              ; preds = %361
  store ptr @.str.1011, ptr %12, align 8, !tbaa !170
  br label %.thread644

366:                                              ; preds = %360
  br i1 %353, label %367, label %.thread644

367:                                              ; preds = %366
  store ptr @.str.1637, ptr %12, align 8, !tbaa !170
  br label %.thread644

368:                                              ; preds = %360
  br i1 %353, label %369, label %.thread644

369:                                              ; preds = %368
  store ptr @.str.1003, ptr %12, align 8, !tbaa !170
  br label %.thread644

370:                                              ; preds = %360
  %371 = getelementptr inbounds i8, ptr %0, i64 8352
  %372 = load ptr, ptr %371, align 8, !tbaa !172
  store ptr %372, ptr %12, align 8, !tbaa !170
  br label %.thread644

373:                                              ; preds = %360
  %374 = getelementptr inbounds i8, ptr %0, i64 8344
  %375 = load ptr, ptr %374, align 8, !tbaa !173
  store ptr %375, ptr %12, align 8, !tbaa !170
  br label %.thread644

.thread644:                                       ; preds = %360, %366, %361, %368, %367, %370, %373, %369, %365
  %376 = getelementptr inbounds i8, ptr %0, i64 3184
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #8
  store ptr %1, ptr %13, align 8, !tbaa !170
  call void @_ZN11spirv_cross11SmallVectorIPNS_9SPIRBlockELm8EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(88) %376, ptr noundef nonnull align 8 dereferenceable(8) %13) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #8
  %377 = getelementptr inbounds i8, ptr %1, i64 794
  %378 = load i8, ptr %377, align 2, !tbaa !174, !range !47, !noundef !48
  %379 = trunc nuw i8 %378 to i1
  br i1 %379, label %380, label %384

380:                                              ; preds = %.thread644
  %381 = getelementptr inbounds i8, ptr %1, i64 8
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA7_KcRNS_7TypedIDILNS_5TypesE0EEERA23_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(7) @.str.1638, ptr noundef nonnull align 4 dereferenceable(4) %381, ptr noundef nonnull align 1 dereferenceable(23) @.str.1639)
          to label %384 unwind label %382

382:                                              ; preds = %380
  %383 = landingpad { ptr, i32 }
          cleanup
  br label %788

384:                                              ; preds = %380, %.thread644
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %14) #8
  call void @_ZNSt13unordered_mapIjN11spirv_cross11SmallVectorImLm8EEESt4hashIjESt8equal_toIjESaISt4pairIKjS2_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(56) %14) #8
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %15) #8
  call void @_ZN11spirv_cross11SmallVectorIjLm8EEC2Ev(ptr noundef nonnull align 8 dereferenceable(56) %15) #8
  call void @llvm.lifetime.start.p0(i64 88, ptr nonnull %16) #8
  call void @_ZN11spirv_cross11SmallVectorImLm8EEC2Ev(ptr noundef nonnull align 8 dereferenceable(88) %16) #8
  %385 = invoke noundef nonnull align 8 dereferenceable(152) ptr @_ZNK11spirv_cross8Compiler13get_case_listERKNS_9SPIRBlockE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(976) %1)
          to label %386 unwind label %395

386:                                              ; preds = %384
  %387 = call noundef ptr @_ZNK11spirv_cross10VectorViewINS_9SPIRBlock4CaseEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %385) #8
  %388 = call noundef ptr @_ZNK11spirv_cross10VectorViewINS_9SPIRBlock4CaseEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %385) #8
  %.not525717 = icmp eq ptr %387, %388
  br i1 %.not525717, label %._crit_edge721, label %.lr.ph720

.lr.ph720:                                        ; preds = %386
  %389 = getelementptr inbounds i8, ptr %1, i64 24
  %390 = getelementptr inbounds i8, ptr %1, i64 52
  br label %397

._crit_edge721:                                   ; preds = %426, %386
  %391 = getelementptr inbounds i8, ptr %1, i64 52
  %392 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %391)
  %393 = getelementptr inbounds i8, ptr %1, i64 24
  %394 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %393)
  %.not526 = icmp eq i32 %392, %394
  br i1 %.not526, label %473, label %428

395:                                              ; preds = %384
  %396 = landingpad { ptr, i32 }
          cleanup
  br label %787

397:                                              ; preds = %.lr.ph720, %426
  %.0472718 = phi ptr [ %387, %.lr.ph720 ], [ %427, %426 ]
  %398 = getelementptr inbounds i8, ptr %.0472718, i64 8
  %399 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %398)
  %400 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %389)
  %.not568 = icmp eq i32 %399, %400
  br i1 %.not568, label %418, label %401

401:                                              ; preds = %397
  %402 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %398)
  %403 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %390)
  %.not569 = icmp eq i32 %402, %403
  br i1 %.not569, label %418, label %404

404:                                              ; preds = %401
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %17) #8
  %405 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %398)
  store i32 %405, ptr %17, align 4, !tbaa !38
  %406 = invoke noundef i64 @_ZNKSt13unordered_mapIjN11spirv_cross11SmallVectorImLm8EEESt4hashIjESt8equal_toIjESaISt4pairIKjS2_EEE5countERS8_(ptr noundef nonnull align 8 dereferenceable(56) %14, ptr noundef nonnull align 4 dereferenceable(4) %17)
          to label %407 unwind label %410

407:                                              ; preds = %404
  %.not571 = icmp eq i64 %406, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #8
  br i1 %.not571, label %408, label %412

408:                                              ; preds = %407
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %18) #8
  %409 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %398)
  store i32 %409, ptr %18, align 4, !tbaa !38
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backEOj(ptr noundef nonnull align 8 dereferenceable(56) %15, ptr noundef nonnull align 4 dereferenceable(4) %18) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #8
  br label %412

410:                                              ; preds = %404
  %411 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #8
  br label %787

412:                                              ; preds = %408, %407
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %19) #8
  %413 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %398)
  store i32 %413, ptr %19, align 4, !tbaa !38
  %414 = invoke noundef nonnull align 8 dereferenceable(88) ptr @_ZNSt13unordered_mapIjN11spirv_cross11SmallVectorImLm8EEESt4hashIjESt8equal_toIjESaISt4pairIKjS2_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %14, ptr noundef nonnull align 4 dereferenceable(4) %19)
          to label %415 unwind label %416

415:                                              ; preds = %412
  call void @_ZN11spirv_cross11SmallVectorImLm8EE9push_backERKm(ptr noundef nonnull align 8 dereferenceable(88) %414, ptr noundef nonnull align 8 dereferenceable(8) %.0472718) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #8
  br label %426

416:                                              ; preds = %412
  %417 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #8
  br label %787

418:                                              ; preds = %401, %397
  %419 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %398)
  %420 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %389)
  %421 = icmp eq i32 %419, %420
  br i1 %421, label %422, label %426

422:                                              ; preds = %418
  %423 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %390)
  %424 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %389)
  %.not570 = icmp eq i32 %423, %424
  br i1 %.not570, label %426, label %425

425:                                              ; preds = %422
  call void @_ZN11spirv_cross11SmallVectorImLm8EE9push_backERKm(ptr noundef nonnull align 8 dereferenceable(88) %16, ptr noundef nonnull align 8 dereferenceable(8) %.0472718) #8
  br label %426

426:                                              ; preds = %418, %422, %425, %415
  %427 = getelementptr inbounds i8, ptr %.0472718, i64 16
  %.not525 = icmp eq ptr %427, %388
  br i1 %.not525, label %._crit_edge721, label %397

428:                                              ; preds = %._crit_edge721
  %429 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %391)
  %430 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %429)
          to label %431 unwind label %433

431:                                              ; preds = %428
  %432 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %15) #8
  %.not764 = icmp eq i64 %432, 0
  br i1 %.not764, label %._crit_edge725, label %.lr.ph724

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

.lr.ph724:                                        ; preds = %431, %455
  %.0481722 = phi i64 [ %456, %455 ], [ 0, %431 ]
  %435 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %15, i64 noundef %.0481722) #8
  %436 = load i32, ptr %435, align 4, !tbaa !38
  %437 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %436)
          to label %438 unwind label %446

438:                                              ; preds = %.lr.ph724
  %439 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler26execution_is_direct_branchERKNS_9SPIRBlockES3_(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(976) %437, ptr noundef nonnull align 8 dereferenceable(976) %430)
          to label %440 unwind label %446

440:                                              ; preds = %438
  br i1 %439, label %441, label %448

441:                                              ; preds = %440
  %442 = call noundef ptr @_ZSt5beginIN11spirv_cross11SmallVectorIjLm8EEEEDTcldtfp_5beginEERT_(ptr noundef nonnull align 8 dereferenceable(56) %15)
  %443 = getelementptr inbounds i32, ptr %442, i64 %.0481722
  %444 = getelementptr inbounds i8, ptr %443, i64 4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %20) #8
  %445 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %391)
  store i32 %445, ptr %20, align 4, !tbaa !38
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE6insertEPjRKj(ptr noundef nonnull align 8 dereferenceable(56) %15, ptr noundef nonnull %444, ptr noundef nonnull align 4 dereferenceable(4) %20) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #8
  br label %.thread649

446:                                              ; preds = %448, %438, %.lr.ph724
  %447 = landingpad { ptr, i32 }
          cleanup
  br label %787

448:                                              ; preds = %440
  %449 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler26execution_is_direct_branchERKNS_9SPIRBlockES3_(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(976) %430, ptr noundef nonnull align 8 dereferenceable(976) %437)
          to label %450 unwind label %446

450:                                              ; preds = %448
  br i1 %449, label %451, label %455

451:                                              ; preds = %450
  %452 = call noundef ptr @_ZSt5beginIN11spirv_cross11SmallVectorIjLm8EEEEDTcldtfp_5beginEERT_(ptr noundef nonnull align 8 dereferenceable(56) %15)
  %453 = getelementptr inbounds i32, ptr %452, i64 %.0481722
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %21) #8
  %454 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %391)
  store i32 %454, ptr %21, align 4, !tbaa !38
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE6insertEPjRKj(ptr noundef nonnull align 8 dereferenceable(56) %15, ptr noundef %453, ptr noundef nonnull align 4 dereferenceable(4) %21) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #8
  br label %.thread649

455:                                              ; preds = %450
  %456 = add nuw i64 %.0481722, 1
  %exitcond.not = icmp eq i64 %456, %432
  br i1 %exitcond.not, label %._crit_edge725, label %.lr.ph724, !llvm.loop !175

._crit_edge725:                                   ; preds = %455, %431
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %22) #8
  %457 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %391)
  store i32 %457, ptr %22, align 4, !tbaa !38
  call void @_ZN11spirv_cross11SmallVectorIjLm8EE9push_backEOj(ptr noundef nonnull align 8 dereferenceable(56) %15, ptr noundef nonnull align 4 dereferenceable(4) %22) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #8
  br label %466

.thread649:                                       ; preds = %441, %451
  %458 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL12is_legacy_esEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
  br i1 %458, label %459, label %466

459:                                              ; preds = %.thread649
  %460 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %460, ptr noundef nonnull @.str.1640)
          to label %461 unwind label %464

461:                                              ; preds = %459
  invoke void @__cxa_throw(ptr nonnull %460, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
          to label %1116 unwind label %462

462:                                              ; preds = %461
  %463 = landingpad { ptr, i32 }
          cleanup
  br label %787

464:                                              ; preds = %459
  %465 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %460) #8
  br label %787

466:                                              ; preds = %.thread649, %._crit_edge725
  call void @llvm.lifetime.start.p0(i64 88, ptr nonnull %23) #8
  call void @_ZN11spirv_cross11SmallVectorImLm8EEC2Ev(ptr noundef nonnull align 8 dereferenceable(88) %23) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %24) #8
  %467 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %391)
  store i32 %467, ptr %24, align 4, !tbaa !38
  %468 = invoke noundef nonnull align 8 dereferenceable(88) ptr @_ZNSt13unordered_mapIjN11spirv_cross11SmallVectorImLm8EEESt4hashIjESt8equal_toIjESaISt4pairIKjS2_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %14, ptr noundef nonnull align 4 dereferenceable(4) %24)
          to label %469 unwind label %471

469:                                              ; preds = %466
  %470 = call noundef nonnull align 8 dereferenceable(88) ptr @_ZN11spirv_cross11SmallVectorImLm8EEaSEOS1_(ptr noundef nonnull align 8 dereferenceable(88) %468, ptr noundef nonnull align 8 dereferenceable(88) %23) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %24) #8
  call void @_ZN11spirv_cross11SmallVectorImLm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(88) %23) #8
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %23) #8
  br label %473

471:                                              ; preds = %466
  %472 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %24) #8
  call void @_ZN11spirv_cross11SmallVectorImLm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(88) %23) #8
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %23) #8
  br label %787

473:                                              ; preds = %469, %._crit_edge721
  %474 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %15) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %25) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %26) #8
  store ptr %0, ptr %26, align 8, !tbaa !176
  %475 = getelementptr inbounds i8, ptr %0, i64 8403
  %476 = load i8, ptr %475, align 1, !tbaa !178, !range !47, !noundef !48
  %477 = trunc nuw i8 %476 to i1
  %478 = icmp ugt i64 %474, 1
  %479 = and i1 %478, %477
  br i1 %479, label %.lr.ph739, label %._crit_edge740

.lr.ph739:                                        ; preds = %473
  %480 = getelementptr inbounds i8, ptr %1, i64 8
  %481 = getelementptr inbounds i8, ptr %335, i64 20
  br label %483

._crit_edge740:                                   ; preds = %607, %473
  %482 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewINS_9SPIRBlock4CaseEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %385) #8
  br i1 %482, label %613, label %617

483:                                              ; preds = %.lr.ph739, %607
  %.0485737 = phi i64 [ 1, %.lr.ph739 ], [ %608, %607 ]
  %484 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_6EEEv(ptr noundef nonnull align 4 dereferenceable(4) %480)
          to label %485 unwind label %514

485:                                              ; preds = %483
  %486 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %15, i64 noundef %.0485737) #8
  %487 = load i32, ptr %486, align 4, !tbaa !38
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %27, i32 noundef %487)
  %488 = load i32, ptr %27, align 4
  %489 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler18flush_phi_requiredENS_7TypedIDILNS_5TypesE6EEES3_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %484, i32 %488)
          to label %490 unwind label %514

490:                                              ; preds = %485
  br i1 %489, label %491, label %607

491:                                              ; preds = %490
  %492 = add i64 %.0485737, -1
  %493 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %15, i64 noundef %492) #8
  %494 = load i32, ptr %493, align 4, !tbaa !38
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %28, i32 noundef %494)
  %495 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %15, i64 noundef %.0485737) #8
  %496 = load i32, ptr %495, align 4, !tbaa !38
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %29, i32 noundef %496)
  %497 = load i32, ptr %28, align 4
  %498 = load i32, ptr %29, align 4
  %499 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler18flush_phi_requiredENS_7TypedIDILNS_5TypesE6EEES3_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %497, i32 %498)
          to label %500 unwind label %514

500:                                              ; preds = %491
  br i1 %499, label %501, label %607

501:                                              ; preds = %500
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %30) #8
  %502 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %15, i64 noundef %.0485737) #8
  %503 = load i32, ptr %502, align 4, !tbaa !38
  store i32 %503, ptr %30, align 4, !tbaa !38
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %31) #8
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %31, i32 noundef 0)
  %504 = load i32, ptr %30, align 4, !tbaa !38
  %505 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %504)
          to label %506 unwind label %516

506:                                              ; preds = %501
  %507 = getelementptr inbounds i8, ptr %505, i64 796
  %508 = load i32, ptr %31, align 4, !tbaa !38
  store i32 %508, ptr %507, align 4, !tbaa !38
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %31) #8
  %509 = invoke noundef nonnull align 8 dereferenceable(88) ptr @_ZNSt13unordered_mapIjN11spirv_cross11SmallVectorImLm8EEESt4hashIjESt8equal_toIjESaISt4pairIKjS2_EEEixERS8_(ptr noundef nonnull align 8 dereferenceable(56) %14, ptr noundef nonnull align 4 dereferenceable(4) %30)
          to label %510 unwind label %518

510:                                              ; preds = %506
  %511 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewImE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %509) #8
  br i1 %511, label %512, label %561

512:                                              ; preds = %510
  call void @llvm.lifetime.start.p0(i64 280, ptr nonnull %32) #8
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEC2Ev(ptr noundef nonnull align 8 dereferenceable(280) %32) #8
  br label %520

513:                                              ; preds = %._crit_edge735
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %36) #8
  invoke void @_ZN11spirv_cross5mergeERKNS_11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEEPKc(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %36, ptr noundef nonnull align 8 dereferenceable(280) %32, ptr noundef nonnull @.str.136)
          to label %544 unwind label %553

514:                                              ; preds = %491, %485, %483
  %515 = landingpad { ptr, i32 }
          cleanup
  br label %786

516:                                              ; preds = %501
  %517 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %31) #8
  br label %606

518:                                              ; preds = %506
  %519 = landingpad { ptr, i32 }
          cleanup
  br label %606

520:                                              ; preds = %512, %._crit_edge735
  %.0486736 = phi i64 [ 0, %512 ], [ %526, %._crit_edge735 ]
  %521 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %15, i64 noundef %.0486736) #8
  %522 = invoke noundef nonnull align 8 dereferenceable(88) ptr @_ZNSt13unordered_mapIjN11spirv_cross11SmallVectorImLm8EEESt4hashIjESt8equal_toIjESaISt4pairIKjS2_EEEixERS8_(ptr noundef nonnull align 8 dereferenceable(56) %14, ptr noundef nonnull align 4 dereferenceable(4) %521)
          to label %523 unwind label %527

523:                                              ; preds = %520
  %524 = call noundef ptr @_ZN11spirv_cross10VectorViewImE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %522) #8
  %525 = call noundef ptr @_ZN11spirv_cross10VectorViewImE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %522) #8
  %.not555731 = icmp eq ptr %524, %525
  br i1 %.not555731, label %._crit_edge735, label %.lr.ph734

._crit_edge735:                                   ; preds = %534, %523
  %526 = add nuw i64 %.0486736, 1
  %exitcond774.not = icmp eq i64 %526, %474
  br i1 %exitcond774.not, label %513, label %520, !llvm.loop !179

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

.lr.ph734:                                        ; preds = %523, %534
  %.0487732 = phi ptr [ %535, %534 ], [ %524, %523 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %33) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %34) #8
  %529 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %333)
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %34, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %529, i1 noundef zeroext true)
          to label %530 unwind label %536

530:                                              ; preds = %.lr.ph734
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %35) #8
  %531 = load i64, ptr %.0487732, align 8, !tbaa !180
  %532 = load i32, ptr %481, align 4, !tbaa !181
  invoke void @"_ZZN11spirv_cross12CompilerGLSL16emit_block_chainERNS_9SPIRBlockEENK3$_1clB5cxx11Emjb"(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %35, ptr noundef nonnull align 1 dereferenceable(1) %25, i64 noundef %531, i32 noundef %532, i1 noundef zeroext %switch.selectcmp)
          to label %533 unwind label %538

533:                                              ; preds = %530
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA5_KcS6_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %33, ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef nonnull align 1 dereferenceable(5) @.str.1488, ptr noundef nonnull align 8 dereferenceable(32) %35)
          to label %534 unwind label %540

534:                                              ; preds = %533
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %32, ptr noundef nonnull align 8 dereferenceable(32) %33) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %34) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %33) #8
  %535 = getelementptr inbounds i8, ptr %.0487732, i64 8
  %.not555 = icmp eq ptr %535, %525
  br i1 %.not555, label %._crit_edge735, label %.lr.ph734

536:                                              ; preds = %.lr.ph734
  %537 = landingpad { ptr, i32 }
          cleanup
  br label %543

538:                                              ; preds = %530
  %539 = landingpad { ptr, i32 }
          cleanup
  br label %542

540:                                              ; preds = %533
  %541 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #8
  br label %542

542:                                              ; preds = %540, %538
  %.pn556 = phi { ptr, i32 } [ %541, %540 ], [ %539, %538 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #8
  br label %543

543:                                              ; preds = %542, %536
  %.pn556.pn = phi { ptr, i32 } [ %.pn556, %542 ], [ %537, %536 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %34) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %33) #8
  br label %560

544:                                              ; preds = %513
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA5_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(5) @.str.1624, ptr noundef nonnull align 8 dereferenceable(32) %36, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %545 unwind label %555

545:                                              ; preds = %544
  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
  invoke void @_ZN11spirv_cross12CompilerGLSL11begin_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
          to label %546 unwind label %558

546:                                              ; preds = %545
  %547 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_6EEEv(ptr noundef nonnull align 4 dereferenceable(4) %480)
          to label %548 unwind label %558

548:                                              ; preds = %546
  %549 = load i32, ptr %30, align 4, !tbaa !38
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %37, i32 noundef %549)
  %550 = load i32, ptr %37, align 4
  invoke void @_ZN11spirv_cross12CompilerGLSL9flush_phiENS_7TypedIDILNS_5TypesE6EEES3_(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 %547, i32 %550)
          to label %551 unwind label %558

551:                                              ; preds = %548
  invoke void @_ZN11spirv_cross12CompilerGLSL9end_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
          to label %552 unwind label %558

552:                                              ; preds = %551
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(280) %32) #8
  call void @llvm.lifetime.end.p0(i64 280, ptr nonnull %32) #8
  br label %597

553:                                              ; preds = %513
  %554 = landingpad { ptr, i32 }
          cleanup
  br label %557

555:                                              ; preds = %544
  %556 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #8
  br label %557

557:                                              ; preds = %555, %553
  %.pn553 = phi { ptr, i32 } [ %556, %555 ], [ %554, %553 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #8
  br label %560

558:                                              ; preds = %551, %548, %546, %545
  %559 = landingpad { ptr, i32 }
          cleanup
  br label %560

560:                                              ; preds = %527, %543, %558, %557
  %.pn556.pn.pn.pn = phi { ptr, i32 } [ %559, %558 ], [ %.pn553, %557 ], [ %.pn556.pn, %543 ], [ %528, %527 ]
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(280) %32) #8
  call void @llvm.lifetime.end.p0(i64 280, ptr nonnull %32) #8
  br label %606

561:                                              ; preds = %510
  call void @llvm.lifetime.start.p0(i64 280, ptr nonnull %38) #8
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEC2Ev(ptr noundef nonnull align 8 dereferenceable(280) %38) #8
  %562 = call noundef i64 @_ZNK11spirv_cross10VectorViewImE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %509) #8
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE7reserveEm(ptr noundef nonnull align 8 dereferenceable(280) %38, i64 noundef %562) #8
  %563 = call noundef ptr @_ZN11spirv_cross10VectorViewImE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %509) #8
  %564 = call noundef ptr @_ZN11spirv_cross10VectorViewImE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %509) #8
  %.not546726 = icmp eq ptr %563, %564
  br i1 %.not546726, label %._crit_edge730, label %.lr.ph729

._crit_edge730:                                   ; preds = %570, %561
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %42) #8
  invoke void @_ZN11spirv_cross5mergeERKNS_11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEEPKc(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %42, ptr noundef nonnull align 8 dereferenceable(280) %38, ptr noundef nonnull @.str.1641)
          to label %580 unwind label %589

.lr.ph729:                                        ; preds = %561, %570
  %.0488727 = phi ptr [ %571, %570 ], [ %563, %561 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %39) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %40) #8
  %565 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %333)
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %40, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %565, i1 noundef zeroext true)
          to label %566 unwind label %572

566:                                              ; preds = %.lr.ph729
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %41) #8
  %567 = load i64, ptr %.0488727, align 8, !tbaa !180
  %568 = load i32, ptr %481, align 4, !tbaa !181
  invoke void @"_ZZN11spirv_cross12CompilerGLSL16emit_block_chainERNS_9SPIRBlockEENK3$_1clB5cxx11Emjb"(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %41, ptr noundef nonnull align 1 dereferenceable(1) %25, i64 noundef %567, i32 noundef %568, i1 noundef zeroext %switch.selectcmp)
          to label %569 unwind label %574

569:                                              ; preds = %566
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA5_KcS6_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %39, ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef nonnull align 1 dereferenceable(5) @.str.1388, ptr noundef nonnull align 8 dereferenceable(32) %41)
          to label %570 unwind label %576

570:                                              ; preds = %569
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(280) %38, ptr noundef nonnull align 8 dereferenceable(32) %39) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #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
  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
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #8
  %571 = getelementptr inbounds i8, ptr %.0488727, i64 8
  %.not546 = icmp eq ptr %571, %564
  br i1 %.not546, label %._crit_edge730, label %.lr.ph729

572:                                              ; preds = %.lr.ph729
  %573 = landingpad { ptr, i32 }
          cleanup
  br label %579

574:                                              ; preds = %566
  %575 = landingpad { ptr, i32 }
          cleanup
  br label %578

576:                                              ; preds = %569
  %577 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #8
  br label %578

578:                                              ; preds = %576, %574
  %.pn549 = phi { ptr, i32 } [ %577, %576 ], [ %575, %574 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %41) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #8
  br label %579

579:                                              ; preds = %578, %572
  %.pn549.pn = phi { ptr, i32 } [ %.pn549, %578 ], [ %573, %572 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %40) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #8
  br label %596

580:                                              ; preds = %._crit_edge730
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA5_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(5) @.str.1624, ptr noundef nonnull align 8 dereferenceable(32) %42, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %581 unwind label %591

581:                                              ; preds = %580
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %42) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL11begin_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
          to label %582 unwind label %594

582:                                              ; preds = %581
  %583 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_6EEEv(ptr noundef nonnull align 4 dereferenceable(4) %480)
          to label %584 unwind label %594

584:                                              ; preds = %582
  %585 = load i32, ptr %30, align 4, !tbaa !38
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %43, i32 noundef %585)
  %586 = load i32, ptr %43, align 4
  invoke void @_ZN11spirv_cross12CompilerGLSL9flush_phiENS_7TypedIDILNS_5TypesE6EEES3_(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 %583, i32 %586)
          to label %587 unwind label %594

587:                                              ; preds = %584
  invoke void @_ZN11spirv_cross12CompilerGLSL9end_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
          to label %588 unwind label %594

588:                                              ; preds = %587
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(280) %38) #8
  call void @llvm.lifetime.end.p0(i64 280, ptr nonnull %38) #8
  br label %597

589:                                              ; preds = %._crit_edge730
  %590 = landingpad { ptr, i32 }
          cleanup
  br label %593

591:                                              ; preds = %580
  %592 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #8
  br label %593

593:                                              ; preds = %591, %589
  %.pn547 = phi { ptr, i32 } [ %592, %591 ], [ %590, %589 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %42) #8
  br label %596

594:                                              ; preds = %587, %584, %582, %581
  %595 = landingpad { ptr, i32 }
          cleanup
  br label %596

596:                                              ; preds = %594, %593, %579
  %.pn549.pn.pn = phi { ptr, i32 } [ %.pn549.pn, %579 ], [ %595, %594 ], [ %.pn547, %593 ]
  call void @_ZN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(280) %38) #8
  call void @llvm.lifetime.end.p0(i64 280, ptr nonnull %38) #8
  br label %606

597:                                              ; preds = %588, %552
  %598 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_6EEEv(ptr noundef nonnull align 4 dereferenceable(4) %480)
          to label %599 unwind label %604

599:                                              ; preds = %597
  %600 = load i32, ptr %30, align 4, !tbaa !38
  %601 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %600)
          to label %602 unwind label %604

602:                                              ; preds = %599
  %603 = getelementptr inbounds i8, ptr %601, i64 796
  store i32 %598, ptr %603, align 4, !tbaa !38
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %30) #8
  br label %607

604:                                              ; preds = %599, %597
  %605 = landingpad { ptr, i32 }
          cleanup
  br label %606

606:                                              ; preds = %518, %560, %596, %604, %516
  %.pn556.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %517, %516 ], [ %.pn556.pn.pn.pn, %560 ], [ %605, %604 ], [ %.pn549.pn.pn, %596 ], [ %519, %518 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %30) #8
  br label %786

607:                                              ; preds = %490, %500, %602
  %608 = add nuw i64 %.0485737, 1
  %609 = load i8, ptr %475, align 1, !tbaa !178, !range !47, !noundef !48
  %610 = trunc nuw i8 %609 to i1
  %611 = icmp ult i64 %608, %474
  %612 = select i1 %610, i1 %611, i1 false
  br i1 %612, label %483, label %._crit_edge740, !llvm.loop !182

613:                                              ; preds = %._crit_edge740
  %614 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %391)
  %615 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %393)
  %616 = icmp eq i32 %614, %615
  br i1 %616, label %643, label %.thread652

617:                                              ; preds = %._crit_edge740
  %618 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
  br i1 %618, label %.thread652, label %629

.thread652:                                       ; preds = %613, %617
  %619 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL12is_legacy_esEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
  br i1 %619, label %620, label %628

620:                                              ; preds = %.thread652
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %44) #8
  %621 = getelementptr inbounds i8, ptr %0, i64 9384
  %622 = load i32, ptr %621, align 8, !tbaa !183
  store i32 %622, ptr %44, align 4, !tbaa !38
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA18_KcRjRA15_S2_S5_S7_S5_RA4_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(18) @.str.1642, ptr noundef nonnull align 4 dereferenceable(4) %44, ptr noundef nonnull align 1 dereferenceable(15) @.str.1643, ptr noundef nonnull align 4 dereferenceable(4) %44, ptr noundef nonnull align 1 dereferenceable(15) @.str.1644, ptr noundef nonnull align 4 dereferenceable(4) %44, ptr noundef nonnull align 1 dereferenceable(4) @.str.1645)
          to label %623 unwind label %626

623:                                              ; preds = %620
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %44) #8
  br label %642

624:                                              ; preds = %642, %629, %628
  %625 = landingpad { ptr, i32 }
          cleanup
  br label %786

626:                                              ; preds = %620
  %627 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %44) #8
  br label %786

628:                                              ; preds = %.thread652
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA3_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(3) @.str.542)
          to label %642 unwind label %624

629:                                              ; preds = %617
  %630 = load ptr, ptr %0, align 8, !tbaa !55
  %631 = getelementptr inbounds i8, ptr %630, i64 448
  %632 = load ptr, ptr %631, align 8
  invoke void %632(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(976) %1)
          to label %633 unwind label %624

633:                                              ; preds = %629
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %45) #8
  %634 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %333)
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %45, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %634, i1 noundef zeroext true)
          to label %635 unwind label %637

635:                                              ; preds = %633
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA9_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(9) @.str.1646, ptr noundef nonnull align 8 dereferenceable(32) %45, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %636 unwind label %639

636:                                              ; preds = %635
  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
  br label %642

637:                                              ; preds = %633
  %638 = landingpad { ptr, i32 }
          cleanup
  br label %641

639:                                              ; preds = %635
  %640 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #8
  br label %641

641:                                              ; preds = %639, %637
  %.pn527 = phi { ptr, i32 } [ %640, %639 ], [ %638, %637 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %45) #8
  br label %786

642:                                              ; preds = %623, %628, %636
  invoke void @_ZN11spirv_cross12CompilerGLSL11begin_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
          to label %643 unwind label %624

643:                                              ; preds = %642, %613
  %644 = phi i1 [ false, %642 ], [ true, %613 ]
  %.not765 = icmp eq i64 %474, 0
  br i1 %.not765, label %._crit_edge749, label %.lr.ph748

.lr.ph748:                                        ; preds = %643
  %645 = getelementptr inbounds i8, ptr %335, i64 20
  %646 = getelementptr inbounds i8, ptr %0, i64 3272
  %647 = getelementptr inbounds i8, ptr %1, i64 8
  br label %650

._crit_edge749:                                   ; preds = %716, %643
  %648 = getelementptr inbounds i8, ptr %1, i64 8
  %649 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_6EEEv(ptr noundef nonnull align 4 dereferenceable(4) %648)
          to label %719 unwind label %738

650:                                              ; preds = %.lr.ph748, %716
  %.0489745 = phi i64 [ 0, %.lr.ph748 ], [ %717, %716 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %46) #8
  %651 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %15, i64 noundef %.0489745) #8
  %652 = load i32, ptr %651, align 4, !tbaa !38
  store i32 %652, ptr %46, align 4, !tbaa !38
  %653 = invoke noundef nonnull align 8 dereferenceable(88) ptr @_ZNSt13unordered_mapIjN11spirv_cross11SmallVectorImLm8EEESt4hashIjESt8equal_toIjESaISt4pairIKjS2_EEEixERS8_(ptr noundef nonnull align 8 dereferenceable(56) %14, ptr noundef nonnull align 4 dereferenceable(4) %46)
          to label %654 unwind label %660

654:                                              ; preds = %650
  %655 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewImE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %653) #8
  br i1 %655, label %656, label %663

656:                                              ; preds = %654
  br i1 %482, label %.loopexit, label %657

657:                                              ; preds = %656
  %658 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
  br i1 %658, label %659, label %662

659:                                              ; preds = %657
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA5_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(5) @.str.547)
          to label %.loopexit unwind label %660

660:                                              ; preds = %662, %659, %650
  %661 = landingpad { ptr, i32 }
          cleanup
  br label %718

662:                                              ; preds = %657
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA9_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(9) @.str.1647)
          to label %.loopexit unwind label %660

663:                                              ; preds = %654
  %664 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
  br i1 %664, label %665, label %676

665:                                              ; preds = %663
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %47) #8
  %.not540 = icmp eq i64 %.0489745, 0
  %666 = select i1 %.not540, ptr @.str.9, ptr @.str.1648
  store ptr %666, ptr %47, align 8, !tbaa !170
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %48) #8
  %667 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %333)
  %668 = load ptr, ptr %12, align 8, !tbaa !170
  invoke void @"_ZZN11spirv_cross12CompilerGLSL16emit_block_chainERNS_9SPIRBlockEENK3$_2clB5cxx11EjRKNS_11SmallVectorImLm8EEEPKc"(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %48, ptr noundef nonnull align 8 dereferenceable(8) %26, i32 noundef %667, ptr noundef nonnull align 8 dereferenceable(88) %653, ptr noundef %668)
          to label %669 unwind label %671

669:                                              ; preds = %665
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJPKcRA5_S2_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(8) %47, ptr noundef nonnull align 1 dereferenceable(5) @.str.1624, ptr noundef nonnull align 8 dereferenceable(32) %48, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %670 unwind label %673

670:                                              ; preds = %669
  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
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %47) #8
  br label %.loopexit

671:                                              ; preds = %665
  %672 = landingpad { ptr, i32 }
          cleanup
  br label %675

673:                                              ; preds = %669
  %674 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #8
  br label %675

675:                                              ; preds = %673, %671
  %.pn541 = phi { ptr, i32 } [ %674, %673 ], [ %672, %671 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %48) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %47) #8
  br label %718

676:                                              ; preds = %663
  %677 = call noundef ptr @_ZN11spirv_cross10VectorViewImE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %653) #8
  %678 = call noundef ptr @_ZN11spirv_cross10VectorViewImE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %653) #8
  %.not537741 = icmp eq ptr %677, %678
  br i1 %.not537741, label %.loopexit, label %.lr.ph744

.lr.ph744:                                        ; preds = %676, %682
  %.0490742 = phi ptr [ %683, %682 ], [ %677, %676 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %49) #8
  %679 = load i64, ptr %.0490742, align 8, !tbaa !180
  %680 = load i32, ptr %645, align 4, !tbaa !181
  invoke void @"_ZZN11spirv_cross12CompilerGLSL16emit_block_chainERNS_9SPIRBlockEENK3$_1clB5cxx11Emjb"(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %49, ptr noundef nonnull align 1 dereferenceable(1) %25, i64 noundef %679, i32 noundef %680, i1 noundef zeroext %switch.selectcmp)
          to label %681 unwind label %684

681:                                              ; preds = %.lr.ph744
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA6_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERPS2_RA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(6) @.str.1649, ptr noundef nonnull align 8 dereferenceable(32) %49, ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef nonnull align 1 dereferenceable(2) @.str.1650)
          to label %682 unwind label %686

682:                                              ; preds = %681
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %49) #8
  %683 = getelementptr inbounds i8, ptr %.0490742, i64 8
  %.not537 = icmp eq ptr %683, %678
  br i1 %.not537, label %.loopexit, label %.lr.ph744

684:                                              ; preds = %.lr.ph744
  %685 = landingpad { ptr, i32 }
          cleanup
  br label %688

686:                                              ; preds = %681
  %687 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #8
  br label %688

688:                                              ; preds = %686, %684
  %.pn538 = phi { ptr, i32 } [ %687, %686 ], [ %685, %684 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %49) #8
  br label %718

.loopexit:                                        ; preds = %682, %676, %670, %656, %662, %659
  %689 = load i32, ptr %46, align 4, !tbaa !38
  %690 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %689)
          to label %691 unwind label %704

691:                                              ; preds = %.loopexit
  %692 = load i8, ptr %475, align 1, !tbaa !178, !range !47, !noundef !48
  %693 = trunc nuw i8 %692 to i1
  br i1 %693, label %694, label %706

694:                                              ; preds = %691
  %695 = add nuw i64 %.0489745, 1
  %696 = icmp ult i64 %695, %474
  br i1 %696, label %697, label %706

697:                                              ; preds = %694
  %698 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewIjEixEm(ptr noundef nonnull align 8 dereferenceable(16) %15, i64 noundef %695) #8
  %699 = load i32, ptr %698, align 4, !tbaa !38
  %700 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %699)
          to label %701 unwind label %704

701:                                              ; preds = %697
  %702 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler26execution_is_direct_branchERKNS_9SPIRBlockES3_(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(976) %690, ptr noundef nonnull align 8 dereferenceable(976) %700)
          to label %703 unwind label %704

703:                                              ; preds = %701
  br i1 %702, label %707, label %706

704:                                              ; preds = %715, %711, %709, %708, %701, %697, %.loopexit
  %705 = landingpad { ptr, i32 }
          cleanup
  br label %718

706:                                              ; preds = %703, %694, %691
  br label %707

707:                                              ; preds = %703, %706
  %storemerge = phi i8 [ 0, %706 ], [ 1, %703 ]
  store i8 %storemerge, ptr %646, align 8, !tbaa !184
  br i1 %482, label %709, label %708

708:                                              ; preds = %707
  invoke void @_ZN11spirv_cross12CompilerGLSL11begin_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
          to label %709 unwind label %704

709:                                              ; preds = %708, %707
  %710 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_6EEEv(ptr noundef nonnull align 4 dereferenceable(4) %647)
          to label %711 unwind label %704

711:                                              ; preds = %709
  %712 = load i32, ptr %46, align 4, !tbaa !38
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %50, i32 noundef %712)
  %713 = load i32, ptr %50, align 4
  invoke void @_ZN11spirv_cross12CompilerGLSL6branchENS_7TypedIDILNS_5TypesE6EEES3_(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 %710, i32 %713)
          to label %714 unwind label %704

714:                                              ; preds = %711
  br i1 %482, label %716, label %715

715:                                              ; preds = %714
  invoke void @_ZN11spirv_cross12CompilerGLSL9end_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
          to label %716 unwind label %704

716:                                              ; preds = %715, %714
  store i8 0, ptr %646, align 8, !tbaa !184
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %46) #8
  %717 = add nuw i64 %.0489745, 1
  %exitcond775.not = icmp eq i64 %717, %474
  br i1 %exitcond775.not, label %._crit_edge749, label %650, !llvm.loop !185

718:                                              ; preds = %704, %688, %675, %660
  %.pn543 = phi { ptr, i32 } [ %705, %704 ], [ %661, %660 ], [ %.pn541, %675 ], [ %.pn538, %688 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %46) #8
  br label %786

719:                                              ; preds = %._crit_edge749
  %.sroa.065.0.copyload = load i32, ptr %393, align 8, !tbaa !38
  %720 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler18flush_phi_requiredENS_7TypedIDILNS_5TypesE6EEES3_(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %649, i32 %.sroa.065.0.copyload)
          to label %721 unwind label %738

721:                                              ; preds = %719
  %722 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %391)
  %723 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %393)
  %724 = icmp eq i32 %722, %723
  br i1 %724, label %727, label %725

725:                                              ; preds = %721
  %726 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewImE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %16) #8
  br label %727

727:                                              ; preds = %725, %721
  %.not610 = phi i1 [ false, %721 ], [ %726, %725 ]
  br i1 %644, label %.critedge612, label %728

728:                                              ; preds = %727
  %.not609 = xor i1 %720, true
  %brmerge = or i1 %.not610, %.not609
  br i1 %brmerge, label %729, label %731

729:                                              ; preds = %728
  %730 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewImE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %16) #8
  br i1 %730, label %.thread653, label %731

731:                                              ; preds = %728, %729
  %732 = call noundef ptr @_ZN11spirv_cross10VectorViewImE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %16) #8
  %733 = call noundef ptr @_ZN11spirv_cross10VectorViewImE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %16) #8
  %.not529750 = icmp eq ptr %732, %733
  br i1 %.not529750, label %._crit_edge754, label %.lr.ph753

.lr.ph753:                                        ; preds = %731
  %734 = getelementptr inbounds i8, ptr %335, i64 20
  br label %742

._crit_edge754:                                   ; preds = %746, %731
  %735 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %391)
  %736 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %393)
  %737 = icmp eq i32 %735, %736
  br i1 %737, label %753, label %757

738:                                              ; preds = %719, %._crit_edge749
  %739 = landingpad { ptr, i32 }
          cleanup
  br label %786

740:                                              ; preds = %784, %783, %782, %781, %777, %.critedge612, %775, %762, %761, %760, %758, %757, %756, %755
  %741 = landingpad { ptr, i32 }
          cleanup
  br label %786

742:                                              ; preds = %.lr.ph753, %746
  %.0491751 = phi ptr [ %732, %.lr.ph753 ], [ %747, %746 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %51) #8
  %743 = load i64, ptr %.0491751, align 8, !tbaa !180
  %744 = load i32, ptr %734, align 4, !tbaa !181
  invoke void @"_ZZN11spirv_cross12CompilerGLSL16emit_block_chainERNS_9SPIRBlockEENK3$_1clB5cxx11Emjb"(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %51, ptr noundef nonnull align 1 dereferenceable(1) %25, i64 noundef %743, i32 noundef %744, i1 noundef zeroext %switch.selectcmp)
          to label %745 unwind label %748

745:                                              ; preds = %742
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA6_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERPS2_RA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(6) @.str.1649, ptr noundef nonnull align 8 dereferenceable(32) %51, ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef nonnull align 1 dereferenceable(2) @.str.1650)
          to label %746 unwind label %750

746:                                              ; preds = %745
  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
  %747 = getelementptr inbounds i8, ptr %.0491751, i64 8
  %.not529 = icmp eq ptr %747, %733
  br i1 %.not529, label %._crit_edge754, label %742

748:                                              ; preds = %742
  %749 = landingpad { ptr, i32 }
          cleanup
  br label %752

750:                                              ; preds = %745
  %751 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #8
  br label %752

752:                                              ; preds = %750, %748
  %.pn530 = phi { ptr, i32 } [ %751, %750 ], [ %749, %748 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %51) #8
  br label %786

753:                                              ; preds = %._crit_edge754
  %754 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
  br i1 %754, label %755, label %756

755:                                              ; preds = %753
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA5_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(5) @.str.547)
          to label %757 unwind label %740

756:                                              ; preds = %753
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA9_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(9) @.str.1647)
          to label %757 unwind label %740

757:                                              ; preds = %755, %756, %._crit_edge754
  invoke void @_ZN11spirv_cross12CompilerGLSL11begin_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
          to label %758 unwind label %740

758:                                              ; preds = %757
  %759 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_6EEEv(ptr noundef nonnull align 4 dereferenceable(4) %648)
          to label %760 unwind label %740

760:                                              ; preds = %758
  %.sroa.055.0.copyload = load i32, ptr %393, align 8, !tbaa !38
  invoke void @_ZN11spirv_cross12CompilerGLSL9flush_phiENS_7TypedIDILNS_5TypesE6EEES3_(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 %759, i32 %.sroa.055.0.copyload)
          to label %761 unwind label %740

761:                                              ; preds = %760
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA7_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(7) @.str.1623)
          to label %762 unwind label %740

762:                                              ; preds = %761
  invoke void @_ZN11spirv_cross12CompilerGLSL9end_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
          to label %.thread653 unwind label %740

.thread653:                                       ; preds = %762, %729
  br i1 %482, label %765, label %763

763:                                              ; preds = %.thread653
  %764 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
  br i1 %764, label %765, label %775

765:                                              ; preds = %763, %.thread653
  %766 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL12is_legacy_esEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
  br i1 %766, label %775, label %767

767:                                              ; preds = %765
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %52) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %53) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %53) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %52, ptr noundef nonnull @.str.1651, ptr noundef nonnull align 1 dereferenceable(1) %53)
          to label %768 unwind label %770

768:                                              ; preds = %767
  invoke void @_ZN11spirv_cross12CompilerGLSL14end_scope_declERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %52)
          to label %769 unwind label %772

769:                                              ; preds = %768
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %52) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %53) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %53) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %52) #8
  br label %778

770:                                              ; preds = %767
  %771 = landingpad { ptr, i32 }
          cleanup
  br label %774

772:                                              ; preds = %768
  %773 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %52) #8
  br label %774

774:                                              ; preds = %772, %770
  %.pn532 = phi { ptr, i32 } [ %773, %772 ], [ %771, %770 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %53) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %53) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %52) #8
  br label %786

775:                                              ; preds = %765, %763
  invoke void @_ZN11spirv_cross12CompilerGLSL9end_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
          to label %778 unwind label %740

.critedge612:                                     ; preds = %727
  %776 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_6EEEv(ptr noundef nonnull align 4 dereferenceable(4) %648)
          to label %777 unwind label %740

777:                                              ; preds = %.critedge612
  %.sroa.053.0.copyload = load i32, ptr %393, align 8, !tbaa !38
  invoke void @_ZN11spirv_cross12CompilerGLSL9flush_phiENS_7TypedIDILNS_5TypesE6EEES3_(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 %776, i32 %.sroa.053.0.copyload)
          to label %778 unwind label %740

778:                                              ; preds = %777, %769, %775
  %779 = load i8, ptr %377, align 2, !tbaa !174, !range !47, !noundef !48
  %780 = trunc nuw i8 %779 to i1
  br i1 %780, label %781, label %785

781:                                              ; preds = %778
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA6_KcRNS_7TypedIDILNS_5TypesE0EEERA15_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(6) @.str.1652, ptr noundef nonnull align 4 dereferenceable(4) %648, ptr noundef nonnull align 1 dereferenceable(15) @.str.1653)
          to label %782 unwind label %740

782:                                              ; preds = %781
  invoke void @_ZN11spirv_cross12CompilerGLSL11begin_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
          to label %783 unwind label %740

783:                                              ; preds = %782
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA7_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(7) @.str.1623)
          to label %784 unwind label %740

784:                                              ; preds = %783
  invoke void @_ZN11spirv_cross12CompilerGLSL9end_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
          to label %785 unwind label %740

785:                                              ; preds = %784, %778
  call void @_ZN11spirv_cross11SmallVectorIPNS_9SPIRBlockELm8EE8pop_backEv(ptr noundef nonnull align 8 dereferenceable(88) %376) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %25) #8
  call void @_ZN11spirv_cross11SmallVectorImLm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(88) %16) #8
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %16) #8
  call void @_ZN11spirv_cross11SmallVectorIjLm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %15) #8
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %15) #8
  call void @_ZNSt13unordered_mapIjN11spirv_cross11SmallVectorImLm8EEESt4hashIjESt8equal_toIjESaISt4pairIKjS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %14) #8
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %14) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #8
  br label %961

786:                                              ; preds = %624, %626, %641, %718, %740, %752, %774, %738, %514, %606
  %.pn556.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn556.pn.pn.pn.pn.pn, %606 ], [ %515, %514 ], [ %.pn543, %718 ], [ %625, %624 ], [ %627, %626 ], [ %.pn527, %641 ], [ %739, %738 ], [ %741, %740 ], [ %.pn532, %774 ], [ %.pn530, %752 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %25) #8
  br label %787

787:                                              ; preds = %433, %471, %464, %462, %446, %410, %416, %786, %395
  %.pn572.pn = phi { ptr, i32 } [ %.pn556.pn.pn.pn.pn.pn.pn.pn, %786 ], [ %396, %395 ], [ %417, %416 ], [ %411, %410 ], [ %434, %433 ], [ %463, %462 ], [ %465, %464 ], [ %472, %471 ], [ %447, %446 ]
  call void @_ZN11spirv_cross11SmallVectorImLm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(88) %16) #8
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %16) #8
  call void @_ZN11spirv_cross11SmallVectorIjLm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %15) #8
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %15) #8
  call void @_ZNSt13unordered_mapIjN11spirv_cross11SmallVectorImLm8EEESt4hashIjESt8equal_toIjESaISt4pairIKjS2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %14) #8
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %14) #8
  br label %788

788:                                              ; preds = %787, %382
  %.pn572.pn.pn = phi { ptr, i32 } [ %.pn572.pn, %787 ], [ %383, %382 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #8
  br label %1114

789:                                              ; preds = %248
  %790 = getelementptr inbounds i8, ptr %0, i64 2040
  %791 = load ptr, ptr %790, align 8, !tbaa !186
  %792 = getelementptr inbounds i8, ptr %791, i64 672
  %793 = call noundef ptr @_ZN11spirv_cross10VectorViewISt8functionIFvvEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %792) #8
  %794 = call noundef ptr @_ZN11spirv_cross10VectorViewISt8functionIFvvEEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %792) #8
  %.not515712 = icmp eq ptr %793, %794
  br i1 %.not515712, label %._crit_edge716, label %.lr.ph715

._crit_edge716:                                   ; preds = %798, %789
  %795 = getelementptr inbounds i8, ptr %0, i64 8184
  %796 = load i8, ptr %795, align 8, !tbaa !187, !range !47, !noundef !48
  %797 = trunc nuw i8 %796 to i1
  br i1 %797, label %802, label %806

.lr.ph715:                                        ; preds = %789, %798
  %.0492713 = phi ptr [ %799, %798 ], [ %793, %789 ]
  invoke void @_ZNKSt8functionIFvvEEclEv(ptr noundef nonnull align 8 dereferenceable(32) %.0492713)
          to label %798 unwind label %800

798:                                              ; preds = %.lr.ph715
  %799 = getelementptr inbounds i8, ptr %.0492713, i64 32
  %.not515 = icmp eq ptr %799, %794
  br i1 %.not515, label %._crit_edge716, label %.lr.ph715

800:                                              ; preds = %.lr.ph715
  %801 = landingpad { ptr, i32 }
          cleanup
  br label %1114

802:                                              ; preds = %._crit_edge716
  %803 = load ptr, ptr %0, align 8, !tbaa !55
  %804 = getelementptr inbounds i8, ptr %803, i64 208
  %805 = load ptr, ptr %804, align 8
  invoke void %805(ptr noundef nonnull align 8 dereferenceable(9848) %0)
          to label %806 unwind label %257

806:                                              ; preds = %802, %._crit_edge716
  %807 = invoke noundef nonnull align 8 dereferenceable(356) ptr @_ZNK11spirv_cross8Compiler28get_cfg_for_current_functionEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
          to label %808 unwind label %836

808:                                              ; preds = %806
  %809 = getelementptr inbounds i8, ptr %1, i64 36
  %810 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %809)
  %.not516 = icmp eq i32 %810, 0
  br i1 %.not516, label %868, label %811

811:                                              ; preds = %808
  %812 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %809)
  %813 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %812)
          to label %814 unwind label %838

814:                                              ; preds = %811
  %815 = getelementptr inbounds i8, ptr %813, i64 32
  %816 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %815) #8
  br i1 %816, label %853, label %817

817:                                              ; preds = %814
  %818 = getelementptr inbounds i8, ptr %0, i64 8394
  %819 = load i8, ptr %818, align 2, !tbaa !188, !range !47, !noundef !48
  %820 = trunc nuw i8 %819 to i1
  br i1 %820, label %853, label %821

821:                                              ; preds = %817
  %822 = getelementptr inbounds i8, ptr %0, i64 40
  %823 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %809)
  %824 = zext i32 %823 to i64
  %825 = call noundef nonnull align 8 dereferenceable(21) ptr @_ZN11spirv_cross10VectorViewINS_7VariantEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %822, i64 noundef %824) #8
  %826 = call noundef i32 @_ZNK11spirv_cross7Variant8get_typeEv(ptr noundef nonnull align 8 dereferenceable(21) %825)
  %.not518 = icmp eq i32 %826, 12
  br i1 %.not518, label %840, label %827

827:                                              ; preds = %821
  %828 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %809)
  %829 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %809)
  %830 = invoke noundef i32 @_ZN11spirv_cross12CompilerGLSL38get_expression_effective_storage_classEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %829)
          to label %831 unwind label %838

831:                                              ; preds = %827
  %832 = load ptr, ptr %0, align 8, !tbaa !55
  %833 = getelementptr inbounds i8, ptr %832, i64 440
  %834 = load ptr, ptr %833, align 8
  %835 = invoke noundef zeroext i1 %834(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull @.str.1654, i32 noundef 0, i32 noundef %828, i32 noundef 7, i32 noundef %830)
          to label %840 unwind label %838

836:                                              ; preds = %880, %873, %868, %806
  %837 = landingpad { ptr, i32 }
          cleanup
  br label %1114

838:                                              ; preds = %852, %845, %840, %831, %827, %811
  %839 = landingpad { ptr, i32 }
          cleanup
  br label %1114

840:                                              ; preds = %831, %821
  %841 = load ptr, ptr %790, align 8, !tbaa !186
  %842 = getelementptr inbounds i8, ptr %841, i64 448
  %.sroa.042.0.copyload = load i32, ptr %842, align 8, !tbaa !38
  %843 = getelementptr inbounds i8, ptr %1, i64 8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %54) #8
  %844 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_6EEEv(ptr noundef nonnull align 4 dereferenceable(4) %843)
          to label %845 unwind label %838

845:                                              ; preds = %840
  %846 = invoke noundef zeroext i1 @_ZNK11spirv_cross3CFG41node_terminates_control_flow_in_sub_graphENS_7TypedIDILNS_5TypesE6EEES3_(ptr noundef nonnull align 8 dereferenceable(356) %807, i32 %.sroa.042.0.copyload, i32 %844)
          to label %847 unwind label %838

847:                                              ; preds = %845
  br i1 %846, label %848, label %.critedge3

848:                                              ; preds = %847
  %849 = getelementptr inbounds i8, ptr %1, i64 800
  %850 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %849)
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %54, i32 noundef -1)
  %851 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %54)
  %.not519 = icmp eq i32 %850, %851
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %54) #8
  br i1 %.not519, label %961, label %852

.critedge3:                                       ; preds = %847
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %54) #8
  br label %852

852:                                              ; preds = %.critedge3, %848
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA8_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(8) @.str.1655)
          to label %961 unwind label %838

853:                                              ; preds = %817, %814
  %854 = getelementptr inbounds i8, ptr %0, i64 40
  %855 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %809)
  %856 = zext i32 %855 to i64
  %857 = call noundef nonnull align 8 dereferenceable(21) ptr @_ZN11spirv_cross10VectorViewINS_7VariantEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %854, i64 noundef %856) #8
  %858 = call noundef i32 @_ZNK11spirv_cross7Variant8get_typeEv(ptr noundef nonnull align 8 dereferenceable(21) %857)
  %.not520 = icmp eq i32 %858, 12
  br i1 %.not520, label %961, label %859

859:                                              ; preds = %853
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %55) #8
  %860 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %809)
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(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 %860, i1 noundef zeroext true)
          to label %861 unwind label %863

861:                                              ; preds = %859
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA8_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(8) @.str.809, ptr noundef nonnull align 8 dereferenceable(32) %55, ptr noundef nonnull align 1 dereferenceable(2) @.str.298)
          to label %862 unwind label %865

862:                                              ; preds = %861
  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 %961

863:                                              ; preds = %859
  %864 = landingpad { ptr, i32 }
          cleanup
  br label %867

865:                                              ; preds = %861
  %866 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #8
  br label %867

867:                                              ; preds = %865, %863
  %.pn521 = phi { ptr, i32 } [ %866, %865 ], [ %864, %863 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %55) #8
  br label %1114

868:                                              ; preds = %808
  %869 = load ptr, ptr %790, align 8, !tbaa !186
  %870 = getelementptr inbounds i8, ptr %869, i64 448
  %.sroa.040.0.copyload = load i32, ptr %870, align 8, !tbaa !38
  %871 = getelementptr inbounds i8, ptr %1, i64 8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %56) #8
  %872 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_6EEEv(ptr noundef nonnull align 4 dereferenceable(4) %871)
          to label %873 unwind label %836

873:                                              ; preds = %868
  %874 = invoke noundef zeroext i1 @_ZNK11spirv_cross3CFG41node_terminates_control_flow_in_sub_graphENS_7TypedIDILNS_5TypesE6EEES3_(ptr noundef nonnull align 8 dereferenceable(356) %807, i32 %.sroa.040.0.copyload, i32 %872)
          to label %875 unwind label %836

875:                                              ; preds = %873
  br i1 %874, label %876, label %.critedge5

876:                                              ; preds = %875
  %877 = getelementptr inbounds i8, ptr %1, i64 800
  %878 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %877)
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %56, i32 noundef -1)
  %879 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %56)
  %.not517 = icmp eq i32 %878, %879
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %56) #8
  br i1 %.not517, label %961, label %880

.critedge5:                                       ; preds = %875
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %56) #8
  br label %880

880:                                              ; preds = %.critedge5, %876
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA8_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(8) @.str.1655)
          to label %961 unwind label %836

881:                                              ; preds = %248
  %882 = getelementptr inbounds i8, ptr %0, i64 8192
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %882, ptr noundef nonnull align 1 dereferenceable(2) @.str.298)
          to label %883 unwind label %257

883:                                              ; preds = %881
  %884 = getelementptr inbounds i8, ptr %1, i64 36
  %885 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %884)
  %.not512 = icmp eq i32 %885, 0
  br i1 %.not512, label %961, label %886

886:                                              ; preds = %883
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %57) #8
  %887 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %884)
  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 %887, i1 noundef zeroext true)
          to label %888 unwind label %890

888:                                              ; preds = %886
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA8_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(8) @.str.809, ptr noundef nonnull align 8 dereferenceable(32) %57, ptr noundef nonnull align 1 dereferenceable(2) @.str.298)
          to label %889 unwind label %892

889:                                              ; preds = %888
  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
  br label %961

890:                                              ; preds = %886
  %891 = landingpad { ptr, i32 }
          cleanup
  br label %894

892:                                              ; preds = %888
  %893 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #8
  br label %894

894:                                              ; preds = %892, %890
  %.pn513 = phi { ptr, i32 } [ %893, %892 ], [ %891, %890 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %57) #8
  br label %1114

895:                                              ; preds = %248
  %896 = invoke noundef nonnull align 8 dereferenceable(356) ptr @_ZNK11spirv_cross8Compiler28get_cfg_for_current_functionEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
          to label %897 unwind label %922

897:                                              ; preds = %895
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %58) #8
  %898 = getelementptr inbounds i8, ptr %1, i64 8
  %899 = load i32, ptr %898, align 8, !tbaa !38
  store i32 %899, ptr %58, align 4, !tbaa !38
  %900 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %58)
  %.not504708 = icmp eq i32 %900, 0
  br i1 %.not504708, label %.critedge666, label %.lr.ph710

.lr.ph710:                                        ; preds = %897, %941
  %901 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %58)
  %902 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %901)
          to label %903 unwind label %926

903:                                              ; preds = %.lr.ph710
  %904 = getelementptr inbounds i8, ptr %902, i64 12
  %905 = load i32, ptr %904, align 4, !tbaa !58
  %906 = icmp eq i32 %905, 3
  %907 = getelementptr inbounds i8, ptr %902, i64 16
  %908 = load i32, ptr %907, align 8
  %909 = icmp eq i32 %908, 1
  %or.cond = select i1 %906, i1 true, i1 %909
  br i1 %or.cond, label %910, label %933

910:                                              ; preds = %903
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %59) #8
  %.v = select i1 %909, i64 28, i64 24
  %911 = getelementptr inbounds i8, ptr %902, i64 %.v
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2ILS1_6EEERKNS0_IXT_EEE(ptr noundef nonnull align 4 dereferenceable(4) %59, ptr noundef nonnull align 4 dereferenceable(4) %911)
          to label %912 unwind label %928

912:                                              ; preds = %910
  %913 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %59)
  %.not505 = icmp eq i32 %913, 0
  br i1 %.not505, label %.thread654, label %914

914:                                              ; preds = %912
  %915 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %59)
  %916 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %898)
  %917 = invoke noundef i32 @_ZNK11spirv_cross3CFG21find_common_dominatorEjj(ptr noundef nonnull align 8 dereferenceable(356) %896, i32 noundef %915, i32 noundef %916)
          to label %918 unwind label %930

918:                                              ; preds = %914
  %919 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %59)
  %920 = icmp eq i32 %917, %919
  br i1 %920, label %.thread658, label %.thread654

.thread658:                                       ; preds = %918
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %59) #8
  br label %933

.thread654:                                       ; preds = %912, %918
  %921 = getelementptr inbounds i8, ptr %902, i64 12
  %.ph.in.in = load i32, ptr %921, align 4
  %.ph.in = icmp eq i32 %.ph.in.in, 3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %59) #8
  br i1 %.ph.in, label %946, label %.critedge666

922:                                              ; preds = %895
  %923 = landingpad { ptr, i32 }
          cleanup
  br label %1114

924:                                              ; preds = %946
  %925 = landingpad { ptr, i32 }
          cleanup
  br label %947

926:                                              ; preds = %933, %.lr.ph710
  %927 = landingpad { ptr, i32 }
          cleanup
  br label %947

928:                                              ; preds = %910
  %929 = landingpad { ptr, i32 }
          cleanup
  br label %932

930:                                              ; preds = %914
  %931 = landingpad { ptr, i32 }
          cleanup
  br label %932

932:                                              ; preds = %930, %928
  %.pn = phi { ptr, i32 } [ %931, %930 ], [ %929, %928 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %59) #8
  br label %947

933:                                              ; preds = %.thread658, %903
  %934 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %58)
  %935 = invoke noundef nonnull align 8 dereferenceable(56) ptr @_ZNK11spirv_cross3CFG19get_preceding_edgesEj(ptr noundef nonnull align 8 dereferenceable(356) %896, i32 noundef %934)
          to label %936 unwind label %926

936:                                              ; preds = %933
  %937 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %935) #8
  br i1 %937, label %.critedge666, label %938

938:                                              ; preds = %936
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %60) #8
  %939 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %58)
  %940 = invoke noundef i32 @_ZNK11spirv_cross3CFG23get_immediate_dominatorEj(ptr noundef nonnull align 8 dereferenceable(356) %896, i32 noundef %939)
          to label %941 unwind label %944

941:                                              ; preds = %938
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %60, i32 noundef %940)
  %942 = load i32, ptr %60, align 4, !tbaa !38
  store i32 %942, ptr %58, align 4, !tbaa !38
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %60) #8
  %943 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %58)
  %.not504 = icmp eq i32 %943, 0
  br i1 %.not504, label %.critedge666, label %.lr.ph710

944:                                              ; preds = %938
  %945 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %60) #8
  br label %947

946:                                              ; preds = %.thread654
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA33_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(33) @.str.1656)
          to label %.critedge666 unwind label %924

.critedge666:                                     ; preds = %936, %941, %897, %946, %.thread654
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %58) #8
  br label %.thread776

947:                                              ; preds = %926, %932, %944, %924
  %.pn509 = phi { ptr, i32 } [ %925, %924 ], [ %945, %944 ], [ %927, %926 ], [ %.pn, %932 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %58) #8
  br label %1114

948:                                              ; preds = %248
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA23_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(23) @.str.1657)
          to label %961 unwind label %257

949:                                              ; preds = %248
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA17_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(17) @.str.1658)
          to label %961 unwind label %257

950:                                              ; preds = %248
  %951 = load ptr, ptr %0, align 8, !tbaa !55
  %952 = getelementptr inbounds i8, ptr %951, i64 352
  %953 = load ptr, ptr %952, align 8
  invoke void %953(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(976) %1)
          to label %961 unwind label %257

954:                                              ; preds = %248
  %955 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %955, ptr noundef nonnull @.str.1659)
          to label %956 unwind label %957

956:                                              ; preds = %954
  invoke void @__cxa_throw(ptr nonnull %955, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #10
          to label %1116 unwind label %257

957:                                              ; preds = %954
  %958 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %955) #8
  br label %1114

.thread776:                                       ; preds = %.invoke787, %.critedge666, %259
  %959 = getelementptr inbounds i8, ptr %1, i64 24
  %960 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %959)
  br label %1008

961:                                              ; preds = %.invoke, %880, %876, %853, %862, %848, %852, %950, %949, %948, %883, %889, %288, %327, %313, %266, %785
  %962 = getelementptr inbounds i8, ptr %1, i64 24
  %963 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %962)
  %.not583 = icmp eq i32 %963, 0
  br i1 %.not583, label %1008, label %964

964:                                              ; preds = %961
  %965 = load i32, ptr %68, align 8, !tbaa !5
  %.not584 = icmp eq i32 %965, 2
  br i1 %.not584, label %977, label %966

966:                                              ; preds = %964
  %967 = getelementptr inbounds i8, ptr %1, i64 8
  %968 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_6EEEv(ptr noundef nonnull align 4 dereferenceable(4) %967)
          to label %969 unwind label %257

969:                                              ; preds = %966
  %.sroa.026.0.copyload = load i32, ptr %962, align 8, !tbaa !38
  invoke void @_ZN11spirv_cross12CompilerGLSL9flush_phiENS_7TypedIDILNS_5TypesE6EEES3_(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 %968, i32 %.sroa.026.0.copyload)
          to label %970 unwind label %257

970:                                              ; preds = %969
  %971 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %962)
  %972 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %971)
          to label %973 unwind label %257

973:                                              ; preds = %970
  %974 = getelementptr inbounds i8, ptr %1, i64 920
  %975 = getelementptr inbounds i8, ptr %972, i64 920
  %976 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(56) %975, ptr noundef nonnull align 8 dereferenceable(56) %974) #8
  br label %977

977:                                              ; preds = %973, %964
  %978 = getelementptr inbounds i8, ptr %0, i64 3272
  %979 = load i8, ptr %978, align 8, !tbaa !184, !range !47, !noundef !48
  %980 = trunc nuw i8 %979 to i1
  br i1 %980, label %1008, label %981

981:                                              ; preds = %977
  %982 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %962)
  %983 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler13is_loop_breakEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %982)
  br i1 %983, label %984, label %989

984:                                              ; preds = %981
  %985 = load i32, ptr %68, align 8, !tbaa !5
  %986 = icmp eq i32 %985, 2
  br i1 %986, label %988, label %987

987:                                              ; preds = %984
  call void @__assert_fail(ptr noundef nonnull @.str.1660, ptr noundef nonnull @.str.11, i32 noundef 17945, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL16emit_block_chainERNS_9SPIRBlockE) #9
  unreachable

988:                                              ; preds = %984
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJRA7_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(7) @.str.1623)
          to label %1008 unwind label %257

989:                                              ; preds = %981
  %990 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %962)
  %991 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler11is_continueEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %990)
  br i1 %991, label %992, label %1000

992:                                              ; preds = %989
  %993 = load i32, ptr %68, align 8, !tbaa !5
  %994 = icmp eq i32 %993, 2
  br i1 %994, label %996, label %995

995:                                              ; preds = %992
  call void @__assert_fail(ptr noundef nonnull @.str.1660, ptr noundef nonnull @.str.11, i32 noundef 17950, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL16emit_block_chainERNS_9SPIRBlockE) #9
  unreachable

996:                                              ; preds = %992
  %997 = getelementptr inbounds i8, ptr %1, i64 8
  %998 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_6EEEv(ptr noundef nonnull align 4 dereferenceable(4) %997)
          to label %999 unwind label %257

999:                                              ; preds = %996
  %.sroa.024.0.copyload = load i32, ptr %962, align 8, !tbaa !38
  invoke void @_ZN11spirv_cross12CompilerGLSL18branch_to_continueENS_7TypedIDILNS_5TypesE6EEES3_(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 %998, i32 %.sroa.024.0.copyload)
          to label %1008 unwind label %257

1000:                                             ; preds = %989
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %61) #8
  %1001 = getelementptr inbounds i8, ptr %1, i64 8
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2ERKNS0_ILS1_0EEE(ptr noundef nonnull align 4 dereferenceable(4) %61, ptr noundef nonnull align 4 dereferenceable(4) %1001)
  %1002 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %61)
  %1003 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %962)
  %.not585 = icmp eq i32 %1002, %1003
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %61) #8
  br i1 %.not585, label %1008, label %1004

1004:                                             ; preds = %1000
  %1005 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %962)
  %1006 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1005)
          to label %1007 unwind label %257

1007:                                             ; preds = %1004
  invoke void @_ZN11spirv_cross12CompilerGLSL16emit_block_chainERNS_9SPIRBlockE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(976) %1006)
          to label %1008 unwind label %257

1008:                                             ; preds = %.thread776, %961, %977, %999, %1007, %1000, %988
  %1009 = load i32, ptr %68, align 8, !tbaa !5
  %1010 = icmp eq i32 %1009, 1
  br i1 %1010, label %1011, label %1086

1011:                                             ; preds = %1008
  %1012 = icmp eq i32 %.1467623, 3
  br i1 %1012, label %1013, label %1073

1013:                                             ; preds = %1011
  %1014 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %121)
  %1015 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1014)
          to label %1016 unwind label %1038

1016:                                             ; preds = %1013
  %1017 = getelementptr inbounds i8, ptr %1015, i64 44
  %1018 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1017)
  %1019 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1018)
          to label %1020 unwind label %1040

1020:                                             ; preds = %1016
  %1021 = getelementptr inbounds i8, ptr %1015, i64 800
  %1022 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1021)
  %1023 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1022)
          to label %1024 unwind label %1040

1024:                                             ; preds = %1020
  %1025 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler17execution_is_noopERKNS_9SPIRBlockES3_(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(976) %1019, ptr noundef nonnull align 8 dereferenceable(976) %1023)
          to label %1026 unwind label %1040

1026:                                             ; preds = %1024
  %1027 = getelementptr inbounds i8, ptr %0, i64 9384
  %1028 = load i32, ptr %1027, align 8, !tbaa !183
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %62) #8
  %1029 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %121)
  %1030 = xor i1 %1025, true
  invoke void @_ZN11spirv_cross12CompilerGLSL19emit_continue_blockB5cxx11Ejbb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %62, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1029, i1 noundef zeroext %1025, i1 noundef zeroext %1030)
          to label %1031 unwind label %1042

1031:                                             ; preds = %1026
  %1032 = load i32, ptr %1027, align 8, !tbaa !183
  %.not586 = icmp eq i32 %1032, %1028
  br i1 %.not586, label %1046, label %1033

1033:                                             ; preds = %1031
  %1034 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %121)
  %1035 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1034)
          to label %1036 unwind label %1044

1036:                                             ; preds = %1033
  %1037 = getelementptr inbounds i8, ptr %1035, i64 793
  store i8 1, ptr %1037, align 1, !tbaa !49
  invoke void @_ZN11spirv_cross8Compiler15force_recompileEv(ptr noundef nonnull align 8 dereferenceable(3176) %0)
          to label %1046 unwind label %1044

1038:                                             ; preds = %1013
  %1039 = landingpad { ptr, i32 }
          cleanup
  br label %1114

1040:                                             ; preds = %1024, %1020, %1016
  %1041 = landingpad { ptr, i32 }
          cleanup
  br label %1114

1042:                                             ; preds = %1026
  %1043 = landingpad { ptr, i32 }
          cleanup
  br label %1072

1044:                                             ; preds = %1036, %1033
  %1045 = landingpad { ptr, i32 }
          cleanup
  br label %1071

1046:                                             ; preds = %1036, %1031
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %63) #8
  %1047 = getelementptr inbounds i8, ptr %1015, i64 40
  %1048 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1047)
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %63, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1048, i1 noundef zeroext true)
          to label %1049 unwind label %1054

1049:                                             ; preds = %1046
  br i1 %1025, label %1061, label %1050

1050:                                             ; preds = %1049
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %64) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %65) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL18enclose_expressionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %65, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %63)
          to label %1051 unwind label %1056

1051:                                             ; preds = %1050
  invoke void @_ZN11spirv_cross4joinIJRA2_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %64, ptr noundef nonnull align 1 dereferenceable(2) @.str.968, ptr noundef nonnull align 8 dereferenceable(32) %65)
          to label %1052 unwind label %1058

1052:                                             ; preds = %1051
  %1053 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %63, ptr noundef nonnull align 8 dereferenceable(32) %64) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %65) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %64) #8
  br label %1061

1054:                                             ; preds = %1046
  %1055 = landingpad { ptr, i32 }
          cleanup
  br label %1070

1056:                                             ; preds = %1050
  %1057 = landingpad { ptr, i32 }
          cleanup
  br label %1060

1058:                                             ; preds = %1051
  %1059 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #8
  br label %1060

1060:                                             ; preds = %1058, %1056
  %.pn587 = phi { ptr, i32 } [ %1059, %1058 ], [ %1057, %1056 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %65) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %64) #8
  br label %1069

1061:                                             ; preds = %1052, %1049
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %66) #8
  invoke void @_ZN11spirv_cross4joinIJRA8_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %66, ptr noundef nonnull align 1 dereferenceable(8) @.str.1631, ptr noundef nonnull align 8 dereferenceable(32) %63, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %1062 unwind label %1064

1062:                                             ; preds = %1061
  invoke void @_ZN11spirv_cross12CompilerGLSL14end_scope_declERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %66)
          to label %1063 unwind label %1066

1063:                                             ; preds = %1062
  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 @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %63) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %62) #8
  br label %1074

1064:                                             ; preds = %1061
  %1065 = landingpad { ptr, i32 }
          cleanup
  br label %1068

1066:                                             ; preds = %1062
  %1067 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #8
  br label %1068

1068:                                             ; preds = %1066, %1064
  %.pn589 = phi { ptr, i32 } [ %1067, %1066 ], [ %1065, %1064 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %66) #8
  br label %1069

1069:                                             ; preds = %1068, %1060
  %.pn589.pn = phi { ptr, i32 } [ %.pn589, %1068 ], [ %.pn587, %1060 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #8
  br label %1070

1070:                                             ; preds = %1069, %1054
  %.pn589.pn.pn = phi { ptr, i32 } [ %.pn589.pn, %1069 ], [ %1055, %1054 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %63) #8
  br label %1071

1071:                                             ; preds = %1070, %1044
  %.pn589.pn.pn.pn = phi { ptr, i32 } [ %.pn589.pn.pn, %1070 ], [ %1045, %1044 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #8
  br label %1072

1072:                                             ; preds = %1071, %1042
  %.pn589.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn589.pn.pn.pn, %1071 ], [ %1043, %1042 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %62) #8
  br label %1114

1073:                                             ; preds = %1011
  invoke void @_ZN11spirv_cross12CompilerGLSL9end_scopeEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
          to label %1074 unwind label %257

1074:                                             ; preds = %1073, %1063
  call void @_ZN11spirv_cross10ValueSaverIjE7releaseEv(ptr noundef nonnull align 8 dereferenceable(12) %3)
  %1075 = getelementptr inbounds i8, ptr %1, i64 28
  %1076 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1075)
  %1077 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler11is_continueEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1076)
  br i1 %1077, label %1078, label %1082

1078:                                             ; preds = %1074
  %1079 = getelementptr inbounds i8, ptr %1, i64 8
  %1080 = invoke i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvNS0_IXT_EEEILS1_6EEEv(ptr noundef nonnull align 4 dereferenceable(4) %1079)
          to label %1081 unwind label %257

1081:                                             ; preds = %1078
  %.sroa.0.0.copyload = load i32, ptr %1075, align 4, !tbaa !38
  invoke void @_ZN11spirv_cross12CompilerGLSL18branch_to_continueENS_7TypedIDILNS_5TypesE6EEES3_(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 %1080, i32 %.sroa.0.0.copyload)
          to label %1086 unwind label %257

1082:                                             ; preds = %1074
  %1083 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1075)
  %1084 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1083)
          to label %1085 unwind label %257

1085:                                             ; preds = %1082
  invoke void @_ZN11spirv_cross12CompilerGLSL16emit_block_chainERNS_9SPIRBlockE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(976) %1084)
          to label %1086 unwind label %257

1086:                                             ; preds = %1081, %1085, %1008
  %1087 = getelementptr inbounds i8, ptr %1, i64 920
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EE5clearEv(ptr noundef nonnull align 8 dereferenceable(56) %1087) #8
  %1088 = call noundef i64 @_ZNK11spirv_cross10VectorViewIbE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %10) #8
  %1089 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %75) #8
  %1090 = icmp eq i64 %1088, %1089
  br i1 %1090, label %.preheader, label %1092

.preheader:                                       ; preds = %1086
  %1091 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %75) #8
  %.not766 = icmp eq i64 %1091, 0
  br i1 %.not766, label %._crit_edge757, label %.lr.ph756

1092:                                             ; preds = %1086
  call void @__assert_fail(ptr noundef nonnull @.str.1661, ptr noundef nonnull @.str.11, i32 noundef 18004, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL16emit_block_chainERNS_9SPIRBlockE) #9
  unreachable

._crit_edge757:                                   ; preds = %1100, %.preheader
  %1093 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %135) #8
  %1094 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %135) #8
  %.not597758 = icmp eq ptr %1093, %1094
  br i1 %.not597758, label %._crit_edge762, label %.lr.ph761

.lr.ph756:                                        ; preds = %.preheader, %1100
  %.0407755 = phi i64 [ %1102, %1100 ], [ 0, %.preheader ]
  %1095 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %75, i64 noundef %.0407755) #8
  %1096 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1095)
  %1097 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZN11spirv_cross10VectorViewIbEixEm(ptr noundef nonnull align 8 dereferenceable(16) %10, i64 noundef %.0407755) #8
  %1098 = load i8, ptr %1097, align 1, !tbaa !52, !range !47, !noundef !48
  %1099 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1096)
          to label %1100 unwind label %1105

1100:                                             ; preds = %.lr.ph756
  %1101 = getelementptr inbounds i8, ptr %1099, i64 152
  store i8 %1098, ptr %1101, align 8, !tbaa !51
  %1102 = add nuw i64 %.0407755, 1
  %1103 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %75) #8
  %1104 = icmp ult i64 %1102, %1103
  br i1 %1104, label %.lr.ph756, label %._crit_edge757, !llvm.loop !189

1105:                                             ; preds = %.lr.ph756
  %1106 = landingpad { ptr, i32 }
          cleanup
  br label %1114

._crit_edge762:                                   ; preds = %1109, %._crit_edge757
  call void @_ZN11spirv_cross11SmallVectorIbLm64EED2Ev(ptr noundef nonnull align 8 dereferenceable(88) %10) #8
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %10) #8
  call void @_ZN11spirv_cross10ValueSaverIjED2Ev(ptr noundef nonnull align 8 dereferenceable(12) %3) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #8
  ret void

.lr.ph761:                                        ; preds = %._crit_edge757, %1109
  %.0404759 = phi ptr [ %1111, %1109 ], [ %1093, %._crit_edge757 ]
  %1107 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %.0404759)
  %1108 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1107)
          to label %1109 unwind label %1112

1109:                                             ; preds = %.lr.ph761
  %1110 = getelementptr inbounds i8, ptr %1108, i64 165
  store i8 0, ptr %1110, align 1, !tbaa !50
  %1111 = getelementptr inbounds i8, ptr %.0404759, i64 4
  %.not597 = icmp eq ptr %1111, %1094
  br i1 %.not597, label %._crit_edge762, label %.lr.ph761

1112:                                             ; preds = %.lr.ph761
  %1113 = landingpad { ptr, i32 }
          cleanup
  br label %1114

1114:                                             ; preds = %257, %800, %894, %957, %1105, %1112, %291, %289, %316, %314, %346, %348, %358, %788, %344, %838, %867, %836, %947, %922, %1040, %1072, %1038, %246, %179, %160
  %.pn600 = phi { ptr, i32 } [ %161, %160 ], [ %180, %179 ], [ %247, %246 ], [ %258, %257 ], [ %958, %957 ], [ %1106, %1105 ], [ %1113, %1112 ], [ %.pn513, %894 ], [ %801, %800 ], [ %292, %291 ], [ %290, %289 ], [ %317, %316 ], [ %315, %314 ], [ %345, %344 ], [ %349, %348 ], [ %347, %346 ], [ %.pn572.pn.pn, %788 ], [ %359, %358 ], [ %837, %836 ], [ %.pn521, %867 ], [ %839, %838 ], [ %.pn509, %947 ], [ %923, %922 ], [ %1039, %1038 ], [ %.pn589.pn.pn.pn.pn, %1072 ], [ %1041, %1040 ]
  call void @_ZN11spirv_cross11SmallVectorIbLm64EED2Ev(ptr noundef nonnull align 8 dereferenceable(88) %10) #8
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %10) #8
  br label %1115

1115:                                             ; preds = %132, %147, %1114, %119, %72
  %.pn604.pn.pn = phi { ptr, i32 } [ %.pn604.pn, %119 ], [ %73, %72 ], [ %148, %147 ], [ %.pn600, %1114 ], [ %133, %132 ]
  call void @_ZN11spirv_cross10ValueSaverIjED2Ev(ptr noundef nonnull align 8 dereferenceable(12) %3) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #8
  resume { ptr, i32 } %.pn604.pn.pn

1116:                                             ; preds = %956, %461
  unreachable
}

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

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

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

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

declare noundef nonnull align 8 dereferenceable(356) ptr @_ZNK11spirv_cross8Compiler28get_cfg_for_current_functionEv(ptr noundef nonnull align 8 dereferenceable(3176)) local_unnamed_addr #5

declare noundef zeroext i1 @_ZNK11spirv_cross3CFG41node_terminates_control_flow_in_sub_graphENS_7TypedIDILNS_5TypesE6EEES3_(ptr noundef nonnull align 8 dereferenceable(356), i32, i32) local_unnamed_addr #5

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRA5_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 1 dereferenceable(5), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #7 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL19emit_continue_blockB5cxx11Ejbb(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, i1 noundef zeroext) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL28emit_while_loop_initializersERKNS_9SPIRBlockE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(976)) local_unnamed_addr #2 align 2

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

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

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

declare noundef i32 @_ZNK11spirv_cross8Compiler19continue_block_typeERKNS_9SPIRBlockE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(976)) local_unnamed_addr #5

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL26flush_undeclared_variablesERNS_9SPIRBlockE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(976)) local_unnamed_addr #2 align 2

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler17execution_is_noopERKNS_9SPIRBlockES3_(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(976), ptr noundef nonnull align 8 dereferenceable(976)) local_unnamed_addr #5

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL24emit_hoisted_temporariesERNS_11SmallVectorISt4pairINS_7TypedIDILNS_5TypesE1EEENS3_ILS4_0EEEELm8EEE(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(88)) local_unnamed_addr #2 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross10ValueSaverIjEC2ERj(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 4 dereferenceable(4)) unnamed_addr #4 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef ptr @"_ZSt7find_ifIPSt4pairIN11spirv_cross7TypedIDILNS1_5TypesE1EEENS2_ILS3_0EEEEZNS1_12CompilerGLSL16emit_block_chainERNS1_9SPIRBlockEE3$_0ET_SC_SC_T0_"(ptr noundef, ptr noundef, ptr) local_unnamed_addr #7

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross11SmallVectorIbLm64EEC2Em(ptr noundef nonnull align 8 dereferenceable(88), i64 noundef) unnamed_addr #4 align 2

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRA3_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 1 dereferenceable(3)) local_unnamed_addr #7 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRA9_KcEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 1 dereferenceable(9)) local_unnamed_addr #7 align 2

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross11SmallVectorImLm8EEC2Ev(ptr noundef nonnull align 8 dereferenceable(88)) unnamed_addr #4 align 2

declare noundef nonnull align 8 dereferenceable(152) ptr @_ZNK11spirv_cross8Compiler13get_case_listERKNS_9SPIRBlockE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(976)) local_unnamed_addr #5

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

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

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

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

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

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

declare noundef zeroext i1 @_ZNK11spirv_cross8Compiler26execution_is_direct_branchERKNS_9SPIRBlockES3_(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(976), ptr noundef nonnull align 8 dereferenceable(976)) local_unnamed_addr #5

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(88) ptr @_ZN11spirv_cross11SmallVectorImLm8EEaSEOS1_(ptr noundef nonnull align 8 dereferenceable(88), ptr noundef nonnull align 8 dereferenceable(88)) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross11SmallVectorImLm8EED2Ev(ptr noundef nonnull align 8 dereferenceable(88)) unnamed_addr #4 align 2

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @"_ZZN11spirv_cross12CompilerGLSL16emit_block_chainERNS_9SPIRBlockEENK3$_1clB5cxx11Emjb"(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 1 dereferenceable(1), i64 noundef, i32 noundef, i1 noundef zeroext) local_unnamed_addr #7 align 2

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRA18_KcRjRA15_S2_S5_S7_S5_RA4_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 1 dereferenceable(18), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(15), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(15), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(4)) local_unnamed_addr #7 align 2

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @"_ZZN11spirv_cross12CompilerGLSL16emit_block_chainERNS_9SPIRBlockEENK3$_2clB5cxx11EjRKNS_11SmallVectorImLm8EEEPKc"(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(8), i32 noundef, ptr noundef nonnull align 8 dereferenceable(88), ptr noundef) local_unnamed_addr #7 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRA6_KcRNS_7TypedIDILNS_5TypesE0EEERA15_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 1 dereferenceable(6), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(15)) local_unnamed_addr #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross11SmallVectorIPNS_9SPIRBlockELm8EE8pop_backEv(ptr noundef nonnull align 8 dereferenceable(88)) local_unnamed_addr #4 align 2

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL9statementIJRA8_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S2_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 1 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #7 align 2

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

declare noundef i32 @_ZNK11spirv_cross3CFG21find_common_dominatorEjj(ptr noundef nonnull align 8 dereferenceable(356), i32 noundef, i32 noundef) local_unnamed_addr #5

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross10ValueSaverIjE7releaseEv(ptr noundef nonnull align 8 dereferenceable(12)) local_unnamed_addr #4 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross11SmallVectorIbLm64EED2Ev(ptr noundef nonnull align 8 dereferenceable(88)) unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross10ValueSaverIjED2Ev(ptr noundef nonnull align 8 dereferenceable(12)) unnamed_addr #4 align 2

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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 #5 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { 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 #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, !13, i64 16}
!6 = !{!"_ZTSN11spirv_cross9SPIRBlockE", !7, i64 0, !12, i64 12, !13, i64 16, !14, i64 20, !15, i64 24, !15, i64 28, !15, i64 32, !8, i64 36, !8, i64 40, !15, i64 44, !15, i64 48, !15, i64 52, !16, i64 56, !17, i64 72, !22, i64 192, !25, i64 312, !25, i64 400, !28, i64 488, !28, i64 640, !31, i64 792, !31, i64 793, !31, i64 794, !15, i64 796, !15, i64 800, !32, i64 808, !32, i64 864, !35, i64 920}
!7 = !{!"_ZTSN11spirv_cross8IVariantE", !8, i64 8}
!8 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !9, i64 0}
!9 = !{!"int", !10, i64 0}
!10 = !{!"omnipotent char", !11, i64 0}
!11 = !{!"Simple C++ TBAA"}
!12 = !{!"_ZTSN11spirv_cross9SPIRBlock10TerminatorE", !10, i64 0}
!13 = !{!"_ZTSN11spirv_cross9SPIRBlock5MergeE", !10, i64 0}
!14 = !{!"_ZTSN11spirv_cross9SPIRBlock5HintsE", !10, i64 0}
!15 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE6EEE", !9, i64 0}
!16 = !{!"_ZTSN11spirv_cross9SPIRBlockUt1_E", !10, i64 0, !8, i64 12}
!17 = !{!"_ZTSN11spirv_cross11SmallVectorINS_11InstructionELm8EEE", !18, i64 0, !20, i64 16, !21, i64 24}
!18 = !{!"_ZTSN11spirv_cross10VectorViewINS_11InstructionEEE", !19, i64 0, !20, i64 8}
!19 = !{!"any pointer", !10, i64 0}
!20 = !{!"long", !10, i64 0}
!21 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_11InstructionELm8EEE", !10, i64 0}
!22 = !{!"_ZTSN11spirv_cross11SmallVectorINS_9SPIRBlock3PhiELm8EEE", !23, i64 0, !20, i64 16, !24, i64 24}
!23 = !{!"_ZTSN11spirv_cross10VectorViewINS_9SPIRBlock3PhiEEE", !19, i64 0, !20, i64 8}
!24 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_9SPIRBlock3PhiELm8EEE", !10, i64 0}
!25 = !{!"_ZTSN11spirv_cross11SmallVectorISt4pairINS_7TypedIDILNS_5TypesE1EEENS2_ILS3_0EEEELm8EEE", !26, i64 0, !20, i64 16, !27, i64 24}
!26 = !{!"_ZTSN11spirv_cross10VectorViewISt4pairINS_7TypedIDILNS_5TypesE1EEENS2_ILS3_0EEEEEE", !19, i64 0, !20, i64 8}
!27 = !{!"_ZTSN11spirv_cross13AlignedBufferISt4pairINS_7TypedIDILNS_5TypesE1EEENS2_ILS3_0EEEELm8EEE", !10, i64 0}
!28 = !{!"_ZTSN11spirv_cross11SmallVectorINS_9SPIRBlock4CaseELm8EEE", !29, i64 0, !20, i64 16, !30, i64 24}
!29 = !{!"_ZTSN11spirv_cross10VectorViewINS_9SPIRBlock4CaseEEE", !19, i64 0, !20, i64 8}
!30 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_9SPIRBlock4CaseELm8EEE", !10, i64 0}
!31 = !{!"bool", !10, i64 0}
!32 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE2EEELm8EEE", !33, i64 0, !20, i64 16, !34, i64 24}
!33 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEEE", !19, i64 0, !20, i64 8}
!34 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE2EEELm8EEE", !10, i64 0}
!35 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EEE", !36, i64 0, !20, i64 16, !37, i64 24}
!36 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEEE", !19, i64 0, !20, i64 8}
!37 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE0EEELm8EEE", !10, i64 0}
!38 = !{!9, !9, i64 0}
!39 = !{!40, !31, i64 153}
!40 = !{!"_ZTSN11spirv_cross12SPIRVariableE", !7, i64 0, !41, i64 12, !42, i64 16, !9, i64 20, !8, i64 24, !43, i64 28, !44, i64 32, !31, i64 88, !31, i64 89, !8, i64 92, !35, i64 96, !31, i64 152, !31, i64 153, !31, i64 154, !31, i64 155, !9, i64 156, !15, i64 160, !31, i64 164, !31, i64 165, !31, i64 166, !19, i64 168}
!41 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !9, i64 0}
!42 = !{!"_ZTSN3spv12StorageClassE", !10, i64 0}
!43 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE2EEE", !9, i64 0}
!44 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !45, i64 0, !20, i64 16, !46, i64 24}
!45 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !19, i64 0, !20, i64 8}
!46 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !10, i64 0}
!47 = !{i8 0, i8 2}
!48 = !{}
!49 = !{!6, !31, i64 793}
!50 = !{!40, !31, i64 165}
!51 = !{!40, !31, i64 152}
!52 = !{!31, !31, i64 0}
!53 = distinct !{!53, !54}
!54 = !{!"llvm.loop.mustprogress"}
!55 = !{!56, !56, i64 0}
!56 = !{!"vtable pointer", !11, i64 0}
!57 = !{!40, !31, i64 164}
!58 = !{!6, !12, i64 12}
!59 = !{!60, !62, i64 16}
!60 = !{!"_ZTSN11spirv_cross8SPIRTypeE", !7, i64 0, !61, i64 12, !62, i64 16, !9, i64 20, !9, i64 24, !9, i64 28, !44, i64 32, !63, i64 88, !9, i64 120, !31, i64 124, !31, i64 125, !42, i64 128, !66, i64 136, !44, i64 192, !69, i64 248, !41, i64 272, !41, i64 276, !73, i64 280}
!61 = !{!"_ZTSN3spv2OpE", !10, i64 0}
!62 = !{!"_ZTSN11spirv_cross8SPIRType8BaseTypeE", !10, i64 0}
!63 = !{!"_ZTSN11spirv_cross11SmallVectorIbLm8EEE", !64, i64 0, !20, i64 16, !65, i64 24}
!64 = !{!"_ZTSN11spirv_cross10VectorViewIbEE", !19, i64 0, !20, i64 8}
!65 = !{!"_ZTSN11spirv_cross13AlignedBufferIbLm8EEE", !10, i64 0}
!66 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEE", !67, i64 0, !20, i64 16, !68, i64 24}
!67 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEE", !19, i64 0, !20, i64 8}
!68 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE1EEELm8EEE", !10, i64 0}
!69 = !{!"_ZTSN11spirv_cross8SPIRType9ImageTypeE", !41, i64 0, !70, i64 4, !31, i64 8, !31, i64 9, !31, i64 10, !9, i64 12, !71, i64 16, !72, i64 20}
!70 = !{!"_ZTSN3spv3DimE", !10, i64 0}
!71 = !{!"_ZTSN3spv11ImageFormatE", !10, i64 0}
!72 = !{!"_ZTSN3spv15AccessQualifierE", !10, i64 0}
!73 = !{!"_ZTSSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE", !74, i64 0}
!74 = !{!"_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", !19, i64 0, !20, i64 8, !75, i64 16, !20, i64 24, !76, i64 32, !19, i64 48}
!75 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !19, i64 0}
!76 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !77, i64 0, !20, i64 8}
!77 = !{!"float", !10, i64 0}
!78 = !{!79, !31, i64 8408}
!79 = !{!"_ZTSN11spirv_cross12CompilerGLSLE", !80, i64 0, !19, i64 3176, !134, i64 3184, !31, i64 3272, !137, i64 3280, !19, i64 7616, !19, i64 7624, !31, i64 7632, !31, i64 7633, !142, i64 7636, !73, i64 7680, !73, i64 7736, !73, i64 7792, !73, i64 7848, !73, i64 7904, !73, i64 7960, !73, i64 8016, !146, i64 8072, !132, i64 8128, !31, i64 8184, !148, i64 8192, !9, i64 8416, !119, i64 8424, !119, i64 8480, !119, i64 8536, !149, i64 8592, !151, i64 8648, !152, i64 8656, !102, i64 8712, !102, i64 8992, !152, i64 9272, !66, i64 9328, !9, i64 9384, !9, i64 9388, !9, i64 9392, !31, i64 9396, !31, i64 9397, !154, i64 9400, !154, i64 9424, !158, i64 9448, !162, i64 9472, !152, i64 9496, !119, i64 9552, !119, i64 9608, !10, i64 9664, !166, i64 9672, !119, i64 9728, !19, i64 9784, !168, i64 9792}
!80 = !{!"_ZTSN11spirv_cross8CompilerE", !81, i64 8, !44, i64 1928, !44, i64 1984, !19, i64 2040, !19, i64 2048, !9, i64 2056, !121, i64 2064, !31, i64 2120, !119, i64 2128, !31, i64 2184, !31, i64 2185, !123, i64 2192, !44, i64 2312, !126, i64 2368, !119, i64 2400, !119, i64 2456, !119, i64 2512, !119, i64 2568, !119, i64 2624, !118, i64 2680, !118, i64 2744, !9, i64 2808, !9, i64 2812, !31, i64 2816, !119, i64 2824, !31, i64 2880, !31, i64 2881, !9, i64 2884, !128, i64 2888, !44, i64 2944, !130, i64 3000, !119, i64 3056, !31, i64 3112, !132, i64 3120}
!81 = !{!"_ZTSN11spirv_cross8ParsedIRE", !82, i64 0, !88, i64 8, !92, i64 32, !95, i64 248, !10, i64 304, !35, i64 1088, !35, i64 1144, !97, i64 1200, !99, i64 1256, !102, i64 1312, !105, i64 1592, !108, i64 1624, !110, i64 1680, !112, i64 1736, !113, i64 1740, !114, i64 1748, !115, i64 1752, !9, i64 1756, !9, i64 1760, !116, i64 1768, !118, i64 1800, !119, i64 1864}
!82 = !{!"_ZTSSt10unique_ptrIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EE", !83, i64 0}
!83 = !{!"_ZTSSt15__uniq_ptr_dataIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_ELb1ELb1EE", !84, i64 0}
!84 = !{!"_ZTSSt15__uniq_ptr_implIN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EE", !85, i64 0}
!85 = !{!"_ZTSSt5tupleIJPN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EEE", !86, i64 0}
!86 = !{!"_ZTSSt11_Tuple_implILm0EJPN11spirv_cross15ObjectPoolGroupESt14default_deleteIS1_EEE", !87, i64 0}
!87 = !{!"_ZTSSt10_Head_baseILm0EPN11spirv_cross15ObjectPoolGroupELb0EE", !19, i64 0}
!88 = !{!"_ZTSSt6vectorIjSaIjEE", !89, i64 0}
!89 = !{!"_ZTSSt12_Vector_baseIjSaIjEE", !90, i64 0}
!90 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE12_Vector_implE", !91, i64 0}
!91 = !{!"_ZTSNSt12_Vector_baseIjSaIjEE17_Vector_impl_dataE", !19, i64 0, !19, i64 8, !19, i64 16}
!92 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7VariantELm8EEE", !93, i64 0, !20, i64 16, !94, i64 24}
!93 = !{!"_ZTSN11spirv_cross10VectorViewINS_7VariantEEE", !19, i64 0, !20, i64 8}
!94 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7VariantELm8EEE", !10, i64 0}
!95 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !96, i64 0}
!96 = !{!"_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", !19, i64 0, !20, i64 8, !75, i64 16, !20, i64 24, !76, i64 32, !19, i64 48}
!97 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEEjSt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_jEEE", !98, i64 0}
!98 = !{!"_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", !19, i64 0, !20, i64 8, !75, i64 16, !20, i64 24, !76, i64 32, !19, i64 48}
!99 = !{!"_ZTSN11spirv_cross11SmallVectorIN3spv10CapabilityELm8EEE", !100, i64 0, !20, i64 16, !101, i64 24}
!100 = !{!"_ZTSN11spirv_cross10VectorViewIN3spv10CapabilityEEE", !19, i64 0, !20, i64 8}
!101 = !{!"_ZTSN11spirv_cross13AlignedBufferIN3spv10CapabilityELm8EEE", !10, i64 0}
!102 = !{!"_ZTSN11spirv_cross11SmallVectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !103, i64 0, !20, i64 16, !104, i64 24}
!103 = !{!"_ZTSN11spirv_cross10VectorViewINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE", !19, i64 0, !20, i64 8}
!104 = !{!"_ZTSN11spirv_cross13AlignedBufferINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELm8EEE", !10, i64 0}
!105 = !{!"_ZTSN11spirv_cross11SmallVectorIhLm8EEE", !106, i64 0, !20, i64 16, !107, i64 24}
!106 = !{!"_ZTSN11spirv_cross10VectorViewIhEE", !19, i64 0, !20, i64 8}
!107 = !{!"_ZTSN11spirv_cross13AlignedBufferIhLm8EEE", !10, i64 0}
!108 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE6EEES3_St4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S3_EEE", !109, i64 0}
!109 = !{!"_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", !19, i64 0, !20, i64 8, !75, i64 16, !20, i64 24, !76, i64 32, !19, i64 48}
!110 = !{!"_ZTSSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE4EEENS0_14SPIREntryPointESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEE", !111, i64 0}
!111 = !{!"_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", !19, i64 0, !20, i64 8, !75, i64 16, !20, i64 24, !76, i64 32, !19, i64 48}
!112 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE4EEE", !9, i64 0}
!113 = !{!"_ZTSN11spirv_cross8ParsedIR6SourceE", !9, i64 0, !31, i64 4, !31, i64 5, !31, i64 6}
!114 = !{!"_ZTSN3spv15AddressingModelE", !10, i64 0}
!115 = !{!"_ZTSN3spv11MemoryModelE", !10, i64 0}
!116 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !117, i64 0, !20, i64 8, !10, i64 16}
!117 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !19, i64 0}
!118 = !{!"_ZTSN11spirv_cross6BitsetE", !20, i64 0, !119, i64 8}
!119 = !{!"_ZTSSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE", !120, i64 0}
!120 = !{!"_ZTSSt10_HashtableIjjSaIjENSt8__detail9_IdentityESt8equal_toIjESt4hashIjENS1_18_Mod_range_hashingENS1_20_Default_ranged_hashENS1_20_Prime_rehash_policyENS1_17_Hashtable_traitsILb0ELb1ELb1EEEE", !19, i64 0, !20, i64 8, !75, i64 16, !20, i64 24, !76, i64 32, !19, i64 48}
!121 = !{!"_ZTSSt13unordered_setIN11spirv_cross7TypedIDILNS0_5TypesE2EEESt4hashIS3_ESt8equal_toIS3_ESaIS3_EE", !122, i64 0}
!122 = !{!"_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", !19, i64 0, !20, i64 8, !75, i64 16, !20, i64 24, !76, i64 32, !19, i64 48}
!123 = !{!"_ZTSN11spirv_cross11SmallVectorINS_20CombinedImageSamplerELm8EEE", !124, i64 0, !20, i64 16, !125, i64 24}
!124 = !{!"_ZTSN11spirv_cross10VectorViewINS_20CombinedImageSamplerEEE", !19, i64 0, !20, i64 8}
!125 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_20CombinedImageSamplerELm8EEE", !10, i64 0}
!126 = !{!"_ZTSSt8functionIFvRKN11spirv_cross8SPIRTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERS9_EE", !127, i64 0, !19, i64 24}
!127 = !{!"_ZTSSt14_Function_base", !10, i64 0, !19, i64 16}
!128 = !{!"_ZTSSt13unordered_mapIjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS2_EESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !129, i64 0}
!129 = !{!"_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", !19, i64 0, !20, i64 8, !75, i64 16, !20, i64 24, !76, i64 32, !19, i64 48}
!130 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross8Compiler17PhysicalBlockMetaESt4hashIjESt8equal_toIjESaISt4pairIKjS2_EEE", !131, i64 0}
!131 = !{!"_ZTSSt10_HashtableIjSt4pairIKjN11spirv_cross8Compiler17PhysicalBlockMetaEESaIS5_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb0ELb0ELb1EEEE", !19, i64 0, !20, i64 8, !75, i64 16, !20, i64 24, !76, i64 32, !19, i64 48}
!132 = !{!"_ZTSSt13unordered_mapIjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !133, i64 0}
!133 = !{!"_ZTSSt10_HashtableIjSt4pairIKjNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEESaIS8_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb0ELb0ELb1EEEE", !19, i64 0, !20, i64 8, !75, i64 16, !20, i64 24, !76, i64 32, !19, i64 48}
!134 = !{!"_ZTSN11spirv_cross11SmallVectorIPNS_9SPIRBlockELm8EEE", !135, i64 0, !20, i64 16, !136, i64 24}
!135 = !{!"_ZTSN11spirv_cross10VectorViewIPNS_9SPIRBlockEEE", !19, i64 0, !20, i64 8}
!136 = !{!"_ZTSN11spirv_cross13AlignedBufferIPNS_9SPIRBlockELm8EEE", !10, i64 0}
!137 = !{!"_ZTSN11spirv_cross12StringStreamILm4096ELm4096EEE", !138, i64 0, !10, i64 24, !139, i64 4120}
!138 = !{!"_ZTSN11spirv_cross12StringStreamILm4096ELm4096EE6BufferE", !19, i64 0, !20, i64 8, !20, i64 16}
!139 = !{!"_ZTSN11spirv_cross11SmallVectorINS_12StringStreamILm4096ELm4096EE6BufferELm8EEE", !140, i64 0, !20, i64 16, !141, i64 24}
!140 = !{!"_ZTSN11spirv_cross10VectorViewINS_12StringStreamILm4096ELm4096EE6BufferEEE", !19, i64 0, !20, i64 8}
!141 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_12StringStreamILm4096ELm4096EE6BufferELm8EEE", !10, i64 0}
!142 = !{!"_ZTSN11spirv_cross12CompilerGLSL7OptionsE", !9, i64 0, !31, i64 4, !31, i64 5, !9, i64 8, !31, i64 12, !31, i64 13, !31, i64 14, !31, i64 15, !31, i64 16, !31, i64 17, !31, i64 18, !31, i64 19, !31, i64 20, !31, i64 21, !31, i64 22, !31, i64 23, !9, i64 24, !143, i64 28, !144, i64 32}
!143 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options13VertexOptionsE", !31, i64 0, !31, i64 1, !31, i64 2}
!144 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options15FragmentOptionsE", !145, i64 0, !145, i64 4}
!145 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options9PrecisionE", !10, i64 0}
!146 = !{!"_ZTSSt13unordered_mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt13unordered_setImSt4hashImESt8equal_toImESaImEES7_IS5_ES9_IS5_ESaISt4pairIKS5_SC_EEE", !147, i64 0}
!147 = !{!"_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", !19, i64 0, !20, i64 8, !75, i64 16, !20, i64 24, !76, i64 32, !19, i64 48}
!148 = !{!"_ZTSN11spirv_cross12CompilerGLSL17BackendVariationsE", !116, i64 0, !116, i64 32, !116, i64 64, !31, i64 96, !31, i64 97, !31, i64 98, !31, i64 99, !19, i64 104, !19, i64 112, !19, i64 120, !19, i64 128, !19, i64 136, !19, i64 144, !19, i64 152, !19, i64 160, !19, i64 168, !19, i64 176, !62, i64 184, !31, i64 188, !31, i64 189, !31, i64 190, !31, i64 191, !31, i64 192, !31, i64 193, !31, i64 194, !31, i64 195, !31, i64 196, !31, i64 197, !31, i64 198, !31, i64 199, !31, i64 200, !31, i64 201, !31, i64 202, !31, i64 203, !31, i64 204, !31, i64 205, !31, i64 206, !31, i64 207, !31, i64 208, !31, i64 209, !31, i64 210, !31, i64 211, !31, i64 212, !31, i64 213, !31, i64 214, !31, i64 215, !31, i64 216, !31, i64 217, !31, i64 218, !31, i64 219}
!149 = !{!"_ZTSSt13unordered_mapIjbSt4hashIjESt8equal_toIjESaISt4pairIKjbEEE", !150, i64 0}
!150 = !{!"_ZTSSt10_HashtableIjSt4pairIKjbESaIS2_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE", !19, i64 0, !20, i64 8, !75, i64 16, !20, i64 24, !76, i64 32, !19, i64 48}
!151 = !{!"_ZTSN11spirv_cross12CompilerGLSL27ShaderSubgroupSupportHelperE", !9, i64 0}
!152 = !{!"_ZTSSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEE", !153, i64 0}
!153 = !{!"_ZTSSt10_HashtableIjSt4pairIKjjESaIS2_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE", !19, i64 0, !20, i64 8, !75, i64 16, !20, i64 24, !76, i64 32, !19, i64 48}
!154 = !{!"_ZTSSt6vectorIN11spirv_cross8PlsRemapESaIS1_EE", !155, i64 0}
!155 = !{!"_ZTSSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE", !156, i64 0}
!156 = !{!"_ZTSNSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE12_Vector_implE", !157, i64 0}
!157 = !{!"_ZTSNSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE17_Vector_impl_dataE", !19, i64 0, !19, i64 8, !19, i64 16}
!158 = !{!"_ZTSSt6vectorISt4pairIjjESaIS1_EE", !159, i64 0}
!159 = !{!"_ZTSSt12_Vector_baseISt4pairIjjESaIS1_EE", !160, i64 0}
!160 = !{!"_ZTSNSt12_Vector_baseISt4pairIjjESaIS1_EE12_Vector_implE", !161, i64 0}
!161 = !{!"_ZTSNSt12_Vector_baseISt4pairIjjESaIS1_EE17_Vector_impl_dataE", !19, i64 0, !19, i64 8, !19, i64 16}
!162 = !{!"_ZTSSt6vectorISt4pairIjbESaIS1_EE", !163, i64 0}
!163 = !{!"_ZTSSt12_Vector_baseISt4pairIjbESaIS1_EE", !164, i64 0}
!164 = !{!"_ZTSNSt12_Vector_baseISt4pairIjbESaIS1_EE12_Vector_implE", !165, i64 0}
!165 = !{!"_ZTSNSt12_Vector_baseISt4pairIjbESaIS1_EE17_Vector_impl_dataE", !19, i64 0, !19, i64 8, !19, i64 16}
!166 = !{!"_ZTSSt13unordered_setIN11spirv_cross21LocationComponentPairENS0_14InternalHasherESt8equal_toIS1_ESaIS1_EE", !167, i64 0}
!167 = !{!"_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", !19, i64 0, !20, i64 8, !75, i64 16, !20, i64 24, !76, i64 32, !19, i64 48}
!168 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross11SmallVectorINS0_7TypedIDILNS0_5TypesE3EEELm8EEESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !169, i64 0}
!169 = !{!"_ZTSSt10_HashtableIjSt4pairIKjN11spirv_cross11SmallVectorINS2_7TypedIDILNS2_5TypesE3EEELm8EEEESaIS8_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb0ELb0ELb1EEEE", !19, i64 0, !20, i64 8, !75, i64 16, !20, i64 24, !76, i64 32, !19, i64 48}
!170 = !{!19, !19, i64 0}
!171 = !{!79, !31, i64 8290}
!172 = !{!79, !19, i64 8352}
!173 = !{!79, !19, i64 8344}
!174 = !{!6, !31, i64 794}
!175 = distinct !{!175, !54}
!176 = !{!177, !19, i64 0}
!177 = !{!"_ZTSZN11spirv_cross12CompilerGLSL16emit_block_chainERNS_9SPIRBlockEE3$_2", !19, i64 0}
!178 = !{!79, !31, i64 8403}
!179 = distinct !{!179, !54}
!180 = !{!20, !20, i64 0}
!181 = !{!60, !9, i64 20}
!182 = distinct !{!182, !54}
!183 = !{!79, !9, i64 9384}
!184 = !{!79, !31, i64 3272}
!185 = distinct !{!185, !54}
!186 = !{!80, !19, i64 2040}
!187 = !{!79, !31, i64 8184}
!188 = !{!79, !31, i64 8394}
!189 = distinct !{!189, !54}


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