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

; 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"

%"struct.std::__detail::_Node_iterator.347" = type { %"struct.std::__detail::_Node_iterator_base.348" }
%"struct.std::__detail::_Node_iterator_base.348" = type { ptr }
%"class.std::unordered_map.194" = type { %"class.std::_Hashtable.195" }
%"class.std::_Hashtable.195" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%"struct.std::__detail::_Node_iterator.360" = type { %"struct.std::__detail::_Node_iterator_base.361" }
%"struct.std::__detail::_Node_iterator_base.361" = type { ptr }
%"class.spirv_cross::TypedID.165" = type { i32 }
%"struct.std::__detail::_Node_iterator.346" = type { %"struct.std::__detail::_Node_iterator_base.300" }
%"struct.std::__detail::_Node_iterator_base.300" = type { ptr }
%"class.spirv_cross::TypedID.164" = type { i32 }
%"class.spirv_cross::DominatorBuilder" = type <{ ptr, i32, [4 x i8] }>
%"struct.std::__detail::_Node_iterator" = type { %"struct.std::__detail::_Node_iterator_base" }
%"struct.std::__detail::_Node_iterator_base" = type { ptr }
%"struct.std::__detail::_Node_iterator.289" = type { %"struct.std::__detail::_Node_iterator_base.259" }
%"struct.std::__detail::_Node_iterator_base.259" = type { ptr }
%"struct.std::pair" = type <{ %"struct.std::__detail::_Node_iterator", i8, [7 x i8] }>
%"class.std::unordered_set" = type { %"class.std::_Hashtable.74" }
%"class.std::_Hashtable.74" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::TypedID.162" = type { i32 }
%class.anon.364 = type { ptr, ptr }
%"class.spirv_cross::Compiler" = type { ptr, %"class.spirv_cross::ParsedIR", %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.92", ptr, ptr, i32, %"class.std::unordered_set.95", i8, %"class.std::unordered_set", i8, i8, %"class.spirv_cross::SmallVector.114", %"class.spirv_cross::SmallVector.92", %"class.std::function", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.std::unordered_set", %"class.spirv_cross::Bitset", %"class.spirv_cross::Bitset", i32, i32, i8, %"class.std::unordered_set", i8, i8, i32, %"class.std::unordered_map.117", %"class.spirv_cross::SmallVector.92", %"class.std::unordered_map.131", %"class.std::unordered_set", i8, %"class.std::unordered_map.145" }
%"class.spirv_cross::ParsedIR" = type { %"class.std::unique_ptr", %"class.std::vector", %"class.spirv_cross::SmallVector", %"class.std::unordered_map", [14 x %"class.spirv_cross::SmallVector.7"], %"class.spirv_cross::SmallVector.7", %"class.spirv_cross::SmallVector.7", %"class.std::unordered_map.10", %"class.spirv_cross::SmallVector.24", %"class.spirv_cross::SmallVector.27", %"class.spirv_cross::SmallVector.30", %"class.std::unordered_map.33", %"class.std::unordered_map.52", %"class.spirv_cross::TypedID", %"struct.spirv_cross::ParsedIR::Source", i32, i32, i32, i32, %"class.std::__cxx11::basic_string", %"class.spirv_cross::Bitset", %"class.std::unordered_set" }
%"class.std::unique_ptr" = type { %"struct.std::__uniq_ptr_data" }
%"struct.std::__uniq_ptr_data" = type { %"class.std::__uniq_ptr_impl" }
%"class.std::__uniq_ptr_impl" = type { %"class.std::tuple" }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Head_base.1" }
%"struct.std::_Head_base.1" = type { ptr }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.spirv_cross::SmallVector" = type { %"class.spirv_cross::VectorView", i64, %"class.spirv_cross::AlignedBuffer" }
%"class.spirv_cross::VectorView" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer" = type { [192 x i8] }
%"class.std::unordered_map" = type { %"class.std::_Hashtable" }
%"class.std::_Hashtable" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.7" = type { %"class.spirv_cross::VectorView.8", i64, %"class.spirv_cross::AlignedBuffer.9" }
%"class.spirv_cross::VectorView.8" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.9" = type { [32 x i8] }
%"class.std::unordered_map.10" = type { %"class.std::_Hashtable.11" }
%"class.std::_Hashtable.11" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::SmallVector.24" = type { %"class.spirv_cross::VectorView.25", i64, %"class.spirv_cross::AlignedBuffer.26" }
%"class.spirv_cross::VectorView.25" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.26" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.27" = type { %"class.spirv_cross::VectorView.28", i64, %"class.spirv_cross::AlignedBuffer.29" }
%"class.spirv_cross::VectorView.28" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.29" = type { [256 x i8] }
%"class.spirv_cross::SmallVector.30" = type { %"class.spirv_cross::VectorView.31", i64, %"class.spirv_cross::AlignedBuffer.32" }
%"class.spirv_cross::VectorView.31" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.32" = type { [8 x i8] }
%"class.std::unordered_map.33" = type { %"class.std::_Hashtable.34" }
%"class.std::_Hashtable.34" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.52" = type { %"class.std::_Hashtable.53" }
%"class.std::_Hashtable.53" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.spirv_cross::TypedID" = type { i32 }
%"struct.spirv_cross::ParsedIR::Source" = type <{ i32, i8, i8, i8, i8 }>
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::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.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.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_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::IVariant" = type <{ ptr, %"class.spirv_cross::TypedID.162", [4 x i8] }>
%"struct.std::pair.349" = type { i32, %"class.std::unique_ptr.351" }
%"class.std::unique_ptr.351" = type { %"struct.std::__uniq_ptr_data.352" }
%"struct.std::__uniq_ptr_data.352" = type { %"class.std::__uniq_ptr_impl.353" }
%"class.std::__uniq_ptr_impl.353" = type { %"class.std::tuple.354" }
%"class.std::tuple.354" = type { %"struct.std::_Tuple_impl.355" }
%"struct.std::_Tuple_impl.355" = type { %"struct.std::_Head_base.358" }
%"struct.std::_Head_base.358" = type { ptr }
%"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler" = type { %"struct.spirv_cross::Compiler::OpcodeHandler", ptr, ptr, %"class.std::unordered_map.301", %"class.std::unordered_map.301", %"class.std::unordered_map.194", %"class.std::unordered_map.301", %"class.std::unordered_map.301", %"class.std::unordered_set", %"class.std::unordered_map.301", ptr }
%"struct.spirv_cross::Compiler::OpcodeHandler" = type { ptr }
%"class.std::unordered_map.301" = type { %"class.std::_Hashtable.302" }
%"class.std::_Hashtable.302" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.spirv_cross::SPIRFunction" = type <{ %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.163", %"class.spirv_cross::TypedID.163", [4 x i8], %"class.spirv_cross::SmallVector.223", %"class.spirv_cross::SmallVector.223", %"class.spirv_cross::SmallVector.220", %"class.spirv_cross::TypedID.165", [4 x i8], %"class.spirv_cross::SmallVector.226", %"class.spirv_cross::SmallVector.229", %"struct.spirv_cross::SPIRFunction::EntryLine", %"class.spirv_cross::SmallVector.232", %"class.spirv_cross::SmallVector.232", %"class.spirv_cross::SmallVector.7", i8, i8, i8, [5 x i8] }>
%"struct.spirv_cross::IVariant.base" = type <{ ptr, %"class.spirv_cross::TypedID.162" }>
%"class.spirv_cross::TypedID.163" = type { i32 }
%"class.spirv_cross::SmallVector.223" = type { %"class.spirv_cross::VectorView.224", i64, %"class.spirv_cross::AlignedBuffer.225" }
%"class.spirv_cross::VectorView.224" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.225" = type { [160 x i8] }
%"class.spirv_cross::SmallVector.220" = type { %"class.spirv_cross::VectorView.221", i64, %"class.spirv_cross::AlignedBuffer.222" }
%"class.spirv_cross::VectorView.221" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.222" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.226" = type { %"class.spirv_cross::VectorView.227", i64, %"class.spirv_cross::AlignedBuffer.228" }
%"class.spirv_cross::VectorView.227" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.228" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.229" = type { %"class.spirv_cross::VectorView.230", i64, %"class.spirv_cross::AlignedBuffer.231" }
%"class.spirv_cross::VectorView.230" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.231" = type { [128 x i8] }
%"struct.spirv_cross::SPIRFunction::EntryLine" = type { i32, i32 }
%"class.spirv_cross::SmallVector.232" = type <{ %"class.spirv_cross::VectorView.233", i64, [8 x i8] }>
%"class.spirv_cross::VectorView.233" = type { ptr, i64 }
%"struct.std::pair.362" = type { %"class.spirv_cross::TypedID.165", %"class.spirv_cross::TypedID.165" }
%"struct.spirv_cross::SPIRBlock" = type { %"struct.spirv_cross::IVariant.base", i32, i32, i32, %"class.spirv_cross::TypedID.165", %"class.spirv_cross::TypedID.165", %"class.spirv_cross::TypedID.165", %"class.spirv_cross::TypedID.162", %"class.spirv_cross::TypedID.162", %"class.spirv_cross::TypedID.165", %"class.spirv_cross::TypedID.165", %"class.spirv_cross::TypedID.165", %struct.anon, %"class.spirv_cross::SmallVector.208", %"class.spirv_cross::SmallVector.211", %"class.spirv_cross::SmallVector.214", %"class.spirv_cross::SmallVector.214", %"class.spirv_cross::SmallVector.217", %"class.spirv_cross::SmallVector.217", i8, i8, i8, %"class.spirv_cross::TypedID.165", %"class.spirv_cross::TypedID.165", %"class.spirv_cross::SmallVector.220", %"class.spirv_cross::SmallVector.220", %"class.spirv_cross::SmallVector.7" }
%struct.anon = type { [3 x %"class.spirv_cross::TypedID.162"], %"class.spirv_cross::TypedID.162" }
%"class.spirv_cross::SmallVector.208" = type { %"class.spirv_cross::VectorView.209", i64, %"class.spirv_cross::AlignedBuffer.210" }
%"class.spirv_cross::VectorView.209" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.210" = type { [96 x i8] }
%"class.spirv_cross::SmallVector.211" = type { %"class.spirv_cross::VectorView.212", i64, %"class.spirv_cross::AlignedBuffer.213" }
%"class.spirv_cross::VectorView.212" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.213" = type { [96 x i8] }
%"class.spirv_cross::SmallVector.214" = type { %"class.spirv_cross::VectorView.215", i64, %"class.spirv_cross::AlignedBuffer.216" }
%"class.spirv_cross::VectorView.215" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.216" = type { [64 x i8] }
%"class.spirv_cross::SmallVector.217" = type { %"class.spirv_cross::VectorView.218", i64, %"class.spirv_cross::AlignedBuffer.219" }
%"class.spirv_cross::VectorView.218" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.219" = type { [128 x i8] }
%"struct.std::pair.343" = type { i32, %"class.std::unordered_set" }
%"struct.spirv_cross::SPIRType" = type { %"struct.spirv_cross::IVariant.base", i32, i32, i32, i32, i32, %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.166", i32, i8, i8, i32, %"class.spirv_cross::SmallVector.169", %"class.spirv_cross::SmallVector.92", %"struct.spirv_cross::SPIRType::ImageType", %"class.spirv_cross::TypedID.163", %"class.spirv_cross::TypedID.163", %"class.std::unordered_set.172" }
%"class.spirv_cross::SmallVector.166" = type { %"class.spirv_cross::VectorView.167", i64, %"class.spirv_cross::AlignedBuffer.168" }
%"class.spirv_cross::VectorView.167" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.168" = type { [8 x i8] }
%"class.spirv_cross::SmallVector.169" = type { %"class.spirv_cross::VectorView.170", i64, %"class.spirv_cross::AlignedBuffer.171" }
%"class.spirv_cross::VectorView.170" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.171" = type { [32 x i8] }
%"struct.spirv_cross::SPIRType::ImageType" = type { %"class.spirv_cross::TypedID.163", i32, i8, i8, i8, i32, i32, i32 }
%"class.std::unordered_set.172" = type { %"class.std::_Hashtable.173" }
%"class.std::_Hashtable.173" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.spirv_cross::SPIRVariable" = type { %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.163", i32, i32, %"class.spirv_cross::TypedID.162", %"class.spirv_cross::TypedID.164", %"class.spirv_cross::SmallVector.92", i8, i8, %"class.spirv_cross::TypedID.162", %"class.spirv_cross::SmallVector.7", i8, i8, i8, i8, i32, %"class.spirv_cross::TypedID.165", i8, i8, i8, ptr }
%"struct.std::pair.260" = type { i32, i32 }

@.str.5 = external hidden unnamed_addr constant [91 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [48 x i8], align 1
@__PRETTY_FUNCTION__._ZN11spirv_cross8Compiler22analyze_variable_scopeERNS_12SPIRFunctionERNS0_33AnalyzeVariableScopeAccessHandlerE = external hidden unnamed_addr constant [104 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [7 x i8], align 1

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

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef ptr @_ZSt4findIPN11spirv_cross7TypedIDILNS0_5TypesE2EEES3_ET_S5_S5_RKT0_(ptr noundef, ptr noundef, ptr noundef nonnull align 4 dereferenceable(4)) #6

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross8Compiler30analyze_parameter_preservationERNS_12SPIRFunctionERKNS_3CFGERKSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES9_SB_SaISt4pairIKjSD_EEESK_(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(795), ptr noundef nonnull align 8 dereferenceable(356), ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(56)) #3 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5beginEv(ptr noundef nonnull align 8 dereferenceable(56)) #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(56)) #0 align 2

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEE3endEv(ptr noundef nonnull align 8 dereferenceable(56)) #0 align 2

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(356) ptr @_ZNKSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS1_EEdeEv(ptr noundef nonnull align 8 dereferenceable(8)) #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(56)) #0 align 2

declare void @_ZN11spirv_cross16DominatorBuilderC1ERKNS_3CFGE(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 8 dereferenceable(356)) unnamed_addr #7

declare void @_ZN11spirv_cross16DominatorBuilder9add_blockEj(ptr noundef nonnull align 8 dereferenceable(12), i32 noundef) #7

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross8Compiler22analyze_variable_scopeERNS_12SPIRFunctionERNS0_33AnalyzeVariableScopeAccessHandlerE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(795) %1, ptr noundef nonnull align 8 dereferenceable(424) %2) #3 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca %"struct.std::__detail::_Node_iterator.347", align 8
  %9 = alloca i32, align 4
  %10 = alloca %"class.std::unordered_map.194", align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca i32, align 4
  %18 = alloca %"struct.std::__detail::_Node_iterator.360", align 8
  %19 = alloca %"struct.std::__detail::_Node_iterator.360", align 8
  %20 = alloca i32, align 4
  %21 = alloca %"class.spirv_cross::TypedID.165", align 4
  %22 = alloca %"class.spirv_cross::TypedID.165", align 4
  %23 = alloca ptr, align 8
  %24 = alloca %"struct.std::__detail::_Node_iterator.346", align 8
  %25 = alloca %"struct.std::__detail::_Node_iterator.346", align 8
  %26 = alloca i32, align 4
  %27 = alloca ptr, align 8
  %28 = alloca %"class.spirv_cross::TypedID.164", align 4
  %29 = alloca %"class.spirv_cross::DominatorBuilder", align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca %"class.spirv_cross::TypedID.165", align 4
  %33 = alloca ptr, align 8
  %34 = alloca %"struct.std::__detail::_Node_iterator", align 8
  %35 = alloca %"struct.std::__detail::_Node_iterator", align 8
  %36 = alloca ptr, align 8
  %37 = alloca %"class.spirv_cross::TypedID.165", align 4
  %38 = alloca %"class.spirv_cross::TypedID.165", align 4
  %39 = alloca %"class.spirv_cross::TypedID.165", align 4
  %40 = alloca %"class.spirv_cross::TypedID.165", align 4
  %41 = alloca ptr, align 8
  %42 = alloca %"class.spirv_cross::TypedID.165", align 4
  %43 = alloca %"class.spirv_cross::TypedID.165", align 4
  %44 = alloca ptr, align 8
  %45 = alloca ptr, align 8
  %46 = alloca i8, align 1
  %47 = alloca %"class.spirv_cross::TypedID.165", align 4
  %48 = alloca %"class.spirv_cross::TypedID.165", align 4
  %49 = alloca ptr, align 8
  %50 = alloca %"class.spirv_cross::TypedID.164", align 4
  %51 = alloca ptr, align 8
  %52 = alloca %"struct.std::__detail::_Node_iterator.346", align 8
  %53 = alloca %"struct.std::__detail::_Node_iterator.346", align 8
  %54 = alloca ptr, align 8
  %55 = alloca %"struct.std::__detail::_Node_iterator.289", align 8
  %56 = alloca %"struct.std::__detail::_Node_iterator.289", align 8
  %57 = alloca ptr, align 8
  %58 = alloca %"class.spirv_cross::DominatorBuilder", align 8
  %59 = alloca i8, align 1
  %60 = alloca i8, align 1
  %61 = alloca ptr, align 8
  %62 = alloca ptr, align 8
  %63 = alloca %"struct.std::__detail::_Node_iterator", align 8
  %64 = alloca %"struct.std::__detail::_Node_iterator", align 8
  %65 = alloca ptr, align 8
  %66 = alloca ptr, align 8
  %67 = alloca %"class.spirv_cross::TypedID.165", align 4
  %68 = alloca i32, align 4
  %69 = alloca i8, align 1
  %70 = alloca ptr, align 8
  %71 = alloca %"struct.std::pair", align 8
  %72 = alloca %"struct.std::pair", align 8
  %73 = alloca ptr, align 8
  %74 = alloca ptr, align 8
  %75 = alloca %"class.std::unordered_set", align 8
  %76 = alloca ptr, align 8
  %77 = alloca %"struct.std::__detail::_Node_iterator.289", align 8
  %78 = alloca %"struct.std::__detail::_Node_iterator.289", align 8
  %79 = alloca ptr, align 8
  %80 = alloca ptr, align 8
  %81 = alloca %"class.spirv_cross::TypedID.165", align 4
  %82 = alloca %"class.spirv_cross::TypedID.165", align 4
  %83 = alloca %"class.spirv_cross::TypedID.165", align 4
  %84 = alloca %"class.spirv_cross::TypedID.165", align 4
  %85 = alloca %"class.spirv_cross::TypedID.162", align 4
  %86 = alloca %"class.spirv_cross::TypedID.165", align 4
  %87 = alloca %"struct.std::__detail::_Node_iterator.360", align 8
  %88 = alloca %"struct.std::__detail::_Node_iterator.360", align 8
  %89 = alloca ptr, align 8
  %90 = alloca ptr, align 8
  %91 = alloca i8, align 1
  %92 = alloca i32, align 4
  %93 = alloca i8, align 1
  %94 = alloca i32, align 4
  %95 = alloca ptr, align 8
  %96 = alloca ptr, align 8
  %97 = alloca %"class.spirv_cross::TypedID.165", align 4
  %98 = alloca %class.anon.364, align 8
  %99 = alloca %"class.spirv_cross::TypedID.164", align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  %100 = load ptr, ptr %4, align 8
  %101 = load ptr, ptr %5, align 8, !tbaa !5
  %102 = load ptr, ptr %6, align 8, !tbaa !5
  %103 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler30traverse_all_reachable_opcodesERKNS_12SPIRFunctionERNS0_13OpcodeHandlerE(ptr noundef nonnull align 8 dereferenceable(3176) %100, ptr noundef nonnull align 8 dereferenceable(795) %101, ptr noundef nonnull align 8 dereferenceable(8) %102)
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #8
  %104 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %100, i32 0, i32 29
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #8
  %105 = load ptr, ptr %5, align 8, !tbaa !5
  %106 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %105, i32 0, i32 1
  %107 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %106)
  store i32 %107, ptr %9, align 4, !tbaa !9
  %108 = call ptr @_ZNSt13unordered_mapIjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS2_EESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE4findERSB_(ptr noundef nonnull align 8 dereferenceable(56) %104, ptr noundef nonnull align 4 dereferenceable(4) %9)
  %109 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.347", ptr %8, i32 0, i32 0
  %110 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.348", ptr %109, i32 0, i32 0
  store ptr %108, ptr %110, align 8
  %111 = call noundef ptr @_ZNKSt8__detail14_Node_iteratorISt4pairIKjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS5_EEELb0ELb0EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %8) #8
  %112 = getelementptr inbounds %"struct.std::pair.349", ptr %111, i32 0, i32 1
  %113 = call noundef nonnull align 8 dereferenceable(356) ptr @_ZNKSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS1_EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %112) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #8
  store ptr %113, ptr %7, align 8, !tbaa !5
  %114 = load ptr, ptr %5, align 8, !tbaa !5
  %115 = load ptr, ptr %7, align 8, !tbaa !5
  %116 = load ptr, ptr %6, align 8, !tbaa !5
  %117 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %116, i32 0, i32 3
  %118 = load ptr, ptr %6, align 8, !tbaa !5
  %119 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %118, i32 0, i32 6
  call void @_ZN11spirv_cross8Compiler30analyze_parameter_preservationERNS_12SPIRFunctionERKNS_3CFGERKSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES9_SB_SaISt4pairIKjSD_EEESK_(ptr noundef nonnull align 8 dereferenceable(3176) %100, ptr noundef nonnull align 8 dereferenceable(795) %114, ptr noundef nonnull align 8 dereferenceable(356) %115, ptr noundef nonnull align 8 dereferenceable(56) %117, ptr noundef nonnull align 8 dereferenceable(56) %119)
  call void @llvm.lifetime.start.p0(i64 56, ptr %10) #8
  call void @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(56) %10) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #8
  %120 = load ptr, ptr %5, align 8, !tbaa !5
  %121 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %120, i32 0, i32 9
  store ptr %121, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #8
  %122 = load ptr, ptr %11, align 8, !tbaa !5
  %123 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE6EEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %122) #8
  store ptr %123, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #8
  %124 = load ptr, ptr %11, align 8, !tbaa !5
  %125 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE6EEEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %124) #8
  store ptr %125, ptr %13, align 8, !tbaa !5
  br label %126

126:                                              ; preds = %216, %3
  %127 = load ptr, ptr %12, align 8, !tbaa !5
  %128 = load ptr, ptr %13, align 8, !tbaa !5
  %129 = icmp ne ptr %127, %128
  br i1 %129, label %131, label %130

130:                                              ; preds = %126
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #8
  br label %221

131:                                              ; preds = %126
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #8
  %132 = load ptr, ptr %12, align 8, !tbaa !5
  store ptr %132, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #8
  %133 = load ptr, ptr %14, align 8, !tbaa !5
  %134 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %133)
          to label %135 unwind label %168

135:                                              ; preds = %131
  %136 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 noundef %134)
          to label %137 unwind label %168

137:                                              ; preds = %135
  store ptr %136, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #8
  %138 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %100, i32 0, i32 1
  %139 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %138, i32 0, i32 11
  %140 = load ptr, ptr %14, align 8, !tbaa !5
  %141 = invoke ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE6EEES3_St4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S3_EEE4findERS9_(ptr noundef nonnull align 8 dereferenceable(56) %139, ptr noundef nonnull align 4 dereferenceable(4) %140)
          to label %142 unwind label %172

142:                                              ; preds = %137
  %143 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.360", ptr %18, i32 0, i32 0
  %144 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.361", ptr %143, i32 0, i32 0
  store ptr %141, ptr %144, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #8
  %145 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %100, i32 0, i32 1
  %146 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %145, i32 0, i32 11
  %147 = invoke ptr @_ZSt3endISt13unordered_mapIN11spirv_cross7TypedIDILNS1_5TypesE6EEES4_St4hashIS4_ESt8equal_toIS4_ESaISt4pairIKS4_S4_EEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(56) %146)
          to label %148 unwind label %176

148:                                              ; preds = %142
  %149 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.360", ptr %19, i32 0, i32 0
  %150 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.361", ptr %149, i32 0, i32 0
  store ptr %147, ptr %150, align 8
  %151 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseISt4pairIKN11spirv_cross7TypedIDILNS2_5TypesE6EEES5_ELb1EEESA_(ptr noundef nonnull align 8 dereferenceable(8) %18, ptr noundef nonnull align 8 dereferenceable(8) %19) #8
  br i1 %151, label %152, label %161

152:                                              ; preds = %148
  %153 = call noundef ptr @_ZNKSt8__detail14_Node_iteratorISt4pairIKN11spirv_cross7TypedIDILNS2_5TypesE6EEES5_ELb0ELb1EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %18) #8
  %154 = getelementptr inbounds %"struct.std::pair.362", ptr %153, i32 0, i32 1
  %155 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %154)
          to label %156 unwind label %176

156:                                              ; preds = %152
  %157 = load ptr, ptr %14, align 8, !tbaa !5
  %158 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %157)
          to label %159 unwind label %176

159:                                              ; preds = %156
  %160 = icmp ne i32 %155, %158
  br label %161

161:                                              ; preds = %159, %148
  %162 = phi i1 [ false, %148 ], [ %160, %159 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  br i1 %162, label %163, label %180

163:                                              ; preds = %161
  %164 = call noundef ptr @_ZNKSt8__detail14_Node_iteratorISt4pairIKN11spirv_cross7TypedIDILNS2_5TypesE6EEES5_ELb0ELb1EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %18) #8
  %165 = getelementptr inbounds %"struct.std::pair.362", ptr %164, i32 0, i32 1
  %166 = load ptr, ptr %15, align 8, !tbaa !5
  %167 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %166, i32 0, i32 23
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %167, ptr align 4 %165, i64 4, i1 false), !tbaa.struct !11
  br label %215

168:                                              ; preds = %135, %131
  %169 = landingpad { ptr, i32 }
          cleanup
  %170 = extractvalue { ptr, i32 } %169, 0
  store ptr %170, ptr %16, align 8
  %171 = extractvalue { ptr, i32 } %169, 1
  store i32 %171, ptr %17, align 4
  br label %220

172:                                              ; preds = %137
  %173 = landingpad { ptr, i32 }
          cleanup
  %174 = extractvalue { ptr, i32 } %173, 0
  store ptr %174, ptr %16, align 8
  %175 = extractvalue { ptr, i32 } %173, 1
  store i32 %175, ptr %17, align 4
  br label %219

176:                                              ; preds = %156, %152, %142
  %177 = landingpad { ptr, i32 }
          cleanup
  %178 = extractvalue { ptr, i32 } %177, 0
  store ptr %178, ptr %16, align 8
  %179 = extractvalue { ptr, i32 } %177, 1
  store i32 %179, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  br label %219

180:                                              ; preds = %161
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #8
  %181 = load ptr, ptr %7, align 8, !tbaa !5
  %182 = load ptr, ptr %14, align 8, !tbaa !5
  %183 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %182)
          to label %184 unwind label %197

184:                                              ; preds = %180
  %185 = invoke noundef i32 @_ZNK11spirv_cross3CFG19find_loop_dominatorEj(ptr noundef nonnull align 8 dereferenceable(356) %181, i32 noundef %183)
          to label %186 unwind label %197

186:                                              ; preds = %184
  store i32 %185, ptr %20, align 4, !tbaa !9
  %187 = load i32, ptr %20, align 4, !tbaa !9
  %188 = load ptr, ptr %14, align 8, !tbaa !5
  %189 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %188)
          to label %190 unwind label %197

190:                                              ; preds = %186
  %191 = icmp ne i32 %187, %189
  br i1 %191, label %192, label %205

192:                                              ; preds = %190
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #8
  %193 = load i32, ptr %20, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %21, i32 noundef %193)
          to label %194 unwind label %201

194:                                              ; preds = %192
  %195 = load ptr, ptr %15, align 8, !tbaa !5
  %196 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %195, i32 0, i32 23
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %196, ptr align 4 %21, i64 4, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #8
  br label %213

197:                                              ; preds = %186, %184, %180
  %198 = landingpad { ptr, i32 }
          cleanup
  %199 = extractvalue { ptr, i32 } %198, 0
  store ptr %199, ptr %16, align 8
  %200 = extractvalue { ptr, i32 } %198, 1
  store i32 %200, ptr %17, align 4
  br label %214

201:                                              ; preds = %192
  %202 = landingpad { ptr, i32 }
          cleanup
  %203 = extractvalue { ptr, i32 } %202, 0
  store ptr %203, ptr %16, align 8
  %204 = extractvalue { ptr, i32 } %202, 1
  store i32 %204, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #8
  br label %214

205:                                              ; preds = %190
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #8
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %22, i32 noundef -1)
          to label %206 unwind label %209

206:                                              ; preds = %205
  %207 = load ptr, ptr %15, align 8, !tbaa !5
  %208 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %207, i32 0, i32 23
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %208, ptr align 4 %22, i64 4, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #8
  br label %213

209:                                              ; preds = %205
  %210 = landingpad { ptr, i32 }
          cleanup
  %211 = extractvalue { ptr, i32 } %210, 0
  store ptr %211, ptr %16, align 8
  %212 = extractvalue { ptr, i32 } %210, 1
  store i32 %212, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #8
  br label %214

213:                                              ; preds = %206, %194
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #8
  br label %215

214:                                              ; preds = %209, %201, %197
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #8
  br label %219

215:                                              ; preds = %213, %163
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  br label %216

216:                                              ; preds = %215
  %217 = load ptr, ptr %12, align 8, !tbaa !5
  %218 = getelementptr inbounds %"class.spirv_cross::TypedID.165", ptr %217, i32 1
  store ptr %218, ptr %12, align 8, !tbaa !5
  br label %126

219:                                              ; preds = %214, %176, %172
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #8
  br label %220

220:                                              ; preds = %219, %168
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #8
  br label %1169

221:                                              ; preds = %130
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #8
  %222 = load ptr, ptr %6, align 8, !tbaa !5
  %223 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %222, i32 0, i32 3
  store ptr %223, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #8
  %224 = load ptr, ptr %23, align 8, !tbaa !5
  %225 = call ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(56) %224) #8
  %226 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.346", ptr %24, i32 0, i32 0
  %227 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.300", ptr %226, i32 0, i32 0
  store ptr %225, ptr %227, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #8
  %228 = load ptr, ptr %23, align 8, !tbaa !5
  %229 = call ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %228) #8
  %230 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.346", ptr %25, i32 0, i32 0
  %231 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.300", ptr %230, i32 0, i32 0
  store ptr %229, ptr %231, align 8
  br label %232

232:                                              ; preds = %601, %221
  %233 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseISt4pairIKjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEELb0EEESD_(ptr noundef nonnull align 8 dereferenceable(8) %24, ptr noundef nonnull align 8 dereferenceable(8) %25) #8
  br i1 %233, label %235, label %234

234:                                              ; preds = %232
  store i32 4, ptr %26, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  br label %608

235:                                              ; preds = %232
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #8
  %236 = call noundef nonnull align 8 dereferenceable(64) ptr @_ZNKSt8__detail14_Node_iteratorISt4pairIKjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEELb0ELb0EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %24) #8
  store ptr %236, ptr %27, align 8, !tbaa !5
  %237 = load ptr, ptr %5, align 8, !tbaa !5
  %238 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %237, i32 0, i32 6
  %239 = invoke noundef ptr @_ZSt5beginIN11spirv_cross11SmallVectorINS0_7TypedIDILNS0_5TypesE2EEELm8EEEEDTcldtfp_5beginEERT_(ptr noundef nonnull align 8 dereferenceable(56) %238)
          to label %240 unwind label %257

240:                                              ; preds = %235
  %241 = load ptr, ptr %5, align 8, !tbaa !5
  %242 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %241, i32 0, i32 6
  %243 = invoke noundef ptr @_ZSt3endIN11spirv_cross11SmallVectorINS0_7TypedIDILNS0_5TypesE2EEELm8EEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(56) %242)
          to label %244 unwind label %257

244:                                              ; preds = %240
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #8
  %245 = load ptr, ptr %27, align 8, !tbaa !5
  %246 = getelementptr inbounds %"struct.std::pair.343", ptr %245, i32 0, i32 0
  %247 = load i32, ptr %246, align 8, !tbaa !12
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %28, i32 noundef %247)
          to label %248 unwind label %261

248:                                              ; preds = %244
  %249 = invoke noundef ptr @_ZSt4findIPN11spirv_cross7TypedIDILNS0_5TypesE2EEES3_ET_S5_S5_RKT0_(ptr noundef %239, ptr noundef %243, ptr noundef nonnull align 4 dereferenceable(4) %28)
          to label %250 unwind label %261

250:                                              ; preds = %248
  %251 = load ptr, ptr %5, align 8, !tbaa !5
  %252 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %251, i32 0, i32 6
  %253 = invoke noundef ptr @_ZSt3endIN11spirv_cross11SmallVectorINS0_7TypedIDILNS0_5TypesE2EEELm8EEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(56) %252)
          to label %254 unwind label %261

254:                                              ; preds = %250
  %255 = icmp eq ptr %249, %253
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #8
  br i1 %255, label %256, label %265

256:                                              ; preds = %254
  store i32 5, ptr %26, align 4
  br label %598

257:                                              ; preds = %240, %235
  %258 = landingpad { ptr, i32 }
          cleanup
  %259 = extractvalue { ptr, i32 } %258, 0
  store ptr %259, ptr %16, align 8
  %260 = extractvalue { ptr, i32 } %258, 1
  store i32 %260, ptr %17, align 4
  br label %607

261:                                              ; preds = %250, %248, %244
  %262 = landingpad { ptr, i32 }
          cleanup
  %263 = extractvalue { ptr, i32 } %262, 0
  store ptr %263, ptr %16, align 8
  %264 = extractvalue { ptr, i32 } %262, 1
  store i32 %264, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #8
  br label %607

265:                                              ; preds = %254
  call void @llvm.lifetime.start.p0(i64 16, ptr %29) #8
  %266 = load ptr, ptr %7, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross16DominatorBuilderC1ERKNS_3CFGE(ptr noundef nonnull align 8 dereferenceable(12) %29, ptr noundef nonnull align 8 dereferenceable(356) %266)
          to label %267 unwind label %288

267:                                              ; preds = %265
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #8
  %268 = load ptr, ptr %27, align 8, !tbaa !5
  %269 = getelementptr inbounds %"struct.std::pair.343", ptr %268, i32 0, i32 1
  store ptr %269, ptr %30, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #8
  %270 = load ptr, ptr %27, align 8, !tbaa !5
  %271 = getelementptr inbounds %"struct.std::pair.343", ptr %270, i32 0, i32 0
  %272 = load i32, ptr %271, align 8, !tbaa !12
  %273 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 noundef %272)
          to label %274 unwind label %292

274:                                              ; preds = %267
  store ptr %273, ptr %31, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #8
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %32, i32 noundef 0)
          to label %275 unwind label %296

275:                                              ; preds = %274
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #8
  %276 = load ptr, ptr %30, align 8, !tbaa !5
  store ptr %276, ptr %33, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #8
  %277 = load ptr, ptr %33, align 8, !tbaa !5
  %278 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5beginEv(ptr noundef nonnull align 8 dereferenceable(56) %277) #8
  %279 = getelementptr inbounds %"struct.std::__detail::_Node_iterator", ptr %34, i32 0, i32 0
  %280 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base", ptr %279, i32 0, i32 0
  store ptr %278, ptr %280, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #8
  %281 = load ptr, ptr %33, align 8, !tbaa !5
  %282 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %281) #8
  %283 = getelementptr inbounds %"struct.std::__detail::_Node_iterator", ptr %35, i32 0, i32 0
  %284 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base", ptr %283, i32 0, i32 0
  store ptr %282, ptr %284, align 8
  br label %285

285:                                              ; preds = %367, %275
  %286 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseIjLb0EEES3_(ptr noundef nonnull align 8 dereferenceable(8) %34, ptr noundef nonnull align 8 dereferenceable(8) %35) #8
  br i1 %286, label %300, label %287

287:                                              ; preds = %285
  store i32 6, ptr %26, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #8
  br label %370

288:                                              ; preds = %265
  %289 = landingpad { ptr, i32 }
          cleanup
  %290 = extractvalue { ptr, i32 } %289, 0
  store ptr %290, ptr %16, align 8
  %291 = extractvalue { ptr, i32 } %289, 1
  store i32 %291, ptr %17, align 4
  br label %606

292:                                              ; preds = %267
  %293 = landingpad { ptr, i32 }
          cleanup
  %294 = extractvalue { ptr, i32 } %293, 0
  store ptr %294, ptr %16, align 8
  %295 = extractvalue { ptr, i32 } %293, 1
  store i32 %295, ptr %17, align 4
  br label %605

296:                                              ; preds = %370, %274
  %297 = landingpad { ptr, i32 }
          cleanup
  %298 = extractvalue { ptr, i32 } %297, 0
  store ptr %298, ptr %16, align 8
  %299 = extractvalue { ptr, i32 } %297, 1
  store i32 %299, ptr %17, align 4
  br label %604

300:                                              ; preds = %285
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #8
  %301 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt8__detail14_Node_iteratorIjLb1ELb0EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %34) #8
  store ptr %301, ptr %36, align 8, !tbaa !5
  %302 = load ptr, ptr %36, align 8, !tbaa !5
  %303 = load i32, ptr %302, align 4, !tbaa !9
  %304 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler11is_continueEj(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 noundef %303)
          to label %305 unwind label %343

305:                                              ; preds = %300
  br i1 %304, label %306, label %363

306:                                              ; preds = %305
  %307 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %100, i32 0, i32 1
  %308 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %307, i32 0, i32 11
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #8
  %309 = load ptr, ptr %36, align 8, !tbaa !5
  %310 = load i32, ptr %309, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %37, i32 noundef %310)
          to label %311 unwind label %347

311:                                              ; preds = %306
  %312 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE6EEES3_St4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S3_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %308, ptr noundef nonnull align 4 dereferenceable(4) %37)
          to label %313 unwind label %347

313:                                              ; preds = %311
  %314 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %312)
          to label %315 unwind label %347

315:                                              ; preds = %313
  invoke void @_ZN11spirv_cross16DominatorBuilder9add_blockEj(ptr noundef nonnull align 8 dereferenceable(12) %29, i32 noundef %314)
          to label %316 unwind label %347

316:                                              ; preds = %315
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #8
  %317 = load ptr, ptr %31, align 8, !tbaa !5
  %318 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %317, i32 0, i32 4
  %319 = load i32, ptr %318, align 8, !tbaa !20
  %320 = icmp eq i32 %319, 1
  br i1 %320, label %321, label %362

321:                                              ; preds = %316
  %322 = load ptr, ptr %31, align 8, !tbaa !5
  %323 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %322, i32 0, i32 5
  %324 = load i32, ptr %323, align 4, !tbaa !44
  %325 = icmp eq i32 %324, 1
  br i1 %325, label %326, label %362

326:                                              ; preds = %321
  %327 = load ptr, ptr %31, align 8, !tbaa !5
  %328 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %327, i32 0, i32 2
  %329 = load i32, ptr %328, align 8, !tbaa !45
  %330 = icmp ne i32 %329, 15
  br i1 %330, label %331, label %362

331:                                              ; preds = %326
  %332 = load ptr, ptr %31, align 8, !tbaa !5
  %333 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %332, i32 0, i32 6
  %334 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %333) #8
  br i1 %334, label %335, label %362

335:                                              ; preds = %331
  %336 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %32)
          to label %337 unwind label %343

337:                                              ; preds = %335
  %338 = icmp eq i32 %336, 0
  br i1 %338, label %339, label %355

339:                                              ; preds = %337
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #8
  %340 = load ptr, ptr %36, align 8, !tbaa !5
  %341 = load i32, ptr %340, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %38, i32 noundef %341)
          to label %342 unwind label %351

342:                                              ; preds = %339
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %32, ptr align 4 %38, i64 4, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #8
  br label %361

343:                                              ; preds = %363, %335, %300
  %344 = landingpad { ptr, i32 }
          cleanup
  %345 = extractvalue { ptr, i32 } %344, 0
  store ptr %345, ptr %16, align 8
  %346 = extractvalue { ptr, i32 } %344, 1
  store i32 %346, ptr %17, align 4
  br label %369

347:                                              ; preds = %315, %313, %311, %306
  %348 = landingpad { ptr, i32 }
          cleanup
  %349 = extractvalue { ptr, i32 } %348, 0
  store ptr %349, ptr %16, align 8
  %350 = extractvalue { ptr, i32 } %348, 1
  store i32 %350, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #8
  br label %369

351:                                              ; preds = %339
  %352 = landingpad { ptr, i32 }
          cleanup
  %353 = extractvalue { ptr, i32 } %352, 0
  store ptr %353, ptr %16, align 8
  %354 = extractvalue { ptr, i32 } %352, 1
  store i32 %354, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #8
  br label %369

355:                                              ; preds = %337
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #8
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %39, i32 noundef -1)
          to label %356 unwind label %357

356:                                              ; preds = %355
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %32, ptr align 4 %39, i64 4, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #8
  br label %361

357:                                              ; preds = %355
  %358 = landingpad { ptr, i32 }
          cleanup
  %359 = extractvalue { ptr, i32 } %358, 0
  store ptr %359, ptr %16, align 8
  %360 = extractvalue { ptr, i32 } %358, 1
  store i32 %360, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #8
  br label %369

361:                                              ; preds = %356, %342
  br label %362

362:                                              ; preds = %361, %331, %326, %321, %316
  br label %363

363:                                              ; preds = %362, %305
  %364 = load ptr, ptr %36, align 8, !tbaa !5
  %365 = load i32, ptr %364, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross16DominatorBuilder9add_blockEj(ptr noundef nonnull align 8 dereferenceable(12) %29, i32 noundef %365)
          to label %366 unwind label %343

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

367:                                              ; preds = %366
  %368 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8__detail14_Node_iteratorIjLb1ELb0EEppEv(ptr noundef nonnull align 8 dereferenceable(8) %34) #8
  br label %285

369:                                              ; preds = %357, %351, %347, %343
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #8
  br label %604

370:                                              ; preds = %287
  invoke void @_ZN11spirv_cross16DominatorBuilder29lift_continue_block_dominatorEv(ptr noundef nonnull align 8 dereferenceable(12) %29)
          to label %371 unwind label %296

371:                                              ; preds = %370
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #8
  %372 = invoke noundef i32 @_ZNK11spirv_cross16DominatorBuilder13get_dominatorEv(ptr noundef nonnull align 8 dereferenceable(12) %29)
          to label %373 unwind label %399

373:                                              ; preds = %371
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %40, i32 noundef %372)
          to label %374 unwind label %399

374:                                              ; preds = %373
  %375 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %40)
          to label %376 unwind label %399

376:                                              ; preds = %374
  %377 = icmp ne i32 %375, 0
  br i1 %377, label %378, label %464

378:                                              ; preds = %376
  %379 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %32)
          to label %380 unwind label %399

380:                                              ; preds = %378
  %381 = icmp ne i32 %379, 0
  br i1 %381, label %382, label %464

382:                                              ; preds = %380
  %383 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %32)
          to label %384 unwind label %399

384:                                              ; preds = %382
  %385 = icmp ne i32 %383, -1
  br i1 %385, label %386, label %464

386:                                              ; preds = %384
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #8
  %387 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %40)
          to label %388 unwind label %403

388:                                              ; preds = %386
  %389 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 noundef %387)
          to label %390 unwind label %403

390:                                              ; preds = %388
  store ptr %389, ptr %41, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #8
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %42, i32 noundef 0)
          to label %391 unwind label %407

391:                                              ; preds = %390
  %392 = load ptr, ptr %41, align 8, !tbaa !5
  %393 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %392, i32 0, i32 2
  %394 = load i32, ptr %393, align 8, !tbaa !46
  %395 = icmp eq i32 %394, 1
  br i1 %395, label %396, label %411

396:                                              ; preds = %391
  %397 = load ptr, ptr %41, align 8, !tbaa !5
  %398 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %397, i32 0, i32 5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %42, ptr align 4 %398, i64 4, i1 false), !tbaa.struct !11
  br label %426

399:                                              ; preds = %567, %479, %474, %472, %468, %464, %382, %378, %374, %373, %371
  %400 = landingpad { ptr, i32 }
          cleanup
  %401 = extractvalue { ptr, i32 } %400, 0
  store ptr %401, ptr %16, align 8
  %402 = extractvalue { ptr, i32 } %400, 1
  store i32 %402, ptr %17, align 4
  br label %603

403:                                              ; preds = %388, %386
  %404 = landingpad { ptr, i32 }
          cleanup
  %405 = extractvalue { ptr, i32 } %404, 0
  store ptr %405, ptr %16, align 8
  %406 = extractvalue { ptr, i32 } %404, 1
  store i32 %406, ptr %17, align 4
  br label %463

407:                                              ; preds = %450, %447, %445, %442, %439, %436, %433, %430, %426, %421, %417, %411, %390
  %408 = landingpad { ptr, i32 }
          cleanup
  %409 = extractvalue { ptr, i32 } %408, 0
  store ptr %409, ptr %16, align 8
  %410 = extractvalue { ptr, i32 } %408, 1
  store i32 %410, ptr %17, align 4
  br label %462

411:                                              ; preds = %391
  %412 = load ptr, ptr %41, align 8, !tbaa !5
  %413 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %412, i32 0, i32 23
  %414 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %413)
          to label %415 unwind label %407

415:                                              ; preds = %411
  %416 = icmp ne i32 %414, -1
  br i1 %416, label %417, label %425

417:                                              ; preds = %415
  %418 = load ptr, ptr %41, align 8, !tbaa !5
  %419 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %418, i32 0, i32 23
  %420 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %419)
          to label %421 unwind label %407

421:                                              ; preds = %417
  %422 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 noundef %420)
          to label %423 unwind label %407

423:                                              ; preds = %421
  %424 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %422, i32 0, i32 5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %42, ptr align 4 %424, i64 4, i1 false), !tbaa.struct !11
  br label %425

425:                                              ; preds = %423, %415
  br label %426

426:                                              ; preds = %425, %396
  %427 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %42)
          to label %428 unwind label %407

428:                                              ; preds = %426
  %429 = icmp ne i32 %427, 0
  br i1 %429, label %430, label %461

430:                                              ; preds = %428
  %431 = load ptr, ptr %7, align 8, !tbaa !5
  %432 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %42)
          to label %433 unwind label %407

433:                                              ; preds = %430
  %434 = invoke noundef zeroext i1 @_ZNK11spirv_cross3CFG12is_reachableEj(ptr noundef nonnull align 8 dereferenceable(356) %431, i32 noundef %432)
          to label %435 unwind label %407

435:                                              ; preds = %433
  br i1 %434, label %436, label %461

436:                                              ; preds = %435
  %437 = load ptr, ptr %7, align 8, !tbaa !5
  %438 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %32)
          to label %439 unwind label %407

439:                                              ; preds = %436
  %440 = invoke noundef zeroext i1 @_ZNK11spirv_cross3CFG12is_reachableEj(ptr noundef nonnull align 8 dereferenceable(356) %437, i32 noundef %438)
          to label %441 unwind label %407

441:                                              ; preds = %439
  br i1 %440, label %442, label %454

442:                                              ; preds = %441
  %443 = load ptr, ptr %7, align 8, !tbaa !5
  %444 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %42)
          to label %445 unwind label %407

445:                                              ; preds = %442
  %446 = invoke noundef i32 @_ZNK11spirv_cross3CFG15get_visit_orderEj(ptr noundef nonnull align 8 dereferenceable(356) %443, i32 noundef %444)
          to label %447 unwind label %407

447:                                              ; preds = %445
  %448 = load ptr, ptr %7, align 8, !tbaa !5
  %449 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %32)
          to label %450 unwind label %407

450:                                              ; preds = %447
  %451 = invoke noundef i32 @_ZNK11spirv_cross3CFG15get_visit_orderEj(ptr noundef nonnull align 8 dereferenceable(356) %448, i32 noundef %449)
          to label %452 unwind label %407

452:                                              ; preds = %450
  %453 = icmp ugt i32 %446, %451
  br i1 %453, label %454, label %460

454:                                              ; preds = %452, %441
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #8
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %43, i32 noundef 0)
          to label %455 unwind label %456

455:                                              ; preds = %454
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %32, ptr align 4 %43, i64 4, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #8
  br label %460

456:                                              ; preds = %454
  %457 = landingpad { ptr, i32 }
          cleanup
  %458 = extractvalue { ptr, i32 } %457, 0
  store ptr %458, ptr %16, align 8
  %459 = extractvalue { ptr, i32 } %457, 1
  store i32 %459, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #8
  br label %462

460:                                              ; preds = %455, %452
  br label %461

461:                                              ; preds = %460, %435, %428
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #8
  br label %464

462:                                              ; preds = %456, %407
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #8
  br label %463

463:                                              ; preds = %462, %403
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #8
  br label %603

464:                                              ; preds = %461, %384, %380, %376
  %465 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %32)
          to label %466 unwind label %399

466:                                              ; preds = %464
  %467 = icmp ne i32 %465, 0
  br i1 %467, label %468, label %479

468:                                              ; preds = %466
  %469 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %32)
          to label %470 unwind label %399

470:                                              ; preds = %468
  %471 = icmp ne i32 %469, -1
  br i1 %471, label %472, label %479

472:                                              ; preds = %470
  %473 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %32)
          to label %474 unwind label %399

474:                                              ; preds = %472
  %475 = load ptr, ptr %27, align 8, !tbaa !5
  %476 = getelementptr inbounds %"struct.std::pair.343", ptr %475, i32 0, i32 0
  %477 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEEixERS5_(ptr noundef nonnull align 8 dereferenceable(56) %10, ptr noundef nonnull align 4 dereferenceable(4) %476)
          to label %478 unwind label %399

478:                                              ; preds = %474
  store i32 %473, ptr %477, align 4, !tbaa !9
  br label %479

479:                                              ; preds = %478, %470, %466
  %480 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %40)
          to label %481 unwind label %399

481:                                              ; preds = %479
  %482 = icmp ne i32 %480, 0
  br i1 %482, label %483, label %567

483:                                              ; preds = %481
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #8
  %484 = load ptr, ptr %27, align 8, !tbaa !5
  %485 = getelementptr inbounds %"struct.std::pair.343", ptr %484, i32 0, i32 0
  %486 = load i32, ptr %485, align 8, !tbaa !12
  %487 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 noundef %486)
          to label %488 unwind label %524

488:                                              ; preds = %483
  store ptr %487, ptr %44, align 8, !tbaa !5
  %489 = load ptr, ptr %44, align 8, !tbaa !5
  %490 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %489, i32 0, i32 12
  %491 = load i8, ptr %490, align 1, !tbaa !71, !range !74, !noundef !75
  %492 = trunc i8 %491 to i1
  br i1 %492, label %565, label %493

493:                                              ; preds = %488
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #8
  %494 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %40)
          to label %495 unwind label %528

495:                                              ; preds = %493
  %496 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 noundef %494)
          to label %497 unwind label %528

497:                                              ; preds = %495
  store ptr %496, ptr %45, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %46) #8
  %498 = load ptr, ptr %45, align 8, !tbaa !5
  %499 = load ptr, ptr %27, align 8, !tbaa !5
  %500 = getelementptr inbounds %"struct.std::pair.343", ptr %499, i32 0, i32 0
  %501 = load i32, ptr %500, align 8, !tbaa !12
  %502 = invoke noundef zeroext i1 @_ZN11spirv_cross8Compiler36may_read_undefined_variable_in_blockERKNS_9SPIRBlockEj(ptr noundef nonnull align 8 dereferenceable(3176) %100, ptr noundef nonnull align 8 dereferenceable(976) %498, i32 noundef %501)
          to label %503 unwind label %532

503:                                              ; preds = %497
  %504 = zext i1 %502 to i8
  store i8 %504, ptr %46, align 1, !tbaa !76
  %505 = load i8, ptr %46, align 1, !tbaa !76, !range !74, !noundef !75
  %506 = trunc i8 %505 to i1
  br i1 %506, label %507, label %562

507:                                              ; preds = %503
  br label %508

508:                                              ; preds = %523, %507
  %509 = load ptr, ptr %45, align 8, !tbaa !5
  %510 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %509, i32 0, i32 23
  %511 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %510)
          to label %512 unwind label %532

512:                                              ; preds = %508
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #8
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %47, i32 noundef -1)
          to label %513 unwind label %536

513:                                              ; preds = %512
  %514 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %47)
          to label %515 unwind label %536

515:                                              ; preds = %513
  %516 = icmp ne i32 %511, %514
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #8
  br i1 %516, label %517, label %540

517:                                              ; preds = %515
  %518 = load ptr, ptr %45, align 8, !tbaa !5
  %519 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %518, i32 0, i32 23
  %520 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %519)
          to label %521 unwind label %532

521:                                              ; preds = %517
  %522 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 noundef %520)
          to label %523 unwind label %532

523:                                              ; preds = %521
  store ptr %522, ptr %45, align 8, !tbaa !5
  br label %508, !llvm.loop !77

524:                                              ; preds = %483
  %525 = landingpad { ptr, i32 }
          cleanup
  %526 = extractvalue { ptr, i32 } %525, 0
  store ptr %526, ptr %16, align 8
  %527 = extractvalue { ptr, i32 } %525, 1
  store i32 %527, ptr %17, align 4
  br label %566

528:                                              ; preds = %495, %493
  %529 = landingpad { ptr, i32 }
          cleanup
  %530 = extractvalue { ptr, i32 } %529, 0
  store ptr %530, ptr %16, align 8
  %531 = extractvalue { ptr, i32 } %529, 1
  store i32 %531, ptr %17, align 4
  br label %564

532:                                              ; preds = %552, %548, %544, %540, %521, %517, %508, %497
  %533 = landingpad { ptr, i32 }
          cleanup
  %534 = extractvalue { ptr, i32 } %533, 0
  store ptr %534, ptr %16, align 8
  %535 = extractvalue { ptr, i32 } %533, 1
  store i32 %535, ptr %17, align 4
  br label %563

536:                                              ; preds = %513, %512
  %537 = landingpad { ptr, i32 }
          cleanup
  %538 = extractvalue { ptr, i32 } %537, 0
  store ptr %538, ptr %16, align 8
  %539 = extractvalue { ptr, i32 } %537, 1
  store i32 %539, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #8
  br label %563

540:                                              ; preds = %515
  %541 = load ptr, ptr %45, align 8, !tbaa !5
  %542 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %541, i32 0, i32 1
  %543 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %542)
          to label %544 unwind label %532

544:                                              ; preds = %540
  %545 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %40)
          to label %546 unwind label %532

546:                                              ; preds = %544
  %547 = icmp ne i32 %543, %545
  br i1 %547, label %548, label %561

548:                                              ; preds = %546
  %549 = load ptr, ptr %45, align 8, !tbaa !5
  %550 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %549, i32 0, i32 1
  %551 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %550)
          to label %552 unwind label %532

552:                                              ; preds = %548
  invoke void @_ZN11spirv_cross16DominatorBuilder9add_blockEj(ptr noundef nonnull align 8 dereferenceable(12) %29, i32 noundef %551)
          to label %553 unwind label %532

553:                                              ; preds = %552
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #8
  %554 = invoke noundef i32 @_ZNK11spirv_cross16DominatorBuilder13get_dominatorEv(ptr noundef nonnull align 8 dereferenceable(12) %29)
          to label %555 unwind label %557

555:                                              ; preds = %553
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %48, i32 noundef %554)
          to label %556 unwind label %557

556:                                              ; preds = %555
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %40, ptr align 4 %48, i64 4, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #8
  br label %561

557:                                              ; preds = %555, %553
  %558 = landingpad { ptr, i32 }
          cleanup
  %559 = extractvalue { ptr, i32 } %558, 0
  store ptr %559, ptr %16, align 8
  %560 = extractvalue { ptr, i32 } %558, 1
  store i32 %560, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #8
  br label %563

561:                                              ; preds = %556, %546
  br label %562

562:                                              ; preds = %561, %503
  call void @llvm.lifetime.end.p0(i64 1, ptr %46) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #8
  br label %565

563:                                              ; preds = %557, %536, %532
  call void @llvm.lifetime.end.p0(i64 1, ptr %46) #8
  br label %564

564:                                              ; preds = %563, %528
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #8
  br label %566

565:                                              ; preds = %562, %488
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #8
  br label %567

566:                                              ; preds = %564, %524
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #8
  br label %603

567:                                              ; preds = %565, %481
  %568 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %40)
          to label %569 unwind label %399

569:                                              ; preds = %567
  %570 = icmp ne i32 %568, 0
  br i1 %570, label %571, label %597

571:                                              ; preds = %569
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #8
  %572 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %40)
          to label %573 unwind label %588

573:                                              ; preds = %571
  %574 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 noundef %572)
          to label %575 unwind label %588

575:                                              ; preds = %573
  store ptr %574, ptr %49, align 8, !tbaa !5
  %576 = load ptr, ptr %49, align 8, !tbaa !5
  %577 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %576, i32 0, i32 24
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #8
  %578 = load ptr, ptr %27, align 8, !tbaa !5
  %579 = getelementptr inbounds %"struct.std::pair.343", ptr %578, i32 0, i32 0
  %580 = load i32, ptr %579, align 8, !tbaa !12
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %50, i32 noundef %580)
          to label %581 unwind label %592

581:                                              ; preds = %575
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE2EEELm8EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %577, ptr noundef nonnull align 4 dereferenceable(4) %50) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #8
  %582 = load ptr, ptr %27, align 8, !tbaa !5
  %583 = getelementptr inbounds %"struct.std::pair.343", ptr %582, i32 0, i32 0
  %584 = load i32, ptr %583, align 8, !tbaa !12
  %585 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 noundef %584)
          to label %586 unwind label %588

586:                                              ; preds = %581
  %587 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %585, i32 0, i32 16
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %587, ptr align 4 %40, i64 4, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #8
  br label %597

588:                                              ; preds = %581, %573, %571
  %589 = landingpad { ptr, i32 }
          cleanup
  %590 = extractvalue { ptr, i32 } %589, 0
  store ptr %590, ptr %16, align 8
  %591 = extractvalue { ptr, i32 } %589, 1
  store i32 %591, ptr %17, align 4
  br label %596

592:                                              ; preds = %575
  %593 = landingpad { ptr, i32 }
          cleanup
  %594 = extractvalue { ptr, i32 } %593, 0
  store ptr %594, ptr %16, align 8
  %595 = extractvalue { ptr, i32 } %593, 1
  store i32 %595, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #8
  br label %596

596:                                              ; preds = %592, %588
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #8
  br label %603

597:                                              ; preds = %586, %569
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #8
  store i32 0, ptr %26, align 4
  br label %598

598:                                              ; preds = %597, %256
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #8
  %599 = load i32, ptr %26, align 4
  switch i32 %599, label %1175 [
    i32 0, label %600
    i32 5, label %601
  ]

600:                                              ; preds = %598
  br label %601

601:                                              ; preds = %600, %598
  %602 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8__detail14_Node_iteratorISt4pairIKjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEELb0ELb0EEppEv(ptr noundef nonnull align 8 dereferenceable(8) %24) #8
  br label %232

603:                                              ; preds = %596, %566, %463, %399
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #8
  br label %604

604:                                              ; preds = %603, %369, %296
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #8
  br label %605

605:                                              ; preds = %604, %292
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  br label %606

606:                                              ; preds = %605, %288
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #8
  br label %607

607:                                              ; preds = %606, %261, %257
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  br label %1169

608:                                              ; preds = %234
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #8
  %609 = load ptr, ptr %6, align 8, !tbaa !5
  %610 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %609, i32 0, i32 4
  store ptr %610, ptr %51, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #8
  %611 = load ptr, ptr %51, align 8, !tbaa !5
  %612 = call ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(56) %611) #8
  %613 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.346", ptr %52, i32 0, i32 0
  %614 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.300", ptr %613, i32 0, i32 0
  store ptr %612, ptr %614, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #8
  %615 = load ptr, ptr %51, align 8, !tbaa !5
  %616 = call ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %615) #8
  %617 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.346", ptr %53, i32 0, i32 0
  %618 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.300", ptr %617, i32 0, i32 0
  store ptr %616, ptr %618, align 8
  br label %619

619:                                              ; preds = %871, %608
  %620 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseISt4pairIKjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEELb0EEESD_(ptr noundef nonnull align 8 dereferenceable(8) %52, ptr noundef nonnull align 8 dereferenceable(8) %53) #8
  br i1 %620, label %622, label %621

621:                                              ; preds = %619
  store i32 10, ptr %26, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #8
  br label %878

622:                                              ; preds = %619
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #8
  %623 = call noundef nonnull align 8 dereferenceable(64) ptr @_ZNKSt8__detail14_Node_iteratorISt4pairIKjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEELb0ELb0EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %52) #8
  store ptr %623, ptr %54, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #8
  %624 = load ptr, ptr %6, align 8, !tbaa !5
  %625 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %624, i32 0, i32 5
  %626 = load ptr, ptr %54, align 8, !tbaa !5
  %627 = getelementptr inbounds %"struct.std::pair.343", ptr %626, i32 0, i32 0
  %628 = invoke ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEE4findERS5_(ptr noundef nonnull align 8 dereferenceable(56) %625, ptr noundef nonnull align 4 dereferenceable(4) %627)
          to label %629 unwind label %640

629:                                              ; preds = %622
  %630 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.289", ptr %55, i32 0, i32 0
  %631 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.259", ptr %630, i32 0, i32 0
  store ptr %628, ptr %631, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #8
  %632 = load ptr, ptr %6, align 8, !tbaa !5
  %633 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %632, i32 0, i32 5
  %634 = invoke ptr @_ZSt3endISt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(56) %633)
          to label %635 unwind label %644

635:                                              ; preds = %629
  %636 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.289", ptr %56, i32 0, i32 0
  %637 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.259", ptr %636, i32 0, i32 0
  store ptr %634, ptr %637, align 8
  %638 = call noundef zeroext i1 @_ZNSt8__detaileqERKNS_19_Node_iterator_baseISt4pairIKjjELb0EEES6_(ptr noundef nonnull align 8 dereferenceable(8) %55, ptr noundef nonnull align 8 dereferenceable(8) %56) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #8
  br i1 %638, label %639, label %648

639:                                              ; preds = %635
  store i32 11, ptr %26, align 4
  br label %865

640:                                              ; preds = %622
  %641 = landingpad { ptr, i32 }
          cleanup
  %642 = extractvalue { ptr, i32 } %641, 0
  store ptr %642, ptr %16, align 8
  %643 = extractvalue { ptr, i32 } %641, 1
  store i32 %643, ptr %17, align 4
  br label %877

644:                                              ; preds = %629
  %645 = landingpad { ptr, i32 }
          cleanup
  %646 = extractvalue { ptr, i32 } %645, 0
  store ptr %646, ptr %16, align 8
  %647 = extractvalue { ptr, i32 } %645, 1
  store i32 %647, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #8
  br label %877

648:                                              ; preds = %635
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #8
  %649 = call noundef ptr @_ZNKSt8__detail14_Node_iteratorISt4pairIKjjELb0ELb0EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %55) #8
  %650 = getelementptr inbounds %"struct.std::pair.260", ptr %649, i32 0, i32 1
  %651 = load i32, ptr %650, align 4, !tbaa !79
  %652 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 noundef %651)
          to label %653 unwind label %658

653:                                              ; preds = %648
  store ptr %652, ptr %57, align 8, !tbaa !5
  %654 = load ptr, ptr %57, align 8, !tbaa !5
  %655 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler20type_is_opaque_valueERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %100, ptr noundef nonnull align 8 dereferenceable(336) %654)
          to label %656 unwind label %658

656:                                              ; preds = %653
  br i1 %655, label %657, label %662

657:                                              ; preds = %656
  store i32 11, ptr %26, align 4
  br label %864

658:                                              ; preds = %653, %648
  %659 = landingpad { ptr, i32 }
          cleanup
  %660 = extractvalue { ptr, i32 } %659, 0
  store ptr %660, ptr %16, align 8
  %661 = extractvalue { ptr, i32 } %659, 1
  store i32 %661, ptr %17, align 4
  br label %876

662:                                              ; preds = %656
  call void @llvm.lifetime.start.p0(i64 16, ptr %58) #8
  %663 = load ptr, ptr %7, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross16DominatorBuilderC1ERKNS_3CFGE(ptr noundef nonnull align 8 dereferenceable(12) %58, ptr noundef nonnull align 8 dereferenceable(356) %663)
          to label %664 unwind label %679

664:                                              ; preds = %662
  call void @llvm.lifetime.start.p0(i64 1, ptr %59) #8
  store i8 0, ptr %59, align 1, !tbaa !76
  call void @llvm.lifetime.start.p0(i64 1, ptr %60) #8
  store i8 0, ptr %60, align 1, !tbaa !76
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #8
  %665 = load ptr, ptr %54, align 8, !tbaa !5
  %666 = getelementptr inbounds %"struct.std::pair.343", ptr %665, i32 0, i32 1
  store ptr %666, ptr %61, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #8
  %667 = load ptr, ptr %61, align 8, !tbaa !5
  store ptr %667, ptr %62, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #8
  %668 = load ptr, ptr %62, align 8, !tbaa !5
  %669 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5beginEv(ptr noundef nonnull align 8 dereferenceable(56) %668) #8
  %670 = getelementptr inbounds %"struct.std::__detail::_Node_iterator", ptr %63, i32 0, i32 0
  %671 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base", ptr %670, i32 0, i32 0
  store ptr %669, ptr %671, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #8
  %672 = load ptr, ptr %62, align 8, !tbaa !5
  %673 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %672) #8
  %674 = getelementptr inbounds %"struct.std::__detail::_Node_iterator", ptr %64, i32 0, i32 0
  %675 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base", ptr %674, i32 0, i32 0
  store ptr %673, ptr %675, align 8
  br label %676

676:                                              ; preds = %735, %664
  %677 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseIjLb0EEES3_(ptr noundef nonnull align 8 dereferenceable(8) %63, ptr noundef nonnull align 8 dereferenceable(8) %64) #8
  br i1 %677, label %683, label %678

678:                                              ; preds = %676
  store i32 12, ptr %26, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #8
  br label %738

679:                                              ; preds = %662
  %680 = landingpad { ptr, i32 }
          cleanup
  %681 = extractvalue { ptr, i32 } %680, 0
  store ptr %681, ptr %16, align 8
  %682 = extractvalue { ptr, i32 } %680, 1
  store i32 %682, ptr %17, align 4
  br label %875

683:                                              ; preds = %676
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #8
  %684 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt8__detail14_Node_iteratorIjLb1ELb0EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %63) #8
  store ptr %684, ptr %65, align 8, !tbaa !5
  %685 = load ptr, ptr %65, align 8, !tbaa !5
  %686 = load i32, ptr %685, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross16DominatorBuilder9add_blockEj(ptr noundef nonnull align 8 dereferenceable(12) %58, i32 noundef %686)
          to label %687 unwind label %714

687:                                              ; preds = %683
  %688 = load ptr, ptr %61, align 8, !tbaa !5
  %689 = call noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(56) %688) #8
  %690 = icmp ne i64 %689, 1
  br i1 %690, label %691, label %734

691:                                              ; preds = %687
  %692 = load ptr, ptr %65, align 8, !tbaa !5
  %693 = load i32, ptr %692, align 4, !tbaa !9
  %694 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler11is_continueEj(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 noundef %693)
          to label %695 unwind label %714

695:                                              ; preds = %691
  br i1 %694, label %696, label %734

696:                                              ; preds = %695
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #8
  %697 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %100, i32 0, i32 1
  %698 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %697, i32 0, i32 11
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #8
  %699 = load ptr, ptr %65, align 8, !tbaa !5
  %700 = load i32, ptr %699, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %67, i32 noundef %700)
          to label %701 unwind label %718

701:                                              ; preds = %696
  %702 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE6EEES3_St4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S3_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %698, ptr noundef nonnull align 4 dereferenceable(4) %67)
          to label %703 unwind label %718

703:                                              ; preds = %701
  %704 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %702)
          to label %705 unwind label %718

705:                                              ; preds = %703
  %706 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 noundef %704)
          to label %707 unwind label %718

707:                                              ; preds = %705
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #8
  store ptr %706, ptr %66, align 8, !tbaa !5
  %708 = load ptr, ptr %66, align 8, !tbaa !5
  %709 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %708, i32 0, i32 2
  %710 = load i32, ptr %709, align 8, !tbaa !46
  %711 = icmp eq i32 %710, 1
  br i1 %711, label %712, label %713

712:                                              ; preds = %707
  br label %723

713:                                              ; preds = %707
  call void @__assert_fail(ptr noundef @.str.27, ptr noundef @.str.5, i32 noundef 4116, ptr noundef @__PRETTY_FUNCTION__._ZN11spirv_cross8Compiler22analyze_variable_scopeERNS_12SPIRFunctionERNS0_33AnalyzeVariableScopeAccessHandlerE) #9
  unreachable

714:                                              ; preds = %691, %683
  %715 = landingpad { ptr, i32 }
          cleanup
  %716 = extractvalue { ptr, i32 } %715, 0
  store ptr %716, ptr %16, align 8
  %717 = extractvalue { ptr, i32 } %715, 1
  store i32 %717, ptr %17, align 4
  br label %737

718:                                              ; preds = %705, %703, %701, %696
  %719 = landingpad { ptr, i32 }
          cleanup
  %720 = extractvalue { ptr, i32 } %719, 0
  store ptr %720, ptr %16, align 8
  %721 = extractvalue { ptr, i32 } %719, 1
  store i32 %721, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #8
  br label %733

722:                                              ; No predecessors!
  br label %723

723:                                              ; preds = %722, %712
  %724 = load ptr, ptr %66, align 8, !tbaa !5
  %725 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %724, i32 0, i32 1
  %726 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %725)
          to label %727 unwind label %729

727:                                              ; preds = %723
  invoke void @_ZN11spirv_cross16DominatorBuilder9add_blockEj(ptr noundef nonnull align 8 dereferenceable(12) %58, i32 noundef %726)
          to label %728 unwind label %729

728:                                              ; preds = %727
  store i8 1, ptr %60, align 1, !tbaa !76
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #8
  br label %734

729:                                              ; preds = %727, %723
  %730 = landingpad { ptr, i32 }
          cleanup
  %731 = extractvalue { ptr, i32 } %730, 0
  store ptr %731, ptr %16, align 8
  %732 = extractvalue { ptr, i32 } %730, 1
  store i32 %732, ptr %17, align 4
  br label %733

733:                                              ; preds = %729, %718
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #8
  br label %737

734:                                              ; preds = %728, %695, %687
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #8
  br label %735

735:                                              ; preds = %734
  %736 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8__detail14_Node_iteratorIjLb1ELb0EEppEv(ptr noundef nonnull align 8 dereferenceable(8) %63) #8
  br label %676

737:                                              ; preds = %733, %714
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #8
  br label %874

738:                                              ; preds = %678
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #8
  %739 = invoke noundef i32 @_ZNK11spirv_cross16DominatorBuilder13get_dominatorEv(ptr noundef nonnull align 8 dereferenceable(12) %58)
          to label %740 unwind label %749

740:                                              ; preds = %738
  store i32 %739, ptr %68, align 4, !tbaa !9
  %741 = load ptr, ptr %61, align 8, !tbaa !5
  %742 = call noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(56) %741) #8
  %743 = icmp ne i64 %742, 1
  br i1 %743, label %744, label %753

744:                                              ; preds = %740
  %745 = load i32, ptr %68, align 4, !tbaa !9
  %746 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler20is_single_block_loopEj(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 noundef %745)
          to label %747 unwind label %749

747:                                              ; preds = %744
  br i1 %746, label %748, label %753

748:                                              ; preds = %747
  store i8 1, ptr %59, align 1, !tbaa !76
  br label %753

749:                                              ; preds = %744, %738
  %750 = landingpad { ptr, i32 }
          cleanup
  %751 = extractvalue { ptr, i32 } %750, 0
  store ptr %751, ptr %16, align 8
  %752 = extractvalue { ptr, i32 } %750, 1
  store i32 %752, ptr %17, align 4
  br label %873

753:                                              ; preds = %748, %747, %740
  %754 = load i32, ptr %68, align 4, !tbaa !9
  %755 = icmp ne i32 %754, 0
  br i1 %755, label %756, label %863

756:                                              ; preds = %753
  call void @llvm.lifetime.start.p0(i64 1, ptr %69) #8
  %757 = load ptr, ptr %61, align 8, !tbaa !5
  %758 = invoke noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %757, ptr noundef nonnull align 4 dereferenceable(4) %68)
          to label %759 unwind label %788

759:                                              ; preds = %756
  %760 = icmp ne i64 %758, 0
  %761 = zext i1 %760 to i8
  store i8 %761, ptr %69, align 1, !tbaa !76
  %762 = load i8, ptr %69, align 1, !tbaa !76, !range !74, !noundef !75
  %763 = trunc i8 %762 to i1
  br i1 %763, label %764, label %767

764:                                              ; preds = %759
  %765 = load i8, ptr %59, align 1, !tbaa !76, !range !74, !noundef !75
  %766 = trunc i8 %765 to i1
  br i1 %766, label %767, label %838

767:                                              ; preds = %764, %759
  %768 = load ptr, ptr %6, align 8, !tbaa !5
  %769 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %768, i32 0, i32 8
  %770 = load ptr, ptr %54, align 8, !tbaa !5
  %771 = getelementptr inbounds %"struct.std::pair.343", ptr %770, i32 0, i32 0
  %772 = invoke noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %769, ptr noundef nonnull align 4 dereferenceable(4) %771)
          to label %773 unwind label %788

773:                                              ; preds = %767
  %774 = icmp ne i64 %772, 0
  br i1 %774, label %775, label %801

775:                                              ; preds = %773
  %776 = load i8, ptr %60, align 1, !tbaa !76, !range !74, !noundef !75
  %777 = trunc i8 %776 to i1
  br i1 %777, label %778, label %800

778:                                              ; preds = %775
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #8
  %779 = load i32, ptr %68, align 4, !tbaa !9
  %780 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 noundef %779)
          to label %781 unwind label %792

781:                                              ; preds = %778
  store ptr %780, ptr %70, align 8, !tbaa !5
  %782 = load ptr, ptr %70, align 8, !tbaa !5
  %783 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %782, i32 0, i32 2
  %784 = load i32, ptr %783, align 8, !tbaa !46
  %785 = icmp eq i32 %784, 1
  br i1 %785, label %786, label %787

786:                                              ; preds = %781
  br label %797

787:                                              ; preds = %781
  call void @__assert_fail(ptr noundef @.str.27, ptr noundef @.str.5, i32 noundef 4156, ptr noundef @__PRETTY_FUNCTION__._ZN11spirv_cross8Compiler22analyze_variable_scopeERNS_12SPIRFunctionERNS0_33AnalyzeVariableScopeAccessHandlerE) #9
  unreachable

788:                                              ; preds = %806, %801, %767, %756
  %789 = landingpad { ptr, i32 }
          cleanup
  %790 = extractvalue { ptr, i32 } %789, 0
  store ptr %790, ptr %16, align 8
  %791 = extractvalue { ptr, i32 } %789, 1
  store i32 %791, ptr %17, align 4
  br label %862

792:                                              ; preds = %778
  %793 = landingpad { ptr, i32 }
          cleanup
  %794 = extractvalue { ptr, i32 } %793, 0
  store ptr %794, ptr %16, align 8
  %795 = extractvalue { ptr, i32 } %793, 1
  store i32 %795, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #8
  br label %862

796:                                              ; No predecessors!
  br label %797

797:                                              ; preds = %796, %786
  %798 = load ptr, ptr %70, align 8, !tbaa !5
  %799 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %798, i32 0, i32 20
  store i8 1, ptr %799, align 1, !tbaa !81
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #8
  br label %800

800:                                              ; preds = %797, %775
  br label %837

801:                                              ; preds = %773
  %802 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %100, i32 0, i32 18
  %803 = load ptr, ptr %54, align 8, !tbaa !5
  %804 = getelementptr inbounds %"struct.std::pair.343", ptr %803, i32 0, i32 0
  %805 = invoke { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %802, ptr noundef nonnull align 4 dereferenceable(4) %804)
          to label %806 unwind label %788

806:                                              ; preds = %801
  %807 = getelementptr inbounds { ptr, i8 }, ptr %71, i32 0, i32 0
  %808 = extractvalue { ptr, i8 } %805, 0
  store ptr %808, ptr %807, align 8
  %809 = getelementptr inbounds { ptr, i8 }, ptr %71, i32 0, i32 1
  %810 = extractvalue { ptr, i8 } %805, 1
  store i8 %810, ptr %809, align 8
  %811 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %100, i32 0, i32 15
  %812 = load ptr, ptr %54, align 8, !tbaa !5
  %813 = getelementptr inbounds %"struct.std::pair.343", ptr %812, i32 0, i32 0
  %814 = invoke { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %811, ptr noundef nonnull align 4 dereferenceable(4) %813)
          to label %815 unwind label %788

815:                                              ; preds = %806
  %816 = getelementptr inbounds { ptr, i8 }, ptr %72, i32 0, i32 0
  %817 = extractvalue { ptr, i8 } %814, 0
  store ptr %817, ptr %816, align 8
  %818 = getelementptr inbounds { ptr, i8 }, ptr %72, i32 0, i32 1
  %819 = extractvalue { ptr, i8 } %814, 1
  store i8 %819, ptr %818, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #8
  %820 = load i32, ptr %68, align 4, !tbaa !9
  %821 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 noundef %820)
          to label %822 unwind label %833

822:                                              ; preds = %815
  %823 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %821, i32 0, i32 15
  store ptr %823, ptr %73, align 8, !tbaa !5
  %824 = load ptr, ptr %73, align 8, !tbaa !5
  %825 = load ptr, ptr %6, align 8, !tbaa !5
  %826 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %825, i32 0, i32 5
  %827 = load ptr, ptr %54, align 8, !tbaa !5
  %828 = getelementptr inbounds %"struct.std::pair.343", ptr %827, i32 0, i32 0
  %829 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEEixERS5_(ptr noundef nonnull align 8 dereferenceable(56) %826, ptr noundef nonnull align 4 dereferenceable(4) %828)
          to label %830 unwind label %833

830:                                              ; preds = %822
  %831 = load ptr, ptr %54, align 8, !tbaa !5
  %832 = getelementptr inbounds %"struct.std::pair.343", ptr %831, i32 0, i32 0
  call void @_ZN11spirv_cross11SmallVectorISt4pairINS_7TypedIDILNS_5TypesE1EEENS2_ILS3_0EEEELm8EE12emplace_backIJRjRKjEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(88) %824, ptr noundef nonnull align 4 dereferenceable(4) %829, ptr noundef nonnull align 4 dereferenceable(4) %832) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #8
  br label %837

833:                                              ; preds = %822, %815
  %834 = landingpad { ptr, i32 }
          cleanup
  %835 = extractvalue { ptr, i32 } %834, 0
  store ptr %835, ptr %16, align 8
  %836 = extractvalue { ptr, i32 } %834, 1
  store i32 %836, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #8
  br label %862

837:                                              ; preds = %830, %800
  br label %861

838:                                              ; preds = %764
  %839 = load ptr, ptr %61, align 8, !tbaa !5
  %840 = call noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(56) %839) #8
  %841 = icmp ugt i64 %840, 1
  br i1 %841, label %842, label %860

842:                                              ; preds = %838
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #8
  %843 = load i32, ptr %68, align 4, !tbaa !9
  %844 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 noundef %843)
          to label %845 unwind label %856

845:                                              ; preds = %842
  %846 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %844, i32 0, i32 16
  store ptr %846, ptr %74, align 8, !tbaa !5
  %847 = load ptr, ptr %74, align 8, !tbaa !5
  %848 = load ptr, ptr %6, align 8, !tbaa !5
  %849 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %848, i32 0, i32 5
  %850 = load ptr, ptr %54, align 8, !tbaa !5
  %851 = getelementptr inbounds %"struct.std::pair.343", ptr %850, i32 0, i32 0
  %852 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEEixERS5_(ptr noundef nonnull align 8 dereferenceable(56) %849, ptr noundef nonnull align 4 dereferenceable(4) %851)
          to label %853 unwind label %856

853:                                              ; preds = %845
  %854 = load ptr, ptr %54, align 8, !tbaa !5
  %855 = getelementptr inbounds %"struct.std::pair.343", ptr %854, i32 0, i32 0
  call void @_ZN11spirv_cross11SmallVectorISt4pairINS_7TypedIDILNS_5TypesE1EEENS2_ILS3_0EEEELm8EE12emplace_backIJRjRKjEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(88) %847, ptr noundef nonnull align 4 dereferenceable(4) %852, ptr noundef nonnull align 4 dereferenceable(4) %855) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #8
  br label %860

856:                                              ; preds = %845, %842
  %857 = landingpad { ptr, i32 }
          cleanup
  %858 = extractvalue { ptr, i32 } %857, 0
  store ptr %858, ptr %16, align 8
  %859 = extractvalue { ptr, i32 } %857, 1
  store i32 %859, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #8
  br label %862

860:                                              ; preds = %853, %838
  br label %861

861:                                              ; preds = %860, %837
  call void @llvm.lifetime.end.p0(i64 1, ptr %69) #8
  br label %863

862:                                              ; preds = %856, %833, %792, %788
  call void @llvm.lifetime.end.p0(i64 1, ptr %69) #8
  br label %873

863:                                              ; preds = %861, %753
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %60) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %59) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %58) #8
  store i32 0, ptr %26, align 4
  br label %864

864:                                              ; preds = %863, %657
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #8
  br label %865

865:                                              ; preds = %864, %639
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #8
  %866 = load i32, ptr %26, align 4
  switch i32 %866, label %868 [
    i32 0, label %867
  ]

867:                                              ; preds = %865
  store i32 0, ptr %26, align 4
  br label %868

868:                                              ; preds = %867, %865
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #8
  %869 = load i32, ptr %26, align 4
  switch i32 %869, label %1175 [
    i32 0, label %870
    i32 11, label %871
  ]

870:                                              ; preds = %868
  br label %871

871:                                              ; preds = %870, %868
  %872 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8__detail14_Node_iteratorISt4pairIKjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEELb0ELb0EEppEv(ptr noundef nonnull align 8 dereferenceable(8) %52) #8
  br label %619

873:                                              ; preds = %862, %749
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #8
  br label %874

874:                                              ; preds = %873, %737
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %60) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %59) #8
  br label %875

875:                                              ; preds = %874, %679
  call void @llvm.lifetime.end.p0(i64 16, ptr %58) #8
  br label %876

876:                                              ; preds = %875, %658
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #8
  br label %877

877:                                              ; preds = %876, %644, %640
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #8
  br label %1169

878:                                              ; preds = %621
  call void @llvm.lifetime.start.p0(i64 56, ptr %75) #8
  call void @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEC2Ev(ptr noundef nonnull align 8 dereferenceable(56) %75) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %76) #8
  store ptr %10, ptr %76, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #8
  %879 = load ptr, ptr %76, align 8, !tbaa !5
  %880 = call ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(56) %879) #8
  %881 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.289", ptr %77, i32 0, i32 0
  %882 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.259", ptr %881, i32 0, i32 0
  store ptr %880, ptr %882, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #8
  %883 = load ptr, ptr %76, align 8, !tbaa !5
  %884 = call ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %883) #8
  %885 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.289", ptr %78, i32 0, i32 0
  %886 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.259", ptr %885, i32 0, i32 0
  store ptr %884, ptr %886, align 8
  br label %887

887:                                              ; preds = %1155, %878
  %888 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseISt4pairIKjjELb0EEES6_(ptr noundef nonnull align 8 dereferenceable(8) %77, ptr noundef nonnull align 8 dereferenceable(8) %78) #8
  br i1 %888, label %890, label %889

889:                                              ; preds = %887
  store i32 14, ptr %26, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #8
  br label %1168

890:                                              ; preds = %887
  call void @llvm.lifetime.start.p0(i64 8, ptr %79) #8
  %891 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNKSt8__detail14_Node_iteratorISt4pairIKjjELb0ELb0EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %77) #8
  store ptr %891, ptr %79, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %80) #8
  %892 = load ptr, ptr %79, align 8, !tbaa !5
  %893 = getelementptr inbounds %"struct.std::pair.260", ptr %892, i32 0, i32 0
  %894 = load i32, ptr %893, align 4, !tbaa !82
  %895 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 noundef %894)
          to label %896 unwind label %919

896:                                              ; preds = %890
  store ptr %895, ptr %80, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %81) #8
  %897 = load ptr, ptr %80, align 8, !tbaa !5
  %898 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %897, i32 0, i32 16
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %81, ptr align 8 %898, i64 4, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %82) #8
  %899 = load ptr, ptr %79, align 8, !tbaa !5
  %900 = getelementptr inbounds %"struct.std::pair.260", ptr %899, i32 0, i32 1
  %901 = load i32, ptr %900, align 4, !tbaa !79
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %82, i32 noundef %901)
          to label %902 unwind label %923

902:                                              ; preds = %896
  call void @llvm.lifetime.start.p0(i64 4, ptr %84) #8
  %903 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %82)
          to label %904 unwind label %923

904:                                              ; preds = %902
  call void @llvm.lifetime.start.p0(i64 4, ptr %83) #8
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %83, i32 noundef -1)
          to label %905 unwind label %927

905:                                              ; preds = %904
  %906 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %83)
          to label %907 unwind label %927

907:                                              ; preds = %905
  %908 = icmp eq i32 %903, %906
  br i1 %908, label %916, label %909

909:                                              ; preds = %907
  %910 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %82)
          to label %911 unwind label %927

911:                                              ; preds = %909
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %84, i32 noundef 0)
          to label %912 unwind label %931

912:                                              ; preds = %911
  %913 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %84)
          to label %914 unwind label %931

914:                                              ; preds = %912
  %915 = icmp eq i32 %910, %913
  br label %916

916:                                              ; preds = %914, %907
  %917 = phi i1 [ true, %907 ], [ %915, %914 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #8
  br i1 %917, label %918, label %936

918:                                              ; preds = %916
  store i32 15, ptr %26, align 4
  br label %1149

919:                                              ; preds = %890
  %920 = landingpad { ptr, i32 }
          cleanup
  %921 = extractvalue { ptr, i32 } %920, 0
  store ptr %921, ptr %16, align 8
  %922 = extractvalue { ptr, i32 } %920, 1
  store i32 %922, ptr %17, align 4
  br label %1167

923:                                              ; preds = %936, %902, %896
  %924 = landingpad { ptr, i32 }
          cleanup
  %925 = extractvalue { ptr, i32 } %924, 0
  store ptr %925, ptr %16, align 8
  %926 = extractvalue { ptr, i32 } %924, 1
  store i32 %926, ptr %17, align 4
  br label %1166

927:                                              ; preds = %909, %905, %904
  %928 = landingpad { ptr, i32 }
          cleanup
  %929 = extractvalue { ptr, i32 } %928, 0
  store ptr %929, ptr %16, align 8
  %930 = extractvalue { ptr, i32 } %928, 1
  store i32 %930, ptr %17, align 4
  br label %935

931:                                              ; preds = %912, %911
  %932 = landingpad { ptr, i32 }
          cleanup
  %933 = extractvalue { ptr, i32 } %932, 0
  store ptr %933, ptr %16, align 8
  %934 = extractvalue { ptr, i32 } %932, 1
  store i32 %934, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #8
  br label %935

935:                                              ; preds = %931, %927
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #8
  br label %1166

936:                                              ; preds = %916
  %937 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %81)
          to label %938 unwind label %923

938:                                              ; preds = %936
  call void @llvm.lifetime.start.p0(i64 4, ptr %85) #8
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %85, i32 noundef 0)
          to label %939 unwind label %944

939:                                              ; preds = %938
  %940 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %85)
          to label %941 unwind label %944

941:                                              ; preds = %939
  %942 = icmp eq i32 %937, %940
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #8
  br i1 %942, label %943, label %948

943:                                              ; preds = %941
  store i32 15, ptr %26, align 4
  br label %1149

944:                                              ; preds = %939, %938
  %945 = landingpad { ptr, i32 }
          cleanup
  %946 = extractvalue { ptr, i32 } %945, 0
  store ptr %946, ptr %16, align 8
  %947 = extractvalue { ptr, i32 } %945, 1
  store i32 %947, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #8
  br label %1166

948:                                              ; preds = %941
  call void @llvm.lifetime.start.p0(i64 4, ptr %86) #8
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %86, i32 noundef 0)
          to label %949 unwind label %966

949:                                              ; preds = %948
  call void @llvm.lifetime.start.p0(i64 8, ptr %87) #8
  %950 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %100, i32 0, i32 1
  %951 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %950, i32 0, i32 11
  %952 = invoke ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE6EEES3_St4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S3_EEE4findERS9_(ptr noundef nonnull align 8 dereferenceable(56) %951, ptr noundef nonnull align 4 dereferenceable(4) %82)
          to label %953 unwind label %970

953:                                              ; preds = %949
  %954 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.360", ptr %87, i32 0, i32 0
  %955 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.361", ptr %954, i32 0, i32 0
  store ptr %952, ptr %955, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %88) #8
  %956 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %100, i32 0, i32 1
  %957 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %956, i32 0, i32 11
  %958 = invoke ptr @_ZSt3endISt13unordered_mapIN11spirv_cross7TypedIDILNS1_5TypesE6EEES4_St4hashIS4_ESt8equal_toIS4_ESaISt4pairIKS4_S4_EEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(56) %957)
          to label %959 unwind label %974

959:                                              ; preds = %953
  %960 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.360", ptr %88, i32 0, i32 0
  %961 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.361", ptr %960, i32 0, i32 0
  store ptr %958, ptr %961, align 8
  %962 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseISt4pairIKN11spirv_cross7TypedIDILNS2_5TypesE6EEES5_ELb1EEESA_(ptr noundef nonnull align 8 dereferenceable(8) %87, ptr noundef nonnull align 8 dereferenceable(8) %88) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #8
  br i1 %962, label %963, label %978

963:                                              ; preds = %959
  %964 = call noundef ptr @_ZNKSt8__detail14_Node_iteratorISt4pairIKN11spirv_cross7TypedIDILNS2_5TypesE6EEES5_ELb0ELb1EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %87) #8
  %965 = getelementptr inbounds %"struct.std::pair.362", ptr %964, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %86, ptr align 4 %965, i64 4, i1 false), !tbaa.struct !11
  br label %991

966:                                              ; preds = %991, %948
  %967 = landingpad { ptr, i32 }
          cleanup
  %968 = extractvalue { ptr, i32 } %967, 0
  store ptr %968, ptr %16, align 8
  %969 = extractvalue { ptr, i32 } %967, 1
  store i32 %969, ptr %17, align 4
  br label %1165

970:                                              ; preds = %985, %982, %980, %978, %949
  %971 = landingpad { ptr, i32 }
          cleanup
  %972 = extractvalue { ptr, i32 } %971, 0
  store ptr %972, ptr %16, align 8
  %973 = extractvalue { ptr, i32 } %971, 1
  store i32 %973, ptr %17, align 4
  br label %997

974:                                              ; preds = %953
  %975 = landingpad { ptr, i32 }
          cleanup
  %976 = extractvalue { ptr, i32 } %975, 0
  store ptr %976, ptr %16, align 8
  %977 = extractvalue { ptr, i32 } %975, 1
  store i32 %977, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #8
  br label %997

978:                                              ; preds = %959
  %979 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %82)
          to label %980 unwind label %970

980:                                              ; preds = %978
  %981 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 noundef %979)
          to label %982 unwind label %970

982:                                              ; preds = %980
  %983 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %981, i32 0, i32 6
  %984 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %983)
          to label %985 unwind label %970

985:                                              ; preds = %982
  %986 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %82)
          to label %987 unwind label %970

987:                                              ; preds = %985
  %988 = icmp eq i32 %984, %986
  br i1 %988, label %989, label %990

989:                                              ; preds = %987
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %86, ptr align 4 %82, i64 4, i1 false), !tbaa.struct !11
  br label %990

990:                                              ; preds = %989, %987
  br label %991

991:                                              ; preds = %990, %963
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #8
  %992 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %86)
          to label %993 unwind label %966

993:                                              ; preds = %991
  %994 = icmp ne i32 %992, 0
  br i1 %994, label %995, label %996

995:                                              ; preds = %993
  br label %999

996:                                              ; preds = %993
  call void @__assert_fail(ptr noundef @.str.28, ptr noundef @.str.5, i32 noundef 4218, ptr noundef @__PRETTY_FUNCTION__._ZN11spirv_cross8Compiler22analyze_variable_scopeERNS_12SPIRFunctionERNS0_33AnalyzeVariableScopeAccessHandlerE) #9
  unreachable

997:                                              ; preds = %974, %970
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #8
  br label %1165

998:                                              ; No predecessors!
  br label %999

999:                                              ; preds = %998, %995
  call void @llvm.lifetime.start.p0(i64 8, ptr %89) #8
  %1000 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %86)
          to label %1001 unwind label %1031

1001:                                             ; preds = %999
  %1002 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 noundef %1000)
          to label %1003 unwind label %1031

1003:                                             ; preds = %1001
  store ptr %1002, ptr %89, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %90) #8
  %1004 = load ptr, ptr %6, align 8, !tbaa !5
  %1005 = getelementptr inbounds %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", ptr %1004, i32 0, i32 3
  %1006 = load ptr, ptr %79, align 8, !tbaa !5
  %1007 = getelementptr inbounds %"struct.std::pair.260", ptr %1006, i32 0, i32 0
  %1008 = invoke noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEEixERS8_(ptr noundef nonnull align 8 dereferenceable(56) %1005, ptr noundef nonnull align 4 dereferenceable(4) %1007)
          to label %1009 unwind label %1035

1009:                                             ; preds = %1003
  store ptr %1008, ptr %90, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %91) #8
  %1010 = load ptr, ptr %90, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %92) #8
  %1011 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %86)
          to label %1012 unwind label %1039

1012:                                             ; preds = %1009
  store i32 %1011, ptr %92, align 4, !tbaa !9
  %1013 = invoke noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %1010, ptr noundef nonnull align 4 dereferenceable(4) %92)
          to label %1014 unwind label %1039

1014:                                             ; preds = %1012
  %1015 = icmp ne i64 %1013, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr %92) #8
  %1016 = zext i1 %1015 to i8
  store i8 %1016, ptr %91, align 1, !tbaa !76
  call void @llvm.lifetime.start.p0(i64 1, ptr %93) #8
  store i8 1, ptr %93, align 1, !tbaa !76
  br label %1017

1017:                                             ; preds = %1095, %1014
  %1018 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %81)
          to label %1019 unwind label %1043

1019:                                             ; preds = %1017
  %1020 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %86)
          to label %1021 unwind label %1043

1021:                                             ; preds = %1019
  %1022 = icmp ne i32 %1018, %1020
  br i1 %1022, label %1023, label %1102

1023:                                             ; preds = %1021
  %1024 = load ptr, ptr %90, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %94) #8
  %1025 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %81)
          to label %1026 unwind label %1047

1026:                                             ; preds = %1023
  store i32 %1025, ptr %94, align 4, !tbaa !9
  %1027 = invoke noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %1024, ptr noundef nonnull align 4 dereferenceable(4) %94)
          to label %1028 unwind label %1047

1028:                                             ; preds = %1026
  %1029 = icmp ne i64 %1027, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr %94) #8
  br i1 %1029, label %1030, label %1051

1030:                                             ; preds = %1028
  store i8 1, ptr %91, align 1, !tbaa !76
  br label %1051

1031:                                             ; preds = %1001, %999
  %1032 = landingpad { ptr, i32 }
          cleanup
  %1033 = extractvalue { ptr, i32 } %1032, 0
  store ptr %1033, ptr %16, align 8
  %1034 = extractvalue { ptr, i32 } %1032, 1
  store i32 %1034, ptr %17, align 4
  br label %1164

1035:                                             ; preds = %1003
  %1036 = landingpad { ptr, i32 }
          cleanup
  %1037 = extractvalue { ptr, i32 } %1036, 0
  store ptr %1037, ptr %16, align 8
  %1038 = extractvalue { ptr, i32 } %1036, 1
  store i32 %1038, ptr %17, align 4
  br label %1163

1039:                                             ; preds = %1012, %1009
  %1040 = landingpad { ptr, i32 }
          cleanup
  %1041 = extractvalue { ptr, i32 } %1040, 0
  store ptr %1041, ptr %16, align 8
  %1042 = extractvalue { ptr, i32 } %1040, 1
  store i32 %1042, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %92) #8
  br label %1162

1043:                                             ; preds = %1141, %1140, %1136, %1132, %1109, %1019, %1017
  %1044 = landingpad { ptr, i32 }
          cleanup
  %1045 = extractvalue { ptr, i32 } %1044, 0
  store ptr %1045, ptr %16, align 8
  %1046 = extractvalue { ptr, i32 } %1044, 1
  store i32 %1046, ptr %17, align 4
  br label %1161

1047:                                             ; preds = %1026, %1023
  %1048 = landingpad { ptr, i32 }
          cleanup
  %1049 = extractvalue { ptr, i32 } %1048, 0
  store ptr %1049, ptr %16, align 8
  %1050 = extractvalue { ptr, i32 } %1048, 1
  store i32 %1050, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %94) #8
  br label %1161

1051:                                             ; preds = %1030, %1028
  call void @llvm.lifetime.start.p0(i64 8, ptr %95) #8
  %1052 = load ptr, ptr %7, align 8, !tbaa !5
  %1053 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %81)
          to label %1054 unwind label %1061

1054:                                             ; preds = %1051
  %1055 = invoke noundef nonnull align 8 dereferenceable(56) ptr @_ZNK11spirv_cross3CFG20get_succeeding_edgesEj(ptr noundef nonnull align 8 dereferenceable(356) %1052, i32 noundef %1053)
          to label %1056 unwind label %1061

1056:                                             ; preds = %1054
  store ptr %1055, ptr %95, align 8, !tbaa !5
  %1057 = load ptr, ptr %95, align 8, !tbaa !5
  %1058 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %1057) #8
  %1059 = icmp ne i64 %1058, 1
  br i1 %1059, label %1060, label %1065

1060:                                             ; preds = %1056
  store i8 0, ptr %93, align 1, !tbaa !76
  store i32 17, ptr %26, align 4
  br label %1093

1061:                                             ; preds = %1054, %1051
  %1062 = landingpad { ptr, i32 }
          cleanup
  %1063 = extractvalue { ptr, i32 } %1062, 0
  store ptr %1063, ptr %16, align 8
  %1064 = extractvalue { ptr, i32 } %1062, 1
  store i32 %1064, ptr %17, align 4
  br label %1101

1065:                                             ; preds = %1056
  call void @llvm.lifetime.start.p0(i64 8, ptr %96) #8
  %1066 = load ptr, ptr %7, align 8, !tbaa !5
  %1067 = load ptr, ptr %95, align 8, !tbaa !5
  %1068 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjE5frontEv(ptr noundef nonnull align 8 dereferenceable(16) %1067) #8
  %1069 = load i32, ptr %1068, align 4, !tbaa !9
  %1070 = invoke noundef nonnull align 8 dereferenceable(56) ptr @_ZNK11spirv_cross3CFG19get_preceding_edgesEj(ptr noundef nonnull align 8 dereferenceable(356) %1066, i32 noundef %1069)
          to label %1071 unwind label %1083

1071:                                             ; preds = %1065
  store ptr %1070, ptr %96, align 8, !tbaa !5
  %1072 = load ptr, ptr %96, align 8, !tbaa !5
  %1073 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %1072) #8
  %1074 = icmp ne i64 %1073, 1
  br i1 %1074, label %1082, label %1075

1075:                                             ; preds = %1071
  %1076 = load ptr, ptr %96, align 8, !tbaa !5
  %1077 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjE5frontEv(ptr noundef nonnull align 8 dereferenceable(16) %1076) #8
  %1078 = load i32, ptr %1077, align 4, !tbaa !9
  %1079 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %81)
          to label %1080 unwind label %1083

1080:                                             ; preds = %1075
  %1081 = icmp ne i32 %1078, %1079
  br i1 %1081, label %1082, label %1087

1082:                                             ; preds = %1080, %1071
  store i8 0, ptr %93, align 1, !tbaa !76
  store i32 17, ptr %26, align 4
  br label %1092

1083:                                             ; preds = %1075, %1065
  %1084 = landingpad { ptr, i32 }
          cleanup
  %1085 = extractvalue { ptr, i32 } %1084, 0
  store ptr %1085, ptr %16, align 8
  %1086 = extractvalue { ptr, i32 } %1084, 1
  store i32 %1086, ptr %17, align 4
  br label %1100

1087:                                             ; preds = %1080
  call void @llvm.lifetime.start.p0(i64 4, ptr %97) #8
  %1088 = load ptr, ptr %95, align 8, !tbaa !5
  %1089 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjE5frontEv(ptr noundef nonnull align 8 dereferenceable(16) %1088) #8
  %1090 = load i32, ptr %1089, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %97, i32 noundef %1090)
          to label %1091 unwind label %1096

1091:                                             ; preds = %1087
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %81, ptr align 4 %97, i64 4, i1 false), !tbaa.struct !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %97) #8
  store i32 0, ptr %26, align 4
  br label %1092

1092:                                             ; preds = %1091, %1082
  call void @llvm.lifetime.end.p0(i64 8, ptr %96) #8
  br label %1093

1093:                                             ; preds = %1092, %1060
  call void @llvm.lifetime.end.p0(i64 8, ptr %95) #8
  %1094 = load i32, ptr %26, align 4
  switch i32 %1094, label %1175 [
    i32 0, label %1095
    i32 17, label %1102
  ]

1095:                                             ; preds = %1093
  br label %1017, !llvm.loop !83

1096:                                             ; preds = %1087
  %1097 = landingpad { ptr, i32 }
          cleanup
  %1098 = extractvalue { ptr, i32 } %1097, 0
  store ptr %1098, ptr %16, align 8
  %1099 = extractvalue { ptr, i32 } %1097, 1
  store i32 %1099, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %97) #8
  br label %1100

1100:                                             ; preds = %1096, %1083
  call void @llvm.lifetime.end.p0(i64 8, ptr %96) #8
  br label %1101

1101:                                             ; preds = %1100, %1061
  call void @llvm.lifetime.end.p0(i64 8, ptr %95) #8
  br label %1161

1102:                                             ; preds = %1093, %1021
  %1103 = load i8, ptr %93, align 1, !tbaa !76, !range !74, !noundef !75
  %1104 = trunc i8 %1103 to i1
  br i1 %1104, label %1105, label %1108

1105:                                             ; preds = %1102
  %1106 = load i8, ptr %91, align 1, !tbaa !76, !range !74, !noundef !75
  %1107 = trunc i8 %1106 to i1
  br i1 %1107, label %1109, label %1108

1108:                                             ; preds = %1105, %1102
  store i32 15, ptr %26, align 4
  br label %1148

1109:                                             ; preds = %1105
  call void @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5clearEv(ptr noundef nonnull align 8 dereferenceable(56) %75) #8
  %1110 = load ptr, ptr %7, align 8, !tbaa !5
  %1111 = load ptr, ptr %89, align 8, !tbaa !5
  %1112 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %1111, i32 0, i32 5
  %1113 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %1112)
          to label %1114 unwind label %1043

1114:                                             ; preds = %1109
  call void @llvm.lifetime.start.p0(i64 16, ptr %98) #8
  %1115 = getelementptr inbounds %class.anon.364, ptr %98, i32 0, i32 0
  %1116 = load ptr, ptr %90, align 8, !tbaa !5
  store ptr %1116, ptr %1115, align 8, !tbaa !5
  %1117 = getelementptr inbounds %class.anon.364, ptr %98, i32 0, i32 1
  store ptr %93, ptr %1117, align 8, !tbaa !5
  invoke void @"_ZNK11spirv_cross3CFG9walk_fromIZNS_8Compiler22analyze_variable_scopeERNS_12SPIRFunctionERNS2_33AnalyzeVariableScopeAccessHandlerEE3$_0EEvRSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEjRKT_"(ptr noundef nonnull align 8 dereferenceable(356) %1110, ptr noundef nonnull align 8 dereferenceable(56) %75, i32 noundef %1113, ptr noundef nonnull align 8 dereferenceable(16) %98)
          to label %1118 unwind label %1122

1118:                                             ; preds = %1114
  call void @llvm.lifetime.end.p0(i64 16, ptr %98) #8
  %1119 = load i8, ptr %93, align 1, !tbaa !76, !range !74, !noundef !75
  %1120 = trunc i8 %1119 to i1
  br i1 %1120, label %1126, label %1121

1121:                                             ; preds = %1118
  store i32 15, ptr %26, align 4
  br label %1148

1122:                                             ; preds = %1114
  %1123 = landingpad { ptr, i32 }
          cleanup
  %1124 = extractvalue { ptr, i32 } %1123, 0
  store ptr %1124, ptr %16, align 8
  %1125 = extractvalue { ptr, i32 } %1123, 1
  store i32 %1125, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %98) #8
  br label %1161

1126:                                             ; preds = %1118
  %1127 = load ptr, ptr %89, align 8, !tbaa !5
  %1128 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %1127, i32 0, i32 25
  call void @llvm.lifetime.start.p0(i64 4, ptr %99) #8
  %1129 = load ptr, ptr %79, align 8, !tbaa !5
  %1130 = getelementptr inbounds %"struct.std::pair.260", ptr %1129, i32 0, i32 0
  %1131 = load i32, ptr %1130, align 4, !tbaa !82
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %99, i32 noundef %1131)
          to label %1132 unwind label %1157

1132:                                             ; preds = %1126
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE2EEELm8EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %1128, ptr noundef nonnull align 4 dereferenceable(4) %99) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %99) #8
  %1133 = load ptr, ptr %89, align 8, !tbaa !5
  %1134 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %1133, i32 0, i32 25
  %1135 = invoke noundef ptr @_ZSt5beginIN11spirv_cross11SmallVectorINS0_7TypedIDILNS0_5TypesE2EEELm8EEEEDTcldtfp_5beginEERT_(ptr noundef nonnull align 8 dereferenceable(56) %1134)
          to label %1136 unwind label %1043

1136:                                             ; preds = %1132
  %1137 = load ptr, ptr %89, align 8, !tbaa !5
  %1138 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %1137, i32 0, i32 25
  %1139 = invoke noundef ptr @_ZSt3endIN11spirv_cross11SmallVectorINS0_7TypedIDILNS0_5TypesE2EEELm8EEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(56) %1138)
          to label %1140 unwind label %1043

1140:                                             ; preds = %1136
  invoke void @_ZSt4sortIPN11spirv_cross7TypedIDILNS0_5TypesE2EEEEvT_S5_(ptr noundef %1135, ptr noundef %1139)
          to label %1141 unwind label %1043

1141:                                             ; preds = %1140
  %1142 = load ptr, ptr %79, align 8, !tbaa !5
  %1143 = getelementptr inbounds %"struct.std::pair.260", ptr %1142, i32 0, i32 0
  %1144 = load i32, ptr %1143, align 4, !tbaa !82
  %1145 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %100, i32 noundef %1144)
          to label %1146 unwind label %1043

1146:                                             ; preds = %1141
  %1147 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %1145, i32 0, i32 17
  store i8 1, ptr %1147, align 4, !tbaa !84
  store i32 0, ptr %26, align 4
  br label %1148

1148:                                             ; preds = %1146, %1121, %1108
  call void @llvm.lifetime.end.p0(i64 1, ptr %93) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %91) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %90) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %89) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %86) #8
  br label %1149

1149:                                             ; preds = %1148, %943, %918
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #8
  %1150 = load i32, ptr %26, align 4
  switch i32 %1150, label %1152 [
    i32 0, label %1151
  ]

1151:                                             ; preds = %1149
  store i32 0, ptr %26, align 4
  br label %1152

1152:                                             ; preds = %1151, %1149
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #8
  %1153 = load i32, ptr %26, align 4
  switch i32 %1153, label %1175 [
    i32 0, label %1154
    i32 15, label %1155
  ]

1154:                                             ; preds = %1152
  br label %1155

1155:                                             ; preds = %1154, %1152
  %1156 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8__detail14_Node_iteratorISt4pairIKjjELb0ELb0EEppEv(ptr noundef nonnull align 8 dereferenceable(8) %77) #8
  br label %887

1157:                                             ; preds = %1126
  %1158 = landingpad { ptr, i32 }
          cleanup
  %1159 = extractvalue { ptr, i32 } %1158, 0
  store ptr %1159, ptr %16, align 8
  %1160 = extractvalue { ptr, i32 } %1158, 1
  store i32 %1160, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %99) #8
  br label %1161

1161:                                             ; preds = %1157, %1122, %1101, %1047, %1043
  call void @llvm.lifetime.end.p0(i64 1, ptr %93) #8
  br label %1162

1162:                                             ; preds = %1161, %1039
  call void @llvm.lifetime.end.p0(i64 1, ptr %91) #8
  br label %1163

1163:                                             ; preds = %1162, %1035
  call void @llvm.lifetime.end.p0(i64 8, ptr %90) #8
  br label %1164

1164:                                             ; preds = %1163, %1031
  call void @llvm.lifetime.end.p0(i64 8, ptr %89) #8
  br label %1165

1165:                                             ; preds = %1164, %997, %966
  call void @llvm.lifetime.end.p0(i64 4, ptr %86) #8
  br label %1166

1166:                                             ; preds = %1165, %944, %935, %923
  call void @llvm.lifetime.end.p0(i64 4, ptr %82) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %81) #8
  br label %1167

1167:                                             ; preds = %1166, %919
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #8
  call void @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %75) #8
  call void @llvm.lifetime.end.p0(i64 56, ptr %75) #8
  br label %1169

1168:                                             ; preds = %889
  call void @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %75) #8
  call void @llvm.lifetime.end.p0(i64 56, ptr %75) #8
  call void @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %10) #8
  call void @llvm.lifetime.end.p0(i64 56, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #8
  ret void

1169:                                             ; preds = %1167, %877, %607, %220
  call void @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %10) #8
  call void @llvm.lifetime.end.p0(i64 56, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #8
  br label %1170

1170:                                             ; preds = %1169
  %1171 = load ptr, ptr %16, align 8
  %1172 = load i32, ptr %17, align 4
  %1173 = insertvalue { ptr, i32 } poison, ptr %1171, 0
  %1174 = insertvalue { ptr, i32 } %1173, i32 %1172, 1
  resume { ptr, i32 } %1174

1175:                                             ; preds = %1152, %1093, %868, %598
  unreachable
}

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

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

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

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

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

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

declare noundef i32 @_ZNK11spirv_cross3CFG19find_loop_dominatorEj(ptr noundef nonnull align 8 dereferenceable(356), i32 noundef) #7

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(56)) #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(56)) #0 align 2

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

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

declare void @_ZN11spirv_cross16DominatorBuilder29lift_continue_block_dominatorEv(ptr noundef nonnull align 8 dereferenceable(12)) #7

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(56)) #0 align 2

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZNK11spirv_cross3CFG9walk_fromIZNS_8Compiler22analyze_variable_scopeERNS_12SPIRFunctionERNS2_33AnalyzeVariableScopeAccessHandlerEE3$_0EEvRSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEjRKT_"(ptr noundef nonnull align 8 dereferenceable(356), ptr noundef nonnull align 8 dereferenceable(56), i32 noundef, ptr noundef nonnull align 8 dereferenceable(16)) #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZSt4sortIPN11spirv_cross7TypedIDILNS0_5TypesE2EEEEvT_S5_(ptr noundef, ptr noundef) #6

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

attributes #0 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #3 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { 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 #6 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { "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 }

!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 = !{!"int", !7, i64 0}
!11 = !{i64 0, i64 4, !9}
!12 = !{!13, !10, i64 0}
!13 = !{!"_ZTSSt4pairIKjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEE", !10, i64 0, !14, i64 8}
!14 = !{!"_ZTSSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE", !15, i64 0}
!15 = !{!"_ZTSSt10_HashtableIjjSaIjENSt8__detail9_IdentityESt8equal_toIjESt4hashIjENS1_18_Mod_range_hashingENS1_20_Default_ranged_hashENS1_20_Prime_rehash_policyENS1_17_Hashtable_traitsILb0ELb1ELb1EEEE", !6, i64 0, !16, i64 8, !17, i64 16, !16, i64 24, !18, i64 32, !6, i64 48}
!16 = !{!"long", !7, i64 0}
!17 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!18 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !19, i64 0, !16, i64 8}
!19 = !{!"float", !7, i64 0}
!20 = !{!21, !10, i64 24}
!21 = !{!"_ZTSN11spirv_cross8SPIRTypeE", !22, i64 0, !24, i64 12, !25, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !26, i64 32, !29, i64 88, !10, i64 120, !32, i64 124, !32, i64 125, !33, i64 128, !34, i64 136, !26, i64 192, !37, i64 248, !38, i64 272, !38, i64 276, !42, i64 280}
!22 = !{!"_ZTSN11spirv_cross8IVariantE", !23, i64 8}
!23 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !10, i64 0}
!24 = !{!"_ZTSN3spv2OpE", !7, i64 0}
!25 = !{!"_ZTSN11spirv_cross8SPIRType8BaseTypeE", !7, i64 0}
!26 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !27, i64 0, !16, i64 16, !28, i64 24}
!27 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !6, i64 0, !16, i64 8}
!28 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !7, i64 0}
!29 = !{!"_ZTSN11spirv_cross11SmallVectorIbLm8EEE", !30, i64 0, !16, i64 16, !31, i64 24}
!30 = !{!"_ZTSN11spirv_cross10VectorViewIbEE", !6, i64 0, !16, i64 8}
!31 = !{!"_ZTSN11spirv_cross13AlignedBufferIbLm8EEE", !7, i64 0}
!32 = !{!"bool", !7, i64 0}
!33 = !{!"_ZTSN3spv12StorageClassE", !7, i64 0}
!34 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEE", !35, i64 0, !16, i64 16, !36, i64 24}
!35 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEE", !6, i64 0, !16, i64 8}
!36 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE1EEELm8EEE", !7, i64 0}
!37 = !{!"_ZTSN11spirv_cross8SPIRType9ImageTypeE", !38, i64 0, !39, i64 4, !32, i64 8, !32, i64 9, !32, i64 10, !10, i64 12, !40, i64 16, !41, i64 20}
!38 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !10, i64 0}
!39 = !{!"_ZTSN3spv3DimE", !7, i64 0}
!40 = !{!"_ZTSN3spv11ImageFormatE", !7, i64 0}
!41 = !{!"_ZTSN3spv15AccessQualifierE", !7, i64 0}
!42 = !{!"_ZTSSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE", !43, i64 0}
!43 = !{!"_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, !16, i64 8, !17, i64 16, !16, i64 24, !18, i64 32, !6, i64 48}
!44 = !{!21, !10, i64 28}
!45 = !{!21, !25, i64 16}
!46 = !{!47, !49, i64 16}
!47 = !{!"_ZTSN11spirv_cross9SPIRBlockE", !22, i64 0, !48, i64 12, !49, i64 16, !50, i64 20, !51, i64 24, !51, i64 28, !51, i64 32, !23, i64 36, !23, i64 40, !51, i64 44, !51, i64 48, !51, i64 52, !52, i64 56, !53, i64 72, !56, i64 192, !59, i64 312, !59, i64 400, !62, i64 488, !62, i64 640, !32, i64 792, !32, i64 793, !32, i64 794, !51, i64 796, !51, i64 800, !65, i64 808, !65, i64 864, !68, i64 920}
!48 = !{!"_ZTSN11spirv_cross9SPIRBlock10TerminatorE", !7, i64 0}
!49 = !{!"_ZTSN11spirv_cross9SPIRBlock5MergeE", !7, i64 0}
!50 = !{!"_ZTSN11spirv_cross9SPIRBlock5HintsE", !7, i64 0}
!51 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE6EEE", !10, i64 0}
!52 = !{!"_ZTSN11spirv_cross9SPIRBlockUt1_E", !7, i64 0, !23, i64 12}
!53 = !{!"_ZTSN11spirv_cross11SmallVectorINS_11InstructionELm8EEE", !54, i64 0, !16, i64 16, !55, i64 24}
!54 = !{!"_ZTSN11spirv_cross10VectorViewINS_11InstructionEEE", !6, i64 0, !16, i64 8}
!55 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_11InstructionELm8EEE", !7, i64 0}
!56 = !{!"_ZTSN11spirv_cross11SmallVectorINS_9SPIRBlock3PhiELm8EEE", !57, i64 0, !16, i64 16, !58, i64 24}
!57 = !{!"_ZTSN11spirv_cross10VectorViewINS_9SPIRBlock3PhiEEE", !6, i64 0, !16, i64 8}
!58 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_9SPIRBlock3PhiELm8EEE", !7, i64 0}
!59 = !{!"_ZTSN11spirv_cross11SmallVectorISt4pairINS_7TypedIDILNS_5TypesE1EEENS2_ILS3_0EEEELm8EEE", !60, i64 0, !16, i64 16, !61, i64 24}
!60 = !{!"_ZTSN11spirv_cross10VectorViewISt4pairINS_7TypedIDILNS_5TypesE1EEENS2_ILS3_0EEEEEE", !6, i64 0, !16, i64 8}
!61 = !{!"_ZTSN11spirv_cross13AlignedBufferISt4pairINS_7TypedIDILNS_5TypesE1EEENS2_ILS3_0EEEELm8EEE", !7, i64 0}
!62 = !{!"_ZTSN11spirv_cross11SmallVectorINS_9SPIRBlock4CaseELm8EEE", !63, i64 0, !16, i64 16, !64, i64 24}
!63 = !{!"_ZTSN11spirv_cross10VectorViewINS_9SPIRBlock4CaseEEE", !6, i64 0, !16, i64 8}
!64 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_9SPIRBlock4CaseELm8EEE", !7, i64 0}
!65 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE2EEELm8EEE", !66, i64 0, !16, i64 16, !67, i64 24}
!66 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEEE", !6, i64 0, !16, i64 8}
!67 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE2EEELm8EEE", !7, i64 0}
!68 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EEE", !69, i64 0, !16, i64 16, !70, i64 24}
!69 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEEE", !6, i64 0, !16, i64 8}
!70 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE0EEELm8EEE", !7, i64 0}
!71 = !{!72, !32, i64 153}
!72 = !{!"_ZTSN11spirv_cross12SPIRVariableE", !22, i64 0, !38, i64 12, !33, i64 16, !10, i64 20, !23, i64 24, !73, i64 28, !26, i64 32, !32, i64 88, !32, i64 89, !23, i64 92, !68, i64 96, !32, i64 152, !32, i64 153, !32, i64 154, !32, i64 155, !10, i64 156, !51, i64 160, !32, i64 164, !32, i64 165, !32, i64 166, !6, i64 168}
!73 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE2EEE", !10, i64 0}
!74 = !{i8 0, i8 2}
!75 = !{}
!76 = !{!32, !32, i64 0}
!77 = distinct !{!77, !78}
!78 = !{!"llvm.loop.mustprogress"}
!79 = !{!80, !10, i64 4}
!80 = !{!"_ZTSSt4pairIKjjE", !10, i64 0, !10, i64 4}
!81 = !{!47, !32, i64 793}
!82 = !{!80, !10, i64 0}
!83 = distinct !{!83, !78}
!84 = !{!72, !32, i64 164}


; 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"

%"struct.std::__detail::_Node_iterator.347" = type { %"struct.std::__detail::_Node_iterator_base.348" }
%"struct.std::__detail::_Node_iterator_base.348" = type { ptr }
%"class.std::unordered_map.194" = type { %"class.std::_Hashtable.195" }
%"class.std::_Hashtable.195" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%"struct.std::__detail::_Node_iterator.360" = type { %"struct.std::__detail::_Node_iterator_base.361" }
%"struct.std::__detail::_Node_iterator_base.361" = type { ptr }
%"class.spirv_cross::TypedID.165" = type { i32 }
%"struct.std::__detail::_Node_iterator.346" = type { %"struct.std::__detail::_Node_iterator_base.300" }
%"struct.std::__detail::_Node_iterator_base.300" = type { ptr }
%"class.spirv_cross::TypedID.164" = type { i32 }
%"class.spirv_cross::DominatorBuilder" = type <{ ptr, i32, [4 x i8] }>
%"struct.std::__detail::_Node_iterator" = type { %"struct.std::__detail::_Node_iterator_base" }
%"struct.std::__detail::_Node_iterator_base" = type { ptr }
%"struct.std::__detail::_Node_iterator.289" = type { %"struct.std::__detail::_Node_iterator_base.259" }
%"struct.std::__detail::_Node_iterator_base.259" = type { 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.spirv_cross::TypedID.162" = type { i32 }
%class.anon.364 = type { ptr, ptr }

@.str.5 = external hidden unnamed_addr constant [91 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [48 x i8], align 1
@__PRETTY_FUNCTION__._ZN11spirv_cross8Compiler22analyze_variable_scopeERNS_12SPIRFunctionERNS0_33AnalyzeVariableScopeAccessHandlerE = external hidden unnamed_addr constant [104 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [7 x i8], align 1

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

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross8Compiler30traverse_all_reachable_opcodesERKNS_12SPIRFunctionERNS0_13OpcodeHandlerE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(795), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #3 align 2

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef ptr @_ZSt4findIPN11spirv_cross7TypedIDILNS0_5TypesE2EEES3_ET_S5_S5_RKT0_(ptr noundef, ptr noundef, ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #5

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNKSt8__detail14_Node_iteratorISt4pairIKjjELb0ELb0EEptEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross8Compiler30analyze_parameter_preservationERNS_12SPIRFunctionERKNS_3CFGERKSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES9_SB_SaISt4pairIKjSD_EEESK_(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(795), ptr noundef nonnull align 8 dereferenceable(356), ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(56)) local_unnamed_addr #3 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5beginEv(ptr noundef nonnull align 8 dereferenceable(56)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(56)) local_unnamed_addr #0 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8__detail14_Node_iteratorIjLb1ELb0EEppEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #0 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEE3endEv(ptr noundef nonnull align 8 dereferenceable(56)) local_unnamed_addr #0 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross8Compiler20type_is_opaque_valueERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #0 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNKSt8__detail14_Node_iteratorISt4pairIKjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS5_EEELb0ELb0EEptEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(356) ptr @_ZNKSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS1_EEdeEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(56)) local_unnamed_addr #0 align 2

declare void @_ZN11spirv_cross16DominatorBuilderC1ERKNS_3CFGE(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 8 dereferenceable(356)) unnamed_addr #6

declare void @_ZN11spirv_cross16DominatorBuilder9add_blockEj(ptr noundef nonnull align 8 dereferenceable(12), i32 noundef) local_unnamed_addr #6

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK11spirv_cross16DominatorBuilder13get_dominatorEv(ptr noundef nonnull align 8 dereferenceable(12)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross8Compiler22analyze_variable_scopeERNS_12SPIRFunctionERNS0_33AnalyzeVariableScopeAccessHandlerE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(795) %1, ptr noundef nonnull align 8 dereferenceable(424) %2) local_unnamed_addr #3 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca %"struct.std::__detail::_Node_iterator.347", align 8
  %5 = alloca i32, align 4
  %6 = alloca %"class.std::unordered_map.194", align 8
  %7 = alloca %"struct.std::__detail::_Node_iterator.360", align 8
  %8 = alloca %"struct.std::__detail::_Node_iterator.360", align 8
  %9 = alloca %"class.spirv_cross::TypedID.165", align 4
  %10 = alloca %"class.spirv_cross::TypedID.165", align 4
  %11 = alloca %"struct.std::__detail::_Node_iterator.346", align 8
  %12 = alloca %"struct.std::__detail::_Node_iterator.346", align 8
  %13 = alloca %"class.spirv_cross::TypedID.164", align 4
  %14 = alloca %"class.spirv_cross::DominatorBuilder", align 8
  %15 = alloca %"class.spirv_cross::TypedID.165", align 4
  %16 = alloca %"struct.std::__detail::_Node_iterator", align 8
  %17 = alloca %"struct.std::__detail::_Node_iterator", align 8
  %18 = alloca %"class.spirv_cross::TypedID.165", align 4
  %19 = alloca %"class.spirv_cross::TypedID.165", align 4
  %20 = alloca %"class.spirv_cross::TypedID.165", align 4
  %21 = alloca %"class.spirv_cross::TypedID.165", align 4
  %22 = alloca %"class.spirv_cross::TypedID.165", align 4
  %23 = alloca %"class.spirv_cross::TypedID.165", align 4
  %24 = alloca %"class.spirv_cross::TypedID.165", align 4
  %25 = alloca %"class.spirv_cross::TypedID.165", align 4
  %26 = alloca %"class.spirv_cross::TypedID.164", align 4
  %27 = alloca %"struct.std::__detail::_Node_iterator.346", align 8
  %28 = alloca %"struct.std::__detail::_Node_iterator.346", align 8
  %29 = alloca %"struct.std::__detail::_Node_iterator.289", align 8
  %30 = alloca %"struct.std::__detail::_Node_iterator.289", align 8
  %31 = alloca %"class.spirv_cross::DominatorBuilder", align 8
  %32 = alloca %"struct.std::__detail::_Node_iterator", align 8
  %33 = alloca %"struct.std::__detail::_Node_iterator", align 8
  %34 = alloca %"class.spirv_cross::TypedID.165", align 4
  %35 = alloca i32, align 4
  %36 = alloca %"class.std::unordered_set", align 8
  %37 = alloca %"struct.std::__detail::_Node_iterator.289", align 8
  %38 = alloca %"struct.std::__detail::_Node_iterator.289", align 8
  %39 = alloca %"class.spirv_cross::TypedID.165", align 4
  %40 = alloca %"class.spirv_cross::TypedID.165", align 4
  %41 = alloca %"class.spirv_cross::TypedID.165", align 4
  %42 = alloca %"class.spirv_cross::TypedID.165", align 4
  %43 = alloca %"class.spirv_cross::TypedID.162", align 4
  %44 = alloca %"class.spirv_cross::TypedID.165", align 4
  %45 = alloca %"struct.std::__detail::_Node_iterator.360", align 8
  %46 = alloca %"struct.std::__detail::_Node_iterator.360", align 8
  %47 = alloca i32, align 4
  %48 = alloca i8, align 1
  %49 = alloca i32, align 4
  %50 = alloca %"class.spirv_cross::TypedID.165", align 4
  %51 = alloca %class.anon.364, align 8
  %52 = alloca %"class.spirv_cross::TypedID.164", align 4
  %53 = tail call noundef zeroext i1 @_ZNK11spirv_cross8Compiler30traverse_all_reachable_opcodesERKNS_12SPIRFunctionERNS0_13OpcodeHandlerE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(795) %1, ptr noundef nonnull align 8 dereferenceable(8) %2)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #7
  %54 = getelementptr inbounds i8, ptr %0, i64 2888
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #7
  %55 = getelementptr inbounds i8, ptr %1, i64 8
  %56 = tail call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %55)
  store i32 %56, ptr %5, align 4, !tbaa !5
  %57 = call ptr @_ZNSt13unordered_mapIjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS2_EESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE4findERSB_(ptr noundef nonnull align 8 dereferenceable(56) %54, ptr noundef nonnull align 4 dereferenceable(4) %5)
  store ptr %57, ptr %4, align 8
  %58 = call noundef ptr @_ZNKSt8__detail14_Node_iteratorISt4pairIKjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS5_EEELb0ELb0EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %4) #7
  %59 = getelementptr inbounds i8, ptr %58, i64 8
  %60 = call noundef nonnull align 8 dereferenceable(356) ptr @_ZNKSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS1_EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %59) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #7
  %61 = getelementptr inbounds i8, ptr %2, i64 24
  %62 = getelementptr inbounds i8, ptr %2, i64 192
  call void @_ZN11spirv_cross8Compiler30analyze_parameter_preservationERNS_12SPIRFunctionERKNS_3CFGERKSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES9_SB_SaISt4pairIKjSD_EEESK_(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(795) %1, ptr noundef nonnull align 8 dereferenceable(356) %60, ptr noundef nonnull align 8 dereferenceable(56) %61, ptr noundef nonnull align 8 dereferenceable(56) %62)
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %6) #7
  call void @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(56) %6) #7
  %63 = getelementptr inbounds i8, ptr %1, i64 456
  %64 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE6EEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %63) #7
  %65 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE6EEEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %63) #7
  %.not268 = icmp eq ptr %64, %65
  br i1 %.not268, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %3
  %66 = getelementptr inbounds i8, ptr %0, i64 1632
  br label %72

._crit_edge:                                      ; preds = %106, %3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #7
  %67 = call ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(56) %61) #7
  store ptr %67, ptr %11, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #7
  %68 = call ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %61) #7
  store ptr %68, ptr %12, align 8
  %69 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseISt4pairIKjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEELb0EEESD_(ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(8) %12) #7
  br i1 %69, label %.lr.ph274, label %._crit_edge275

.lr.ph274:                                        ; preds = %._crit_edge
  %70 = getelementptr inbounds i8, ptr %1, i64 392
  %71 = getelementptr inbounds i8, ptr %0, i64 1632
  br label %118

72:                                               ; preds = %.lr.ph, %106
  %.0269 = phi ptr [ %64, %.lr.ph ], [ %107, %106 ]
  %73 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %.0269)
  %74 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %73)
          to label %75 unwind label %90

75:                                               ; preds = %72
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #7
  %76 = invoke ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE6EEES3_St4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S3_EEE4findERS9_(ptr noundef nonnull align 8 dereferenceable(56) %66, ptr noundef nonnull align 4 dereferenceable(4) %.0269)
          to label %77 unwind label %92

77:                                               ; preds = %75
  store ptr %76, ptr %7, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #7
  %78 = call ptr @_ZSt3endISt13unordered_mapIN11spirv_cross7TypedIDILNS1_5TypesE6EEES4_St4hashIS4_ESt8equal_toIS4_ESaISt4pairIKS4_S4_EEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(56) %66)
  store ptr %78, ptr %8, align 8
  %79 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseISt4pairIKN11spirv_cross7TypedIDILNS2_5TypesE6EEES5_ELb1EEESA_(ptr noundef nonnull align 8 dereferenceable(8) %7, ptr noundef nonnull align 8 dereferenceable(8) %8) #7
  br i1 %79, label %80, label %.critedge

80:                                               ; preds = %77
  %81 = call noundef ptr @_ZNKSt8__detail14_Node_iteratorISt4pairIKN11spirv_cross7TypedIDILNS2_5TypesE6EEES5_ELb0ELb1EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #7
  %82 = getelementptr inbounds i8, ptr %81, i64 4
  %83 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %82)
  %84 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %.0269)
  %.not237 = icmp eq i32 %83, %84
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #7
  br i1 %.not237, label %94, label %85

85:                                               ; preds = %80
  %86 = call noundef ptr @_ZNKSt8__detail14_Node_iteratorISt4pairIKN11spirv_cross7TypedIDILNS2_5TypesE6EEES5_ELb0ELb1EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #7
  %87 = getelementptr inbounds i8, ptr %86, i64 4
  %88 = getelementptr inbounds i8, ptr %74, i64 800
  %89 = load i32, ptr %87, align 4, !tbaa !5
  store i32 %89, ptr %88, align 8, !tbaa !5
  br label %106

90:                                               ; preds = %72
  %91 = landingpad { ptr, i32 }
          cleanup
  br label %550

92:                                               ; preds = %75
  %93 = landingpad { ptr, i32 }
          cleanup
  br label %108

.critedge:                                        ; preds = %77
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #7
  br label %94

94:                                               ; preds = %.critedge, %80
  %95 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %.0269)
  %96 = invoke noundef i32 @_ZNK11spirv_cross3CFG19find_loop_dominatorEj(ptr noundef nonnull align 8 dereferenceable(356) %60, i32 noundef %95)
          to label %97 unwind label %102

97:                                               ; preds = %94
  %98 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %.0269)
  %.not242 = icmp eq i32 %96, %98
  %99 = getelementptr inbounds i8, ptr %74, i64 800
  br i1 %.not242, label %104, label %100

100:                                              ; preds = %97
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #7
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %9, i32 noundef %96)
  %101 = load i32, ptr %9, align 4, !tbaa !5
  store i32 %101, ptr %99, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #7
  br label %106

102:                                              ; preds = %94
  %103 = landingpad { ptr, i32 }
          cleanup
  br label %108

104:                                              ; preds = %97
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #7
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %10, i32 noundef -1)
  %105 = load i32, ptr %10, align 4, !tbaa !5
  store i32 %105, ptr %99, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #7
  br label %106

106:                                              ; preds = %100, %104, %85
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #7
  %107 = getelementptr inbounds i8, ptr %.0269, i64 4
  %.not = icmp eq ptr %107, %65
  br i1 %.not, label %._crit_edge, label %72

108:                                              ; preds = %102, %92
  %.pn238 = phi { ptr, i32 } [ %103, %102 ], [ %93, %92 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #7
  br label %550

._crit_edge275:                                   ; preds = %295, %._crit_edge
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #7
  %109 = getelementptr inbounds i8, ptr %2, i64 80
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #7
  %110 = call ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(56) %109) #7
  store ptr %110, ptr %27, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %28) #7
  %111 = call ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %109) #7
  store ptr %111, ptr %28, align 8
  %112 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseISt4pairIKjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEELb0EEESD_(ptr noundef nonnull align 8 dereferenceable(8) %27, ptr noundef nonnull align 8 dereferenceable(8) %28) #7
  br i1 %112, label %.lr.ph281, label %._crit_edge282

.lr.ph281:                                        ; preds = %._crit_edge275
  %113 = getelementptr inbounds i8, ptr %2, i64 136
  %114 = getelementptr inbounds i8, ptr %0, i64 1632
  %115 = getelementptr inbounds i8, ptr %2, i64 304
  %116 = getelementptr inbounds i8, ptr %0, i64 2568
  %117 = getelementptr inbounds i8, ptr %0, i64 2400
  br label %307

118:                                              ; preds = %.lr.ph274, %295
  %119 = call noundef nonnull align 8 dereferenceable(64) ptr @_ZNKSt8__detail14_Node_iteratorISt4pairIKjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEELb0ELb0EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %11) #7
  %120 = call noundef ptr @_ZSt5beginIN11spirv_cross11SmallVectorINS0_7TypedIDILNS0_5TypesE2EEELm8EEEEDTcldtfp_5beginEERT_(ptr noundef nonnull align 8 dereferenceable(56) %70)
  %121 = call noundef ptr @_ZSt3endIN11spirv_cross11SmallVectorINS0_7TypedIDILNS0_5TypesE2EEELm8EEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(56) %70)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %13) #7
  %122 = load i32, ptr %119, align 8, !tbaa !9
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %13, i32 noundef %122)
  %123 = invoke noundef ptr @_ZSt4findIPN11spirv_cross7TypedIDILNS0_5TypesE2EEES3_ET_S5_S5_RKT0_(ptr noundef %120, ptr noundef %121, ptr noundef nonnull align 4 dereferenceable(4) %13)
          to label %124 unwind label %127

124:                                              ; preds = %118
  %125 = call noundef ptr @_ZSt3endIN11spirv_cross11SmallVectorINS0_7TypedIDILNS0_5TypesE2EEELm8EEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(56) %70)
  %126 = icmp eq ptr %123, %125
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #7
  br i1 %126, label %295, label %129

127:                                              ; preds = %118
  %128 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #7
  br label %301

129:                                              ; preds = %124
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %14) #7
  invoke void @_ZN11spirv_cross16DominatorBuilderC1ERKNS_3CFGE(ptr noundef nonnull align 8 dereferenceable(12) %14, ptr noundef nonnull align 8 dereferenceable(356) %60)
          to label %130 unwind label %142

130:                                              ; preds = %129
  %131 = load i32, ptr %119, align 8, !tbaa !9
  %132 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %131)
          to label %133 unwind label %144

133:                                              ; preds = %130
  %134 = getelementptr inbounds i8, ptr %119, i64 8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %15) #7
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %15, i32 noundef 0)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #7
  %135 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5beginEv(ptr noundef nonnull align 8 dereferenceable(56) %134) #7
  store ptr %135, ptr %16, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #7
  %136 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %134) #7
  store ptr %136, ptr %17, align 8
  %137 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseIjLb0EEES3_(ptr noundef nonnull align 8 dereferenceable(8) %16, ptr noundef nonnull align 8 dereferenceable(8) %17) #7
  br i1 %137, label %.lr.ph271, label %._crit_edge272

.lr.ph271:                                        ; preds = %133
  %138 = getelementptr inbounds i8, ptr %132, i64 24
  %139 = getelementptr inbounds i8, ptr %132, i64 28
  %140 = getelementptr inbounds i8, ptr %132, i64 16
  %141 = getelementptr inbounds i8, ptr %132, i64 32
  br label %148

._crit_edge272:                                   ; preds = %179, %133
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #7
  invoke void @_ZN11spirv_cross16DominatorBuilder29lift_continue_block_dominatorEv(ptr noundef nonnull align 8 dereferenceable(12) %14)
          to label %183 unwind label %146

142:                                              ; preds = %129
  %143 = landingpad { ptr, i32 }
          cleanup
  br label %300

144:                                              ; preds = %130
  %145 = landingpad { ptr, i32 }
          cleanup
  br label %300

146:                                              ; preds = %._crit_edge272
  %147 = landingpad { ptr, i32 }
          cleanup
  br label %299

148:                                              ; preds = %.lr.ph271, %179
  %149 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt8__detail14_Node_iteratorIjLb1ELb0EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %16) #7
  %150 = load i32, ptr %149, align 4, !tbaa !5
  %151 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler11is_continueEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %150)
  br i1 %151, label %152, label %177

152:                                              ; preds = %148
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %18) #7
  %153 = load i32, ptr %149, align 4, !tbaa !5
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %18, i32 noundef %153)
  %154 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE6EEES3_St4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S3_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %71, ptr noundef nonnull align 4 dereferenceable(4) %18)
          to label %155 unwind label %173

155:                                              ; preds = %152
  %156 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %154)
  invoke void @_ZN11spirv_cross16DominatorBuilder9add_blockEj(ptr noundef nonnull align 8 dereferenceable(12) %14, i32 noundef %156)
          to label %157 unwind label %173

157:                                              ; preds = %155
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #7
  %158 = load i32, ptr %138, align 8, !tbaa !18
  %159 = icmp ne i32 %158, 1
  %160 = load i32, ptr %139, align 4
  %161 = icmp ne i32 %160, 1
  %or.cond.not252 = select i1 %159, i1 true, i1 %161
  %162 = load i32, ptr %140, align 8
  %.not230 = icmp eq i32 %162, 15
  %or.cond246 = select i1 %or.cond.not252, i1 true, i1 %.not230
  br i1 %or.cond246, label %177, label %163

163:                                              ; preds = %157
  %164 = call noundef zeroext i1 @_ZNK11spirv_cross10VectorViewIjE5emptyEv(ptr noundef nonnull align 8 dereferenceable(16) %141) #7
  br i1 %164, label %165, label %177

165:                                              ; preds = %163
  %166 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %15)
  %167 = icmp eq i32 %166, 0
  br i1 %167, label %168, label %175

168:                                              ; preds = %165
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %19) #7
  %169 = load i32, ptr %149, align 4, !tbaa !5
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %19, i32 noundef %169)
  %170 = load i32, ptr %19, align 4, !tbaa !5
  store i32 %170, ptr %15, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #7
  br label %177

171:                                              ; preds = %177
  %172 = landingpad { ptr, i32 }
          cleanup
  br label %182

173:                                              ; preds = %155, %152
  %174 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #7
  br label %182

175:                                              ; preds = %165
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %20) #7
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %20, i32 noundef -1)
  %176 = load i32, ptr %20, align 4, !tbaa !5
  store i32 %176, ptr %15, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #7
  br label %177

177:                                              ; preds = %157, %163, %175, %168, %148
  %178 = load i32, ptr %149, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross16DominatorBuilder9add_blockEj(ptr noundef nonnull align 8 dereferenceable(12) %14, i32 noundef %178)
          to label %179 unwind label %171

179:                                              ; preds = %177
  %180 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8__detail14_Node_iteratorIjLb1ELb0EEppEv(ptr noundef nonnull align 8 dereferenceable(8) %16) #7
  %181 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseIjLb0EEES3_(ptr noundef nonnull align 8 dereferenceable(8) %16, ptr noundef nonnull align 8 dereferenceable(8) %17) #7
  br i1 %181, label %148, label %._crit_edge272

182:                                              ; preds = %173, %171
  %.pn231 = phi { ptr, i32 } [ %172, %171 ], [ %174, %173 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #7
  br label %299

183:                                              ; preds = %._crit_edge272
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %21) #7
  %184 = call noundef i32 @_ZNK11spirv_cross16DominatorBuilder13get_dominatorEv(ptr noundef nonnull align 8 dereferenceable(12) %14)
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %21, i32 noundef %184)
  %185 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %21)
  %.not212 = icmp eq i32 %185, 0
  br i1 %.not212, label %236, label %186

186:                                              ; preds = %183
  %187 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %15)
  %.not213 = icmp eq i32 %187, 0
  br i1 %.not213, label %236, label %188

188:                                              ; preds = %186
  %189 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %15)
  %.not214 = icmp eq i32 %189, -1
  br i1 %.not214, label %236, label %190

190:                                              ; preds = %188
  %191 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %21)
  %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 %202

193:                                              ; preds = %190
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %22) #7
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %22, i32 noundef 0)
  %194 = getelementptr inbounds i8, ptr %192, i64 16
  %195 = load i32, ptr %194, align 8, !tbaa !42
  %196 = icmp eq i32 %195, 1
  br i1 %196, label %197, label %206

197:                                              ; preds = %193
  %198 = getelementptr inbounds i8, ptr %192, i64 28
  %199 = load i32, ptr %198, align 4, !tbaa !5
  store i32 %199, ptr %22, align 4, !tbaa !5
  br label %215

200:                                              ; preds = %240
  %201 = landingpad { ptr, i32 }
          cleanup
  br label %298

202:                                              ; preds = %190
  %203 = landingpad { ptr, i32 }
          cleanup
  br label %298

204:                                              ; preds = %228, %225, %221, %217, %209
  %205 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #7
  br label %298

206:                                              ; preds = %193
  %207 = getelementptr inbounds i8, ptr %192, i64 800
  %208 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %207)
  %.not215 = icmp eq i32 %208, -1
  br i1 %.not215, label %215, label %209

209:                                              ; preds = %206
  %210 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %207)
  %211 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %210)
          to label %212 unwind label %204

212:                                              ; preds = %209
  %213 = getelementptr inbounds i8, ptr %211, i64 28
  %214 = load i32, ptr %213, align 4, !tbaa !5
  store i32 %214, ptr %22, align 4, !tbaa !5
  br label %215

215:                                              ; preds = %206, %212, %197
  %216 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %22)
  %.not216 = icmp eq i32 %216, 0
  br i1 %.not216, label %235, label %217

217:                                              ; preds = %215
  %218 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %22)
  %219 = invoke noundef zeroext i1 @_ZNK11spirv_cross3CFG12is_reachableEj(ptr noundef nonnull align 8 dereferenceable(356) %60, i32 noundef %218)
          to label %220 unwind label %204

220:                                              ; preds = %217
  br i1 %219, label %221, label %235

221:                                              ; preds = %220
  %222 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %15)
  %223 = invoke noundef zeroext i1 @_ZNK11spirv_cross3CFG12is_reachableEj(ptr noundef nonnull align 8 dereferenceable(356) %60, i32 noundef %222)
          to label %224 unwind label %204

224:                                              ; preds = %221
  br i1 %223, label %225, label %233

225:                                              ; preds = %224
  %226 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %22)
  %227 = invoke noundef i32 @_ZNK11spirv_cross3CFG15get_visit_orderEj(ptr noundef nonnull align 8 dereferenceable(356) %60, i32 noundef %226)
          to label %228 unwind label %204

228:                                              ; preds = %225
  %229 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %15)
  %230 = invoke noundef i32 @_ZNK11spirv_cross3CFG15get_visit_orderEj(ptr noundef nonnull align 8 dereferenceable(356) %60, i32 noundef %229)
          to label %231 unwind label %204

231:                                              ; preds = %228
  %232 = icmp ugt i32 %227, %230
  br i1 %232, label %233, label %235

233:                                              ; preds = %231, %224
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %23) #7
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %23, i32 noundef 0)
  %234 = load i32, ptr %23, align 4, !tbaa !5
  store i32 %234, ptr %15, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %23) #7
  br label %235

235:                                              ; preds = %231, %233, %220, %215
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #7
  br label %236

236:                                              ; preds = %235, %188, %186, %183
  %237 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %15)
  %.not219 = icmp eq i32 %237, 0
  br i1 %.not219, label %244, label %238

238:                                              ; preds = %236
  %239 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %15)
  %.not220 = icmp eq i32 %239, -1
  br i1 %.not220, label %244, label %240

240:                                              ; preds = %238
  %241 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %15)
  %242 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEEixERS5_(ptr noundef nonnull align 8 dereferenceable(56) %6, ptr noundef nonnull align 4 dereferenceable(4) %119)
          to label %243 unwind label %200

243:                                              ; preds = %240
  store i32 %241, ptr %242, align 4, !tbaa !5
  br label %244

244:                                              ; preds = %243, %238, %236
  %245 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %21)
  %.not221 = icmp eq i32 %245, 0
  br i1 %.not221, label %279, label %246

246:                                              ; preds = %244
  %247 = load i32, ptr %119, align 8, !tbaa !9
  %248 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %247)
          to label %249 unwind label %266

249:                                              ; preds = %246
  %250 = getelementptr inbounds i8, ptr %248, i64 153
  %251 = load i8, ptr %250, align 1, !tbaa !67, !range !70, !noundef !71
  %252 = trunc nuw i8 %251 to i1
  br i1 %252, label %279, label %253

253:                                              ; preds = %249
  %254 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %21)
  %255 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %254)
          to label %256 unwind label %268

256:                                              ; preds = %253
  %257 = load i32, ptr %119, align 8, !tbaa !9
  %258 = invoke noundef zeroext i1 @_ZN11spirv_cross8Compiler36may_read_undefined_variable_in_blockERKNS_9SPIRBlockEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(976) %255, i32 noundef %257)
          to label %259 unwind label %.loopexit.split-lp

259:                                              ; preds = %256
  br i1 %258, label %.preheader, label %279

.preheader:                                       ; preds = %259, %263
  %.0178 = phi ptr [ %265, %263 ], [ %255, %259 ]
  %260 = getelementptr inbounds i8, ptr %.0178, i64 800
  %261 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %260)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %24) #7
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %24, i32 noundef -1)
  %262 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %24)
  %.not222 = icmp eq i32 %261, %262
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %24) #7
  br i1 %.not222, label %270, label %263

263:                                              ; preds = %.preheader
  %264 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %260)
  %265 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %264)
          to label %.preheader unwind label %.loopexit, !llvm.loop !72

266:                                              ; preds = %246
  %267 = landingpad { ptr, i32 }
          cleanup
  br label %298

268:                                              ; preds = %253
  %269 = landingpad { ptr, i32 }
          cleanup
  br label %298

.loopexit:                                        ; preds = %263
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %298

.loopexit.split-lp:                               ; preds = %256, %274
  %lpad.loopexit.split-lp = landingpad { ptr, i32 }
          cleanup
  br label %298

270:                                              ; preds = %.preheader
  %271 = getelementptr inbounds i8, ptr %.0178, i64 8
  %272 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %271)
  %273 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %21)
  %.not223 = icmp eq i32 %272, %273
  br i1 %.not223, label %279, label %274

274:                                              ; preds = %270
  %275 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %271)
  invoke void @_ZN11spirv_cross16DominatorBuilder9add_blockEj(ptr noundef nonnull align 8 dereferenceable(12) %14, i32 noundef %275)
          to label %276 unwind label %.loopexit.split-lp

276:                                              ; preds = %274
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %25) #7
  %277 = call noundef i32 @_ZNK11spirv_cross16DominatorBuilder13get_dominatorEv(ptr noundef nonnull align 8 dereferenceable(12) %14)
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %25, i32 noundef %277)
  %278 = load i32, ptr %25, align 4, !tbaa !5
  store i32 %278, ptr %21, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %25) #7
  br label %279

279:                                              ; preds = %249, %270, %276, %259, %244
  %280 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %21)
  %.not227 = icmp eq i32 %280, 0
  br i1 %.not227, label %294, label %281

281:                                              ; preds = %279
  %282 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %21)
  %283 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %282)
          to label %284 unwind label %292

284:                                              ; preds = %281
  %285 = getelementptr inbounds i8, ptr %283, i64 808
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %26) #7
  %286 = load i32, ptr %119, align 8, !tbaa !9
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %26, i32 noundef %286)
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE2EEELm8EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %285, ptr noundef nonnull align 4 dereferenceable(4) %26) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %26) #7
  %287 = load i32, ptr %119, align 8, !tbaa !9
  %288 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %287)
          to label %289 unwind label %292

289:                                              ; preds = %284
  %290 = getelementptr inbounds i8, ptr %288, i64 160
  %291 = load i32, ptr %21, align 4, !tbaa !5
  store i32 %291, ptr %290, align 8, !tbaa !5
  br label %294

292:                                              ; preds = %284, %281
  %293 = landingpad { ptr, i32 }
          cleanup
  br label %298

294:                                              ; preds = %289, %279
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #7
  br label %295

295:                                              ; preds = %124, %294
  %296 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8__detail14_Node_iteratorISt4pairIKjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEELb0ELb0EEppEv(ptr noundef nonnull align 8 dereferenceable(8) %11) #7
  %297 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseISt4pairIKjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEELb0EEESD_(ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(8) %12) #7
  br i1 %297, label %118, label %._crit_edge275

298:                                              ; preds = %.loopexit, %.loopexit.split-lp, %266, %268, %202, %204, %292, %200
  %.pn228 = phi { ptr, i32 } [ %293, %292 ], [ %201, %200 ], [ %205, %204 ], [ %203, %202 ], [ %267, %266 ], [ %269, %268 ], [ %lpad.loopexit, %.loopexit ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #7
  br label %299

299:                                              ; preds = %298, %182, %146
  %.pn231.pn = phi { ptr, i32 } [ %.pn231, %182 ], [ %.pn228, %298 ], [ %147, %146 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #7
  br label %300

300:                                              ; preds = %144, %299, %142
  %.pn231.pn.pn.pn = phi { ptr, i32 } [ %143, %142 ], [ %.pn231.pn, %299 ], [ %145, %144 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %14) #7
  br label %301

301:                                              ; preds = %300, %127
  %.pn231.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn231.pn.pn.pn, %300 ], [ %128, %127 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #7
  br label %550

._crit_edge282:                                   ; preds = %419, %._crit_edge275
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #7
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %36) #7
  call void @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEC2Ev(ptr noundef nonnull align 8 dereferenceable(56) %36) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %37) #7
  %302 = call ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(56) %6) #7
  store ptr %302, ptr %37, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %38) #7
  %303 = call ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %6) #7
  store ptr %303, ptr %38, align 8
  %304 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseISt4pairIKjjELb0EEES6_(ptr noundef nonnull align 8 dereferenceable(8) %37, ptr noundef nonnull align 8 dereferenceable(8) %38) #7
  br i1 %304, label %.lr.ph289, label %._crit_edge290

.lr.ph289:                                        ; preds = %._crit_edge282
  %305 = getelementptr inbounds i8, ptr %0, i64 1632
  %306 = getelementptr inbounds i8, ptr %51, i64 8
  br label %425

307:                                              ; preds = %.lr.ph281, %419
  %308 = call noundef nonnull align 8 dereferenceable(64) ptr @_ZNKSt8__detail14_Node_iteratorISt4pairIKjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEELb0ELb0EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %27) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %29) #7
  %309 = invoke ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEE4findERS5_(ptr noundef nonnull align 8 dereferenceable(56) %113, ptr noundef nonnull align 4 dereferenceable(4) %308)
          to label %310 unwind label %313

310:                                              ; preds = %307
  store ptr %309, ptr %29, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %30) #7
  %311 = call ptr @_ZSt3endISt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(56) %113)
  store ptr %311, ptr %30, align 8
  %312 = call noundef zeroext i1 @_ZNSt8__detaileqERKNS_19_Node_iterator_baseISt4pairIKjjELb0EEES6_(ptr noundef nonnull align 8 dereferenceable(8) %29, ptr noundef nonnull align 8 dereferenceable(8) %30) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #7
  br i1 %312, label %419, label %315

313:                                              ; preds = %307
  %314 = landingpad { ptr, i32 }
          cleanup
  br label %424

315:                                              ; preds = %310
  %316 = call noundef ptr @_ZNKSt8__detail14_Node_iteratorISt4pairIKjjELb0ELb0EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %29) #7
  %317 = getelementptr inbounds i8, ptr %316, i64 4
  %318 = load i32, ptr %317, align 4, !tbaa !74
  %319 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %318)
          to label %320 unwind label %322

320:                                              ; preds = %315
  %321 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler20type_is_opaque_valueERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %319)
  br i1 %321, label %419, label %324

322:                                              ; preds = %315
  %323 = landingpad { ptr, i32 }
          cleanup
  br label %424

324:                                              ; preds = %320
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %31) #7
  invoke void @_ZN11spirv_cross16DominatorBuilderC1ERKNS_3CFGE(ptr noundef nonnull align 8 dereferenceable(12) %31, ptr noundef nonnull align 8 dereferenceable(356) %60)
          to label %325 unwind label %332

325:                                              ; preds = %324
  %326 = getelementptr inbounds i8, ptr %308, i64 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %32) #7
  %327 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5beginEv(ptr noundef nonnull align 8 dereferenceable(56) %326) #7
  store ptr %327, ptr %32, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %33) #7
  %328 = call ptr @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %326) #7
  store ptr %328, ptr %33, align 8
  %329 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseIjLb0EEES3_(ptr noundef nonnull align 8 dereferenceable(8) %32, ptr noundef nonnull align 8 dereferenceable(8) %33) #7
  br i1 %329, label %.lr.ph278, label %._crit_edge279

._crit_edge279:                                   ; preds = %361, %325
  %.0180.lcssa = phi i1 [ false, %325 ], [ %.1181, %361 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %32) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %35) #7
  %330 = call noundef i32 @_ZNK11spirv_cross16DominatorBuilder13get_dominatorEv(ptr noundef nonnull align 8 dereferenceable(12) %31)
  store i32 %330, ptr %35, align 4, !tbaa !5
  %331 = call noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(56) %326) #7
  %.not197 = icmp eq i64 %331, 1
  br i1 %.not197, label %370, label %365

332:                                              ; preds = %324
  %333 = landingpad { ptr, i32 }
          cleanup
  br label %423

.lr.ph278:                                        ; preds = %325, %361
  %.0180276 = phi i1 [ %.1181, %361 ], [ false, %325 ]
  %334 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt8__detail14_Node_iteratorIjLb1ELb0EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %32) #7
  %335 = load i32, ptr %334, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross16DominatorBuilder9add_blockEj(ptr noundef nonnull align 8 dereferenceable(12) %31, i32 noundef %335)
          to label %336 unwind label %352

336:                                              ; preds = %.lr.ph278
  %337 = call noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(56) %326) #7
  %.not204 = icmp eq i64 %337, 1
  br i1 %.not204, label %361, label %338

338:                                              ; preds = %336
  %339 = load i32, ptr %334, align 4, !tbaa !5
  %340 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler11is_continueEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %339)
  br i1 %340, label %341, label %361

341:                                              ; preds = %338
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %34) #7
  %342 = load i32, ptr %334, align 4, !tbaa !5
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %34, i32 noundef %342)
  %343 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE6EEES3_St4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S3_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %114, ptr noundef nonnull align 4 dereferenceable(4) %34)
          to label %344 unwind label %354

344:                                              ; preds = %341
  %345 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %343)
  %346 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %345)
          to label %347 unwind label %354

347:                                              ; preds = %344
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %34) #7
  %348 = getelementptr inbounds i8, ptr %346, i64 16
  %349 = load i32, ptr %348, align 8, !tbaa !42
  %350 = icmp eq i32 %349, 1
  br i1 %350, label %356, label %351

351:                                              ; preds = %347
  call void @__assert_fail(ptr noundef nonnull @.str.27, ptr noundef nonnull @.str.5, i32 noundef 4116, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN11spirv_cross8Compiler22analyze_variable_scopeERNS_12SPIRFunctionERNS0_33AnalyzeVariableScopeAccessHandlerE) #8
  unreachable

352:                                              ; preds = %.lr.ph278
  %353 = landingpad { ptr, i32 }
          cleanup
  br label %364

354:                                              ; preds = %344, %341
  %355 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %34) #7
  br label %364

356:                                              ; preds = %347
  %357 = getelementptr inbounds i8, ptr %346, i64 8
  %358 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %357)
  invoke void @_ZN11spirv_cross16DominatorBuilder9add_blockEj(ptr noundef nonnull align 8 dereferenceable(12) %31, i32 noundef %358)
          to label %361 unwind label %359

359:                                              ; preds = %356
  %360 = landingpad { ptr, i32 }
          cleanup
  br label %364

361:                                              ; preds = %356, %338, %336
  %.1181 = phi i1 [ %.0180276, %338 ], [ %.0180276, %336 ], [ true, %356 ]
  %362 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8__detail14_Node_iteratorIjLb1ELb0EEppEv(ptr noundef nonnull align 8 dereferenceable(8) %32) #7
  %363 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseIjLb0EEES3_(ptr noundef nonnull align 8 dereferenceable(8) %32, ptr noundef nonnull align 8 dereferenceable(8) %33) #7
  br i1 %363, label %.lr.ph278, label %._crit_edge279

364:                                              ; preds = %354, %359, %352
  %.pn205.pn = phi { ptr, i32 } [ %353, %352 ], [ %360, %359 ], [ %355, %354 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %32) #7
  br label %423

365:                                              ; preds = %._crit_edge279
  %366 = load i32, ptr %35, align 4, !tbaa !5
  %367 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler20is_single_block_loopEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %366)
          to label %370 unwind label %368

368:                                              ; preds = %365
  %369 = landingpad { ptr, i32 }
          cleanup
  br label %422

370:                                              ; preds = %365, %._crit_edge279
  %.0179 = phi i1 [ false, %._crit_edge279 ], [ %367, %365 ]
  %371 = load i32, ptr %35, align 4, !tbaa !5
  %.not198 = icmp eq i32 %371, 0
  br i1 %.not198, label %418, label %372

372:                                              ; preds = %370
  %373 = invoke noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %326, ptr noundef nonnull align 4 dereferenceable(4) %35)
          to label %374 unwind label %387

374:                                              ; preds = %372
  %.not199 = icmp eq i64 %373, 0
  %brmerge = or i1 %.0179, %.not199
  br i1 %brmerge, label %375, label %406

375:                                              ; preds = %374
  %376 = invoke noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %115, ptr noundef nonnull align 4 dereferenceable(4) %308)
          to label %377 unwind label %387

377:                                              ; preds = %375
  %.not200 = icmp eq i64 %376, 0
  br i1 %.not200, label %393, label %378

378:                                              ; preds = %377
  br i1 %.0180.lcssa, label %379, label %418

379:                                              ; preds = %378
  %380 = load i32, ptr %35, align 4, !tbaa !5
  %381 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %380)
          to label %382 unwind label %389

382:                                              ; preds = %379
  %383 = getelementptr inbounds i8, ptr %381, i64 16
  %384 = load i32, ptr %383, align 8, !tbaa !42
  %385 = icmp eq i32 %384, 1
  br i1 %385, label %391, label %386

386:                                              ; preds = %382
  call void @__assert_fail(ptr noundef nonnull @.str.27, ptr noundef nonnull @.str.5, i32 noundef 4156, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN11spirv_cross8Compiler22analyze_variable_scopeERNS_12SPIRFunctionERNS0_33AnalyzeVariableScopeAccessHandlerE) #8
  unreachable

387:                                              ; preds = %395, %393, %375, %372
  %388 = landingpad { ptr, i32 }
          cleanup
  br label %422

389:                                              ; preds = %379
  %390 = landingpad { ptr, i32 }
          cleanup
  br label %422

391:                                              ; preds = %382
  %392 = getelementptr inbounds i8, ptr %381, i64 793
  store i8 1, ptr %392, align 1, !tbaa !76
  br label %418

393:                                              ; preds = %377
  %394 = invoke { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %116, ptr noundef nonnull align 4 dereferenceable(4) %308)
          to label %395 unwind label %387

395:                                              ; preds = %393
  %396 = invoke { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %117, ptr noundef nonnull align 4 dereferenceable(4) %308)
          to label %397 unwind label %387

397:                                              ; preds = %395
  %398 = load i32, ptr %35, align 4, !tbaa !5
  %399 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %398)
          to label %400 unwind label %404

400:                                              ; preds = %397
  %401 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEEixERS5_(ptr noundef nonnull align 8 dereferenceable(56) %113, ptr noundef nonnull align 4 dereferenceable(4) %308)
          to label %402 unwind label %404

402:                                              ; preds = %400
  %403 = getelementptr inbounds i8, ptr %399, i64 312
  call void @_ZN11spirv_cross11SmallVectorISt4pairINS_7TypedIDILNS_5TypesE1EEENS2_ILS3_0EEEELm8EE12emplace_backIJRjRKjEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(88) %403, ptr noundef nonnull align 4 dereferenceable(4) %401, ptr noundef nonnull align 4 dereferenceable(4) %308) #7
  br label %418

404:                                              ; preds = %400, %397
  %405 = landingpad { ptr, i32 }
          cleanup
  br label %422

406:                                              ; preds = %374
  %407 = call noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(56) %326) #7
  %408 = icmp ugt i64 %407, 1
  br i1 %408, label %409, label %418

409:                                              ; preds = %406
  %410 = load i32, ptr %35, align 4, !tbaa !5
  %411 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %410)
          to label %412 unwind label %416

412:                                              ; preds = %409
  %413 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEEixERS5_(ptr noundef nonnull align 8 dereferenceable(56) %113, ptr noundef nonnull align 4 dereferenceable(4) %308)
          to label %414 unwind label %416

414:                                              ; preds = %412
  %415 = getelementptr inbounds i8, ptr %411, i64 400
  call void @_ZN11spirv_cross11SmallVectorISt4pairINS_7TypedIDILNS_5TypesE1EEENS2_ILS3_0EEEELm8EE12emplace_backIJRjRKjEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(88) %415, ptr noundef nonnull align 4 dereferenceable(4) %413, ptr noundef nonnull align 4 dereferenceable(4) %308) #7
  br label %418

416:                                              ; preds = %412, %409
  %417 = landingpad { ptr, i32 }
          cleanup
  br label %422

418:                                              ; preds = %378, %391, %402, %414, %406, %370
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %35) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %31) #7
  br label %419

419:                                              ; preds = %418, %320, %310
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #7
  %420 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8__detail14_Node_iteratorISt4pairIKjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEELb0ELb0EEppEv(ptr noundef nonnull align 8 dereferenceable(8) %27) #7
  %421 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseISt4pairIKjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEELb0EEESD_(ptr noundef nonnull align 8 dereferenceable(8) %27, ptr noundef nonnull align 8 dereferenceable(8) %28) #7
  br i1 %421, label %307, label %._crit_edge282

422:                                              ; preds = %387, %389, %404, %416, %368
  %.pn201.pn = phi { ptr, i32 } [ %369, %368 ], [ %390, %389 ], [ %405, %404 ], [ %388, %387 ], [ %417, %416 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %35) #7
  br label %423

423:                                              ; preds = %364, %422, %332
  %.pn205.pn.pn.pn = phi { ptr, i32 } [ %333, %332 ], [ %.pn205.pn, %364 ], [ %.pn201.pn, %422 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %31) #7
  br label %424

424:                                              ; preds = %322, %423, %313
  %.pn205.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %314, %313 ], [ %.pn205.pn.pn.pn, %423 ], [ %323, %322 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #7
  br label %550

._crit_edge290:                                   ; preds = %544, %._crit_edge282
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %38) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #7
  call void @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %36) #7
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %36) #7
  call void @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %6) #7
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %6) #7
  ret void

425:                                              ; preds = %.lr.ph289, %544
  %426 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNKSt8__detail14_Node_iteratorISt4pairIKjjELb0ELb0EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %37) #7
  %427 = load i32, ptr %426, align 4, !tbaa !77
  %428 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %427)
          to label %429 unwind label %441

429:                                              ; preds = %425
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %39) #7
  %430 = getelementptr inbounds i8, ptr %428, i64 160
  %431 = load i32, ptr %430, align 8, !tbaa !5
  store i32 %431, ptr %39, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %40) #7
  %432 = getelementptr inbounds i8, ptr %426, i64 4
  %433 = load i32, ptr %432, align 4, !tbaa !74
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %40, i32 noundef %433)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %42) #7
  %434 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %40)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %41) #7
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %41, i32 noundef -1)
  %435 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %41)
  %436 = icmp eq i32 %434, %435
  br i1 %436, label %.critedge3, label %437

437:                                              ; preds = %429
  %438 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %40)
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %42, i32 noundef 0)
  %439 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %42)
  %440 = icmp eq i32 %438, %439
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %42) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %41) #7
  br i1 %440, label %544, label %443

.critedge3:                                       ; preds = %429
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %42) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %41) #7
  br label %544

441:                                              ; preds = %425
  %442 = landingpad { ptr, i32 }
          cleanup
  br label %549

443:                                              ; preds = %437
  %444 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %39)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %43) #7
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %43, i32 noundef 0)
  %445 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %43)
  %446 = icmp eq i32 %444, %445
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %43) #7
  br i1 %446, label %544, label %447

447:                                              ; preds = %443
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %44) #7
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %44, i32 noundef 0)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %45) #7
  %448 = invoke ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE6EEES3_St4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S3_EEE4findERS9_(ptr noundef nonnull align 8 dereferenceable(56) %305, ptr noundef nonnull align 4 dereferenceable(4) %40)
          to label %449 unwind label %456

449:                                              ; preds = %447
  store ptr %448, ptr %45, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %46) #7
  %450 = call ptr @_ZSt3endISt13unordered_mapIN11spirv_cross7TypedIDILNS1_5TypesE6EEES4_St4hashIS4_ESt8equal_toIS4_ESaISt4pairIKS4_S4_EEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(56) %305)
  store ptr %450, ptr %46, align 8
  %451 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseISt4pairIKN11spirv_cross7TypedIDILNS2_5TypesE6EEES5_ELb1EEESA_(ptr noundef nonnull align 8 dereferenceable(8) %45, ptr noundef nonnull align 8 dereferenceable(8) %46) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %46) #7
  br i1 %451, label %452, label %458

452:                                              ; preds = %449
  %453 = call noundef ptr @_ZNKSt8__detail14_Node_iteratorISt4pairIKN11spirv_cross7TypedIDILNS2_5TypesE6EEES5_ELb0ELb1EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %45) #7
  %454 = getelementptr inbounds i8, ptr %453, i64 4
  %455 = load i32, ptr %454, align 4, !tbaa !5
  store i32 %455, ptr %44, align 4, !tbaa !5
  br label %468

456:                                              ; preds = %458, %447
  %457 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %45) #7
  br label %548

458:                                              ; preds = %449
  %459 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %40)
  %460 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %459)
          to label %461 unwind label %456

461:                                              ; preds = %458
  %462 = getelementptr inbounds i8, ptr %460, i64 32
  %463 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %462)
  %464 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %40)
  %465 = icmp eq i32 %463, %464
  br i1 %465, label %466, label %468

466:                                              ; preds = %461
  %467 = load i32, ptr %40, align 4, !tbaa !5
  store i32 %467, ptr %44, align 4, !tbaa !5
  br label %468

468:                                              ; preds = %461, %466, %452
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %45) #7
  %469 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %44)
  %.not183 = icmp eq i32 %469, 0
  br i1 %.not183, label %470, label %471

470:                                              ; preds = %468
  call void @__assert_fail(ptr noundef nonnull @.str.28, ptr noundef nonnull @.str.5, i32 noundef 4218, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN11spirv_cross8Compiler22analyze_variable_scopeERNS_12SPIRFunctionERNS0_33AnalyzeVariableScopeAccessHandlerE) #8
  unreachable

471:                                              ; preds = %468
  %472 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %44)
  %473 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %472)
          to label %474 unwind label %488

474:                                              ; preds = %471
  %475 = invoke noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEEixERS8_(ptr noundef nonnull align 8 dereferenceable(56) %61, ptr noundef nonnull align 4 dereferenceable(4) %426)
          to label %476 unwind label %490

476:                                              ; preds = %474
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %47) #7
  %477 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %44)
  store i32 %477, ptr %47, align 4, !tbaa !5
  %478 = invoke noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %475, ptr noundef nonnull align 4 dereferenceable(4) %47)
          to label %479 unwind label %492

479:                                              ; preds = %476
  %480 = icmp ne i64 %478, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %47) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %48) #7
  store i8 1, ptr %48, align 1, !tbaa !78
  %481 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %39)
  %482 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %44)
  %.not184283 = icmp eq i32 %481, %482
  br i1 %.not184283, label %.thread, label %.lr.ph286

.lr.ph286:                                        ; preds = %479, %516
  %.0142284 = phi i1 [ %spec.select247, %516 ], [ %480, %479 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %49) #7
  %483 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %39)
  store i32 %483, ptr %49, align 4, !tbaa !5
  %484 = invoke noundef i64 @_ZNKSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5countERKj(ptr noundef nonnull align 8 dereferenceable(56) %475, ptr noundef nonnull align 4 dereferenceable(4) %49)
          to label %485 unwind label %496

485:                                              ; preds = %.lr.ph286
  %.not185 = icmp ne i64 %484, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %49) #7
  %spec.select247 = select i1 %.not185, i1 true, i1 %.0142284
  %486 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %39)
  %487 = invoke noundef nonnull align 8 dereferenceable(56) ptr @_ZNK11spirv_cross3CFG20get_succeeding_edgesEj(ptr noundef nonnull align 8 dereferenceable(356) %60, i32 noundef %486)
          to label %498 unwind label %501

488:                                              ; preds = %471
  %489 = landingpad { ptr, i32 }
          cleanup
  br label %548

490:                                              ; preds = %474
  %491 = landingpad { ptr, i32 }
          cleanup
  br label %548

492:                                              ; preds = %476
  %493 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %47) #7
  br label %548

494:                                              ; preds = %538, %533
  %495 = landingpad { ptr, i32 }
          cleanup
  br label %547

496:                                              ; preds = %.lr.ph286
  %497 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %49) #7
  br label %547

498:                                              ; preds = %485
  %499 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %487) #7
  %.not186 = icmp eq i64 %499, 1
  br i1 %.not186, label %503, label %500

500:                                              ; preds = %498
  store i8 0, ptr %48, align 1, !tbaa !78
  br label %.thread

501:                                              ; preds = %485
  %502 = landingpad { ptr, i32 }
          cleanup
  br label %547

503:                                              ; preds = %498
  %504 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjE5frontEv(ptr noundef nonnull align 8 dereferenceable(16) %487) #7
  %505 = load i32, ptr %504, align 4, !tbaa !5
  %506 = invoke noundef nonnull align 8 dereferenceable(56) ptr @_ZNK11spirv_cross3CFG19get_preceding_edgesEj(ptr noundef nonnull align 8 dereferenceable(356) %60, i32 noundef %505)
          to label %507 unwind label %514

507:                                              ; preds = %503
  %508 = call noundef i64 @_ZNK11spirv_cross10VectorViewIjE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %506) #7
  %.not188 = icmp eq i64 %508, 1
  br i1 %.not188, label %509, label %513

509:                                              ; preds = %507
  %510 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjE5frontEv(ptr noundef nonnull align 8 dereferenceable(16) %506) #7
  %511 = load i32, ptr %510, align 4, !tbaa !5
  %512 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %39)
  %.not189 = icmp eq i32 %511, %512
  br i1 %.not189, label %516, label %513

513:                                              ; preds = %509, %507
  store i8 0, ptr %48, align 1, !tbaa !78
  br label %.thread

514:                                              ; preds = %503
  %515 = landingpad { ptr, i32 }
          cleanup
  br label %547

516:                                              ; preds = %509
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %50) #7
  %517 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK11spirv_cross10VectorViewIjE5frontEv(ptr noundef nonnull align 8 dereferenceable(16) %487) #7
  %518 = load i32, ptr %517, align 4, !tbaa !5
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE6EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %50, i32 noundef %518)
  %519 = load i32, ptr %50, align 4, !tbaa !5
  store i32 %519, ptr %39, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %50) #7
  %520 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %39)
  %521 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %44)
  %.not184 = icmp eq i32 %520, %521
  br i1 %.not184, label %.thread, label %.lr.ph286

.thread:                                          ; preds = %516, %479, %513, %500
  %.2144 = phi i1 [ %spec.select247, %500 ], [ %spec.select247, %513 ], [ %480, %479 ], [ %spec.select247, %516 ]
  %522 = load i8, ptr %48, align 1, !tbaa !78, !range !70, !noundef !71
  %523 = trunc nuw i8 %522 to i1
  %524 = select i1 %523, i1 %.2144, i1 false
  br i1 %524, label %525, label %543

525:                                              ; preds = %.thread
  call void @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5clearEv(ptr noundef nonnull align 8 dereferenceable(56) %36) #7
  %526 = getelementptr inbounds i8, ptr %473, i64 28
  %527 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %526)
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %51) #7
  store ptr %475, ptr %51, align 8, !tbaa !79
  store ptr %48, ptr %306, align 8, !tbaa !79
  invoke void @"_ZNK11spirv_cross3CFG9walk_fromIZNS_8Compiler22analyze_variable_scopeERNS_12SPIRFunctionERNS2_33AnalyzeVariableScopeAccessHandlerEE3$_0EEvRSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEjRKT_"(ptr noundef nonnull align 8 dereferenceable(356) %60, ptr noundef nonnull align 8 dereferenceable(56) %36, i32 noundef %527, ptr noundef nonnull align 8 dereferenceable(16) %51)
          to label %528 unwind label %531

528:                                              ; preds = %525
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %51) #7
  %529 = load i8, ptr %48, align 1, !tbaa !78, !range !70, !noundef !71
  %530 = trunc nuw i8 %529 to i1
  br i1 %530, label %533, label %543

531:                                              ; preds = %525
  %532 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %51) #7
  br label %547

533:                                              ; preds = %528
  %534 = getelementptr inbounds i8, ptr %473, i64 864
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %52) #7
  %535 = load i32, ptr %426, align 4, !tbaa !77
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE2EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %52, i32 noundef %535)
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE2EEELm8EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %534, ptr noundef nonnull align 4 dereferenceable(4) %52) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %52) #7
  %536 = call noundef ptr @_ZSt5beginIN11spirv_cross11SmallVectorINS0_7TypedIDILNS0_5TypesE2EEELm8EEEEDTcldtfp_5beginEERT_(ptr noundef nonnull align 8 dereferenceable(56) %534)
  %537 = call noundef ptr @_ZSt3endIN11spirv_cross11SmallVectorINS0_7TypedIDILNS0_5TypesE2EEELm8EEEEDTcldtfp_3endEERT_(ptr noundef nonnull align 8 dereferenceable(56) %534)
  invoke void @_ZSt4sortIPN11spirv_cross7TypedIDILNS0_5TypesE2EEEEvT_S5_(ptr noundef %536, ptr noundef %537)
          to label %538 unwind label %494

538:                                              ; preds = %533
  %539 = load i32, ptr %426, align 4, !tbaa !77
  %540 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %539)
          to label %541 unwind label %494

541:                                              ; preds = %538
  %542 = getelementptr inbounds i8, ptr %540, i64 164
  store i8 1, ptr %542, align 4, !tbaa !80
  br label %543

543:                                              ; preds = %.thread, %528, %541
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %48) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %44) #7
  br label %544

544:                                              ; preds = %443, %437, %.critedge3, %543
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %40) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %39) #7
  %545 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8__detail14_Node_iteratorISt4pairIKjjELb0ELb0EEppEv(ptr noundef nonnull align 8 dereferenceable(8) %37) #7
  %546 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseISt4pairIKjjELb0EEES6_(ptr noundef nonnull align 8 dereferenceable(8) %37, ptr noundef nonnull align 8 dereferenceable(8) %38) #7
  br i1 %546, label %425, label %._crit_edge290

547:                                              ; preds = %501, %514, %531, %496, %494
  %.pn190 = phi { ptr, i32 } [ %495, %494 ], [ %532, %531 ], [ %497, %496 ], [ %515, %514 ], [ %502, %501 ]
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %48) #7
  br label %548

548:                                              ; preds = %488, %492, %547, %490, %456
  %.pn190.pn.pn.pn.pn = phi { ptr, i32 } [ %457, %456 ], [ %489, %488 ], [ %491, %490 ], [ %.pn190, %547 ], [ %493, %492 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %44) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %40) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %39) #7
  br label %549

549:                                              ; preds = %548, %441
  %.pn190.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn190.pn.pn.pn.pn, %548 ], [ %442, %441 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %38) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #7
  call void @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %36) #7
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %36) #7
  br label %550

550:                                              ; preds = %90, %108, %549, %424, %301
  %.pn238.pn.pn = phi { ptr, i32 } [ %.pn231.pn.pn.pn.pn, %301 ], [ %.pn205.pn.pn.pn.pn.pn, %424 ], [ %.pn190.pn.pn.pn.pn.pn, %549 ], [ %.pn238, %108 ], [ %91, %90 ]
  call void @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEED2Ev(ptr noundef nonnull align 8 dereferenceable(56) %6) #7
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %6) #7
  resume { ptr, i32 } %.pn238.pn.pn
}

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNKSt8__detail14_Node_iteratorISt4pairIKN11spirv_cross7TypedIDILNS2_5TypesE6EEES5_ELb0ELb1EEptEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #0 align 2

declare noundef i32 @_ZNK11spirv_cross3CFG19find_loop_dominatorEj(ptr noundef nonnull align 8 dereferenceable(356), i32 noundef) local_unnamed_addr #6

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(56)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt13unordered_mapIjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEES2_S4_SaISt4pairIKjS6_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(56)) local_unnamed_addr #0 align 2

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

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

declare void @_ZN11spirv_cross16DominatorBuilder29lift_continue_block_dominatorEv(ptr noundef nonnull align 8 dereferenceable(12)) local_unnamed_addr #6

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8__detail14_Node_iteratorISt4pairIKjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEELb0ELb0EEppEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross8Compiler20is_single_block_loopEj(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN11spirv_cross11SmallVectorISt4pairINS_7TypedIDILNS_5TypesE1EEENS2_ILS3_0EEEELm8EE12emplace_backIJRjRKjEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(88), ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(56)) local_unnamed_addr #0 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(56) ptr @_ZNK11spirv_cross3CFG20get_succeeding_edgesEj(ptr noundef nonnull align 8 dereferenceable(356), i32 noundef) local_unnamed_addr #3 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE5clearEv(ptr noundef nonnull align 8 dereferenceable(56)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZNK11spirv_cross3CFG9walk_fromIZNS_8Compiler22analyze_variable_scopeERNS_12SPIRFunctionERNS2_33AnalyzeVariableScopeAccessHandlerEE3$_0EEvRSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEjRKT_"(ptr noundef nonnull align 8 dereferenceable(356), ptr noundef nonnull align 8 dereferenceable(56), i32 noundef, ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZSt4sortIPN11spirv_cross7TypedIDILNS0_5TypesE2EEEEvT_S5_(ptr noundef, ptr noundef) local_unnamed_addr #5

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8__detail14_Node_iteratorISt4pairIKjjELb0ELb0EEppEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #0 align 2

attributes #0 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #3 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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 #5 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nounwind }
attributes #8 = { noreturn nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !6, i64 0}
!10 = !{!"_ZTSSt4pairIKjSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEEE", !6, i64 0, !11, i64 8}
!11 = !{!"_ZTSSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE", !12, i64 0}
!12 = !{!"_ZTSSt10_HashtableIjjSaIjENSt8__detail9_IdentityESt8equal_toIjESt4hashIjENS1_18_Mod_range_hashingENS1_20_Default_ranged_hashENS1_20_Prime_rehash_policyENS1_17_Hashtable_traitsILb0ELb1ELb1EEEE", !13, i64 0, !14, i64 8, !15, i64 16, !14, i64 24, !16, i64 32, !13, i64 48}
!13 = !{!"any pointer", !7, i64 0}
!14 = !{!"long", !7, i64 0}
!15 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !13, i64 0}
!16 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !17, i64 0, !14, i64 8}
!17 = !{!"float", !7, i64 0}
!18 = !{!19, !6, i64 24}
!19 = !{!"_ZTSN11spirv_cross8SPIRTypeE", !20, i64 0, !22, i64 12, !23, i64 16, !6, i64 20, !6, i64 24, !6, i64 28, !24, i64 32, !27, i64 88, !6, i64 120, !30, i64 124, !30, i64 125, !31, i64 128, !32, i64 136, !24, i64 192, !35, i64 248, !36, i64 272, !36, i64 276, !40, i64 280}
!20 = !{!"_ZTSN11spirv_cross8IVariantE", !21, i64 8}
!21 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !6, i64 0}
!22 = !{!"_ZTSN3spv2OpE", !7, i64 0}
!23 = !{!"_ZTSN11spirv_cross8SPIRType8BaseTypeE", !7, i64 0}
!24 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !25, i64 0, !14, i64 16, !26, i64 24}
!25 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !13, i64 0, !14, i64 8}
!26 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !7, i64 0}
!27 = !{!"_ZTSN11spirv_cross11SmallVectorIbLm8EEE", !28, i64 0, !14, i64 16, !29, i64 24}
!28 = !{!"_ZTSN11spirv_cross10VectorViewIbEE", !13, i64 0, !14, i64 8}
!29 = !{!"_ZTSN11spirv_cross13AlignedBufferIbLm8EEE", !7, i64 0}
!30 = !{!"bool", !7, i64 0}
!31 = !{!"_ZTSN3spv12StorageClassE", !7, i64 0}
!32 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEE", !33, i64 0, !14, i64 16, !34, i64 24}
!33 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEE", !13, i64 0, !14, i64 8}
!34 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE1EEELm8EEE", !7, i64 0}
!35 = !{!"_ZTSN11spirv_cross8SPIRType9ImageTypeE", !36, i64 0, !37, i64 4, !30, i64 8, !30, i64 9, !30, i64 10, !6, i64 12, !38, i64 16, !39, i64 20}
!36 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !6, i64 0}
!37 = !{!"_ZTSN3spv3DimE", !7, i64 0}
!38 = !{!"_ZTSN3spv11ImageFormatE", !7, i64 0}
!39 = !{!"_ZTSN3spv15AccessQualifierE", !7, i64 0}
!40 = !{!"_ZTSSt13unordered_setINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4hashIS5_ESt8equal_toIS5_ESaIS5_EE", !41, i64 0}
!41 = !{!"_ZTSSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_SaIS5_ENSt8__detail9_IdentityESt8equal_toIS5_ESt4hashIS5_ENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb1ELb1ELb1EEEE", !13, i64 0, !14, i64 8, !15, i64 16, !14, i64 24, !16, i64 32, !13, i64 48}
!42 = !{!43, !45, i64 16}
!43 = !{!"_ZTSN11spirv_cross9SPIRBlockE", !20, i64 0, !44, i64 12, !45, i64 16, !46, i64 20, !47, i64 24, !47, i64 28, !47, i64 32, !21, i64 36, !21, i64 40, !47, i64 44, !47, i64 48, !47, i64 52, !48, i64 56, !49, i64 72, !52, i64 192, !55, i64 312, !55, i64 400, !58, i64 488, !58, i64 640, !30, i64 792, !30, i64 793, !30, i64 794, !47, i64 796, !47, i64 800, !61, i64 808, !61, i64 864, !64, i64 920}
!44 = !{!"_ZTSN11spirv_cross9SPIRBlock10TerminatorE", !7, i64 0}
!45 = !{!"_ZTSN11spirv_cross9SPIRBlock5MergeE", !7, i64 0}
!46 = !{!"_ZTSN11spirv_cross9SPIRBlock5HintsE", !7, i64 0}
!47 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE6EEE", !6, i64 0}
!48 = !{!"_ZTSN11spirv_cross9SPIRBlockUt1_E", !7, i64 0, !21, i64 12}
!49 = !{!"_ZTSN11spirv_cross11SmallVectorINS_11InstructionELm8EEE", !50, i64 0, !14, i64 16, !51, i64 24}
!50 = !{!"_ZTSN11spirv_cross10VectorViewINS_11InstructionEEE", !13, i64 0, !14, i64 8}
!51 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_11InstructionELm8EEE", !7, i64 0}
!52 = !{!"_ZTSN11spirv_cross11SmallVectorINS_9SPIRBlock3PhiELm8EEE", !53, i64 0, !14, i64 16, !54, i64 24}
!53 = !{!"_ZTSN11spirv_cross10VectorViewINS_9SPIRBlock3PhiEEE", !13, i64 0, !14, i64 8}
!54 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_9SPIRBlock3PhiELm8EEE", !7, i64 0}
!55 = !{!"_ZTSN11spirv_cross11SmallVectorISt4pairINS_7TypedIDILNS_5TypesE1EEENS2_ILS3_0EEEELm8EEE", !56, i64 0, !14, i64 16, !57, i64 24}
!56 = !{!"_ZTSN11spirv_cross10VectorViewISt4pairINS_7TypedIDILNS_5TypesE1EEENS2_ILS3_0EEEEEE", !13, i64 0, !14, i64 8}
!57 = !{!"_ZTSN11spirv_cross13AlignedBufferISt4pairINS_7TypedIDILNS_5TypesE1EEENS2_ILS3_0EEEELm8EEE", !7, i64 0}
!58 = !{!"_ZTSN11spirv_cross11SmallVectorINS_9SPIRBlock4CaseELm8EEE", !59, i64 0, !14, i64 16, !60, i64 24}
!59 = !{!"_ZTSN11spirv_cross10VectorViewINS_9SPIRBlock4CaseEEE", !13, i64 0, !14, i64 8}
!60 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_9SPIRBlock4CaseELm8EEE", !7, i64 0}
!61 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE2EEELm8EEE", !62, i64 0, !14, i64 16, !63, i64 24}
!62 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEEE", !13, i64 0, !14, i64 8}
!63 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE2EEELm8EEE", !7, i64 0}
!64 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EEE", !65, i64 0, !14, i64 16, !66, i64 24}
!65 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEEE", !13, i64 0, !14, i64 8}
!66 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE0EEELm8EEE", !7, i64 0}
!67 = !{!68, !30, i64 153}
!68 = !{!"_ZTSN11spirv_cross12SPIRVariableE", !20, i64 0, !36, i64 12, !31, i64 16, !6, i64 20, !21, i64 24, !69, i64 28, !24, i64 32, !30, i64 88, !30, i64 89, !21, i64 92, !64, i64 96, !30, i64 152, !30, i64 153, !30, i64 154, !30, i64 155, !6, i64 156, !47, i64 160, !30, i64 164, !30, i64 165, !30, i64 166, !13, i64 168}
!69 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE2EEE", !6, i64 0}
!70 = !{i8 0, i8 2}
!71 = !{}
!72 = distinct !{!72, !73}
!73 = !{!"llvm.loop.mustprogress"}
!74 = !{!75, !6, i64 4}
!75 = !{!"_ZTSSt4pairIKjjE", !6, i64 0, !6, i64 4}
!76 = !{!43, !30, i64 793}
!77 = !{!75, !6, i64 0}
!78 = !{!30, !30, i64 0}
!79 = !{!13, !13, i64 0}
!80 = !{!68, !30, i64 164}


; Effective O3 passes: AggressiveInstCombinePass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass