; 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.spirv_cross::Compiler::CFGBuilder" = type { %"struct.spirv_cross::Compiler::OpcodeHandler", ptr, %"class.std::unordered_map.117" }
%"struct.spirv_cross::Compiler::OpcodeHandler" = type { ptr }
%"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 }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%"struct.std::__detail::_Node_iterator.347" = type { %"struct.std::__detail::_Node_iterator_base.348" }
%"struct.std::__detail::_Node_iterator_base.348" = 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 }
%"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 }
%"class.std::unordered_set" = type { %"class.std::_Hashtable.74" }
%"class.std::_Hashtable.74" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.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 }
%"class.spirv_cross::TypedID.165" = type { i32 }
%"class.spirv_cross::TypedID.162" = type { i32 }
%"class.spirv_cross::TypedID.164" = type { i32 }
%"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.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.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::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.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.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.spirv_cross::SPIRConstant" = type { %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.163", %"struct.spirv_cross::SPIRConstant::ConstantMatrix", i8, i8, i8, %"class.spirv_cross::SmallVector.235", %"class.std::__cxx11::basic_string" }
%"struct.spirv_cross::SPIRConstant::ConstantMatrix" = type { [4 x %"struct.spirv_cross::SPIRConstant::ConstantVector"], [4 x %"class.spirv_cross::TypedID.162"], i32, [4 x i8] }
%"struct.spirv_cross::SPIRConstant::ConstantVector" = type <{ [4 x %"union.spirv_cross::SPIRConstant::Constant"], [4 x %"class.spirv_cross::TypedID.162"], i32, [4 x i8] }>
%"union.spirv_cross::SPIRConstant::Constant" = type { i64 }
%"class.spirv_cross::SmallVector.235" = type { %"class.spirv_cross::VectorView.236", i64, %"class.spirv_cross::AlignedBuffer.237" }
%"class.spirv_cross::VectorView.236" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.237" = type { [32 x i8] }

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336)) #1 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: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE4EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4)) #1 align 2

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross8Compiler46build_function_control_flow_graphs_and_analyzeEv(ptr noundef nonnull align 8 dereferenceable(3176) %0) #3 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca ptr, align 8
  %3 = alloca %"struct.spirv_cross::Compiler::CFGBuilder", align 8
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i8, align 1
  %8 = alloca ptr, align 8
  %9 = alloca %"struct.std::__detail::_Node_iterator.347", align 8
  %10 = alloca %"struct.std::__detail::_Node_iterator.347", align 8
  %11 = alloca i32, align 4
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca %"class.spirv_cross::TypedID.165", align 4
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca %"class.spirv_cross::TypedID.162", align 4
  %22 = alloca i32, align 4
  %23 = alloca i8, align 1
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca %"class.spirv_cross::TypedID.164", align 4
  %28 = alloca %"class.spirv_cross::TypedID.162", align 4
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca %"class.spirv_cross::TypedID.164", align 4
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  store ptr %0, ptr %2, align 8, !tbaa !5
  %39 = load ptr, ptr %2, align 8
  call void @llvm.lifetime.start.p0(i64 72, ptr %3) #9
  call void @_ZN11spirv_cross8Compiler10CFGBuilderC1ERS0_(ptr noundef nonnull align 8 dereferenceable(72) %3, ptr noundef nonnull align 8 dereferenceable(3176) %39)
  %40 = getelementptr inbounds %"struct.spirv_cross::Compiler::CFGBuilder", ptr %3, i32 0, i32 2
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #9
  %41 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %39, i32 0, i32 1
  %42 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %41, i32 0, i32 13
  %43 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE4EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %42)
          to label %44 unwind label %83

44:                                               ; preds = %1
  store i32 %43, ptr %4, align 4, !tbaa !9
  %45 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt13unordered_mapIjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS2_EESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %40, ptr noundef nonnull align 4 dereferenceable(4) %4)
          to label %46 unwind label %83

46:                                               ; preds = %44
  %47 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 360) #10
          to label %48 unwind label %83

48:                                               ; preds = %46
  %49 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %39, i32 0, i32 1
  %50 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %49, i32 0, i32 13
  %51 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE4EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %50)
          to label %52 unwind label %87

52:                                               ; preds = %48
  %53 = invoke noundef nonnull align 8 dereferenceable(795) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRFunctionEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %39, i32 noundef %51)
          to label %54 unwind label %87

54:                                               ; preds = %52
  invoke void @_ZN11spirv_cross3CFGC1ERNS_8CompilerERKNS_12SPIRFunctionE(ptr noundef nonnull align 8 dereferenceable(356) %47, ptr noundef nonnull align 8 dereferenceable(3176) %39, ptr noundef nonnull align 8 dereferenceable(795) %53)
          to label %55 unwind label %87

55:                                               ; preds = %54
  call void @_ZNSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS1_EE5resetEPS1_(ptr noundef nonnull align 8 dereferenceable(8) %45, ptr noundef %47) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #9
  %56 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %39, i32 0, i32 1
  %57 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %56, i32 0, i32 13
  %58 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE4EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %57)
          to label %59 unwind label %92

59:                                               ; preds = %55
  %60 = invoke noundef nonnull align 8 dereferenceable(795) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRFunctionEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %39, i32 noundef %58)
          to label %61 unwind label %92

61:                                               ; preds = %59
  %62 = invoke noundef zeroext i1 @_ZNK11spirv_cross8Compiler30traverse_all_reachable_opcodesERKNS_12SPIRFunctionERNS0_13OpcodeHandlerE(ptr noundef nonnull align 8 dereferenceable(3176) %39, ptr noundef nonnull align 8 dereferenceable(795) %60, ptr noundef nonnull align 8 dereferenceable(8) %3)
          to label %63 unwind label %92

63:                                               ; preds = %61
  %64 = getelementptr inbounds %"struct.spirv_cross::Compiler::CFGBuilder", ptr %3, i32 0, i32 2
  %65 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %39, i32 0, i32 29
  %66 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS2_EESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEEaSEOSE_(ptr noundef nonnull align 8 dereferenceable(56) %65, ptr noundef nonnull align 8 dereferenceable(56) %64) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %7) #9
  %67 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %39, i32 0, i32 29
  %68 = call noundef i64 @_ZNKSt13unordered_mapIjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS2_EESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(56) %67) #9
  %69 = icmp ule i64 %68, 1
  %70 = zext i1 %69 to i8
  store i8 %70, ptr %7, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #9
  %71 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %39, i32 0, i32 29
  store ptr %71, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #9
  %72 = load ptr, ptr %8, align 8, !tbaa !5
  %73 = call ptr @_ZNSt13unordered_mapIjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS2_EESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(56) %72) #9
  %74 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.347", ptr %9, i32 0, i32 0
  %75 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.348", ptr %74, i32 0, i32 0
  store ptr %73, ptr %75, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #9
  %76 = load ptr, ptr %8, align 8, !tbaa !5
  %77 = call ptr @_ZNSt13unordered_mapIjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS2_EESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %76) #9
  %78 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.347", ptr %10, i32 0, i32 0
  %79 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.348", ptr %78, i32 0, i32 0
  store ptr %77, ptr %79, align 8
  br label %80

80:                                               ; preds = %270, %63
  %81 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseISt4pairIKjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS5_EEELb0EEESC_(ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef nonnull align 8 dereferenceable(8) %10) #9
  br i1 %81, label %96, label %82

82:                                               ; preds = %80
  store i32 2, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #9
  br label %275

83:                                               ; preds = %46, %44, %1
  %84 = landingpad { ptr, i32 }
          cleanup
  %85 = extractvalue { ptr, i32 } %84, 0
  store ptr %85, ptr %5, align 8
  %86 = extractvalue { ptr, i32 } %84, 1
  store i32 %86, ptr %6, align 4
  br label %91

87:                                               ; preds = %54, %52, %48
  %88 = landingpad { ptr, i32 }
          cleanup
  %89 = extractvalue { ptr, i32 } %88, 0
  store ptr %89, ptr %5, align 8
  %90 = extractvalue { ptr, i32 } %88, 1
  store i32 %90, ptr %6, align 4
  call void @_ZdlPvm(ptr noundef %47, i64 noundef 360) #11
  br label %91

91:                                               ; preds = %87, %83
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #9
  br label %360

92:                                               ; preds = %61, %59, %55
  %93 = landingpad { ptr, i32 }
          cleanup
  %94 = extractvalue { ptr, i32 } %93, 0
  store ptr %94, ptr %5, align 8
  %95 = extractvalue { ptr, i32 } %93, 1
  store i32 %95, ptr %6, align 4
  br label %360

96:                                               ; preds = %80
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #9
  %97 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNKSt8__detail14_Node_iteratorISt4pairIKjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS5_EEELb0ELb0EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %9) #9
  store ptr %97, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #9
  %98 = load ptr, ptr %12, align 8, !tbaa !5
  %99 = getelementptr inbounds %"struct.std::pair.349", ptr %98, i32 0, i32 0
  %100 = load i32, ptr %99, align 8, !tbaa !13
  %101 = invoke noundef nonnull align 8 dereferenceable(795) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRFunctionEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %39, i32 noundef %100)
          to label %102 unwind label %122

102:                                              ; preds = %96
  store ptr %101, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 424, ptr %14) #9
  %103 = load ptr, ptr %13, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandlerC1ERS0_RNS_12SPIRFunctionE(ptr noundef nonnull align 8 dereferenceable(424) %14, ptr noundef nonnull align 8 dereferenceable(3176) %39, ptr noundef nonnull align 8 dereferenceable(795) %103)
          to label %104 unwind label %126

104:                                              ; preds = %102
  %105 = load ptr, ptr %13, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross8Compiler22analyze_variable_scopeERNS_12SPIRFunctionERNS0_33AnalyzeVariableScopeAccessHandlerE(ptr noundef nonnull align 8 dereferenceable(3176) %39, ptr noundef nonnull align 8 dereferenceable(795) %105, ptr noundef nonnull align 8 dereferenceable(424) %14)
          to label %106 unwind label %130

106:                                              ; preds = %104
  %107 = load ptr, ptr %13, align 8, !tbaa !5
  %108 = load i8, ptr %7, align 1, !tbaa !11, !range !21, !noundef !22
  %109 = trunc i8 %108 to i1
  invoke void @_ZN11spirv_cross8Compiler24find_function_local_lutsERNS_12SPIRFunctionERKNS0_33AnalyzeVariableScopeAccessHandlerEb(ptr noundef nonnull align 8 dereferenceable(3176) %39, ptr noundef nonnull align 8 dereferenceable(795) %107, ptr noundef nonnull align 8 dereferenceable(424) %14, i1 noundef zeroext %109)
          to label %110 unwind label %130

110:                                              ; preds = %106
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #9
  %111 = load ptr, ptr %13, align 8, !tbaa !5
  %112 = getelementptr inbounds %"struct.spirv_cross::SPIRFunction", ptr %111, i32 0, i32 9
  store ptr %112, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #9
  %113 = load ptr, ptr %15, align 8, !tbaa !5
  %114 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE6EEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %113) #9
  store ptr %114, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #9
  %115 = load ptr, ptr %15, align 8, !tbaa !5
  %116 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE6EEEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %115) #9
  store ptr %116, ptr %17, align 8, !tbaa !5
  br label %117

117:                                              ; preds = %262, %110
  %118 = load ptr, ptr %16, align 8, !tbaa !5
  %119 = load ptr, ptr %17, align 8, !tbaa !5
  %120 = icmp ne ptr %118, %119
  br i1 %120, label %134, label %121

121:                                              ; preds = %117
  store i32 4, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #9
  br label %269

122:                                              ; preds = %96
  %123 = landingpad { ptr, i32 }
          cleanup
  %124 = extractvalue { ptr, i32 } %123, 0
  store ptr %124, ptr %5, align 8
  %125 = extractvalue { ptr, i32 } %123, 1
  store i32 %125, ptr %6, align 4
  br label %274

126:                                              ; preds = %102
  %127 = landingpad { ptr, i32 }
          cleanup
  %128 = extractvalue { ptr, i32 } %127, 0
  store ptr %128, ptr %5, align 8
  %129 = extractvalue { ptr, i32 } %127, 1
  store i32 %129, ptr %6, align 4
  br label %273

130:                                              ; preds = %106, %104
  %131 = landingpad { ptr, i32 }
          cleanup
  %132 = extractvalue { ptr, i32 } %131, 0
  store ptr %132, ptr %5, align 8
  %133 = extractvalue { ptr, i32 } %131, 1
  store i32 %133, ptr %6, align 4
  br label %272

134:                                              ; preds = %117
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #9
  %135 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %18, ptr align 4 %135, i64 4, i1 false), !tbaa.struct !23
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #9
  %136 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %18)
          to label %137 unwind label %145

137:                                              ; preds = %134
  %138 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %39, i32 noundef %136)
          to label %139 unwind label %145

139:                                              ; preds = %137
  store ptr %138, ptr %19, align 8, !tbaa !5
  %140 = load ptr, ptr %19, align 8, !tbaa !5
  %141 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %140, i32 0, i32 25
  %142 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %141) #9
  %143 = icmp ult i64 %142, 2
  br i1 %143, label %144, label %149

144:                                              ; preds = %139
  store i32 5, ptr %11, align 4
  br label %256

145:                                              ; preds = %137, %134
  %146 = landingpad { ptr, i32 }
          cleanup
  %147 = extractvalue { ptr, i32 } %146, 0
  store ptr %147, ptr %5, align 8
  %148 = extractvalue { ptr, i32 } %146, 1
  store i32 %148, ptr %6, align 4
  br label %268

149:                                              ; preds = %139
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #9
  %150 = load ptr, ptr %19, align 8, !tbaa !5
  %151 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %150, i32 0, i32 25
  %152 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE5frontEv(ptr noundef nonnull align 8 dereferenceable(16) %151) #9
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2ILS1_2EEERKNS0_IXT_EEE(ptr noundef nonnull align 4 dereferenceable(4) %21, ptr noundef nonnull align 4 dereferenceable(4) %152)
          to label %153 unwind label %179

153:                                              ; preds = %149
  %154 = getelementptr inbounds %"class.spirv_cross::TypedID.162", ptr %21, i32 0, i32 0
  %155 = load i32, ptr %154, align 4
  %156 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZNK11spirv_cross8Compiler21get_decoration_bitsetENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(3176) %39, i32 %155)
          to label %157 unwind label %179

157:                                              ; preds = %153
  store ptr %156, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #9
  %158 = load ptr, ptr %19, align 8, !tbaa !5
  %159 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %158, i32 0, i32 25
  %160 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE5frontEv(ptr noundef nonnull align 8 dereferenceable(16) %159) #9
  %161 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %160)
          to label %162 unwind label %183

162:                                              ; preds = %157
  %163 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %39, i32 noundef %161)
          to label %164 unwind label %183

164:                                              ; preds = %162
  %165 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %163, i32 0, i32 1
  %166 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %165)
          to label %167 unwind label %183

167:                                              ; preds = %164
  store i32 %166, ptr %22, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %23) #9
  store i8 0, ptr %23, align 1, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #9
  %168 = load ptr, ptr %19, align 8, !tbaa !5
  %169 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %168, i32 0, i32 25
  store ptr %169, ptr %24, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #9
  %170 = load ptr, ptr %24, align 8, !tbaa !5
  %171 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %170) #9
  store ptr %171, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #9
  %172 = load ptr, ptr %24, align 8, !tbaa !5
  %173 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %172) #9
  store ptr %173, ptr %26, align 8, !tbaa !5
  br label %174

174:                                              ; preds = %219, %167
  %175 = load ptr, ptr %25, align 8, !tbaa !5
  %176 = load ptr, ptr %26, align 8, !tbaa !5
  %177 = icmp ne ptr %175, %176
  br i1 %177, label %187, label %178

178:                                              ; preds = %174
  store i32 6, ptr %11, align 4
  br label %222

179:                                              ; preds = %153, %149
  %180 = landingpad { ptr, i32 }
          cleanup
  %181 = extractvalue { ptr, i32 } %180, 0
  store ptr %181, ptr %5, align 8
  %182 = extractvalue { ptr, i32 } %180, 1
  store i32 %182, ptr %6, align 4
  br label %267

183:                                              ; preds = %164, %162, %157
  %184 = landingpad { ptr, i32 }
          cleanup
  %185 = extractvalue { ptr, i32 } %184, 0
  store ptr %185, ptr %5, align 8
  %186 = extractvalue { ptr, i32 } %184, 1
  store i32 %186, ptr %6, align 4
  br label %266

187:                                              ; preds = %174
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #9
  %188 = load ptr, ptr %25, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %27, ptr align 4 %188, i64 4, i1 false), !tbaa.struct !23
  %189 = load ptr, ptr %20, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2ILS1_2EEERKNS0_IXT_EEE(ptr noundef nonnull align 4 dereferenceable(4) %28, ptr noundef nonnull align 4 dereferenceable(4) %27)
          to label %190 unwind label %211

190:                                              ; preds = %187
  %191 = getelementptr inbounds %"class.spirv_cross::TypedID.162", ptr %28, i32 0, i32 0
  %192 = load i32, ptr %191, align 4
  %193 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZNK11spirv_cross8Compiler21get_decoration_bitsetENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(3176) %39, i32 %192)
          to label %194 unwind label %211

194:                                              ; preds = %190
  %195 = invoke noundef zeroext i1 @_ZNK11spirv_cross6BitsetneERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %189, ptr noundef nonnull align 8 dereferenceable(64) %193)
          to label %196 unwind label %211

196:                                              ; preds = %194
  br i1 %195, label %210, label %197

197:                                              ; preds = %196
  %198 = load i32, ptr %22, align 4, !tbaa !9
  %199 = load ptr, ptr %19, align 8, !tbaa !5
  %200 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %199, i32 0, i32 25
  %201 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE5frontEv(ptr noundef nonnull align 8 dereferenceable(16) %200) #9
  %202 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %201)
          to label %203 unwind label %211

203:                                              ; preds = %197
  %204 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %39, i32 noundef %202)
          to label %205 unwind label %211

205:                                              ; preds = %203
  %206 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %204, i32 0, i32 1
  %207 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %206)
          to label %208 unwind label %211

208:                                              ; preds = %205
  %209 = icmp ne i32 %198, %207
  br i1 %209, label %210, label %215

210:                                              ; preds = %208, %196
  store i8 1, ptr %23, align 1, !tbaa !11
  store i32 6, ptr %11, align 4
  br label %216

211:                                              ; preds = %205, %203, %197, %194, %190, %187
  %212 = landingpad { ptr, i32 }
          cleanup
  %213 = extractvalue { ptr, i32 } %212, 0
  store ptr %213, ptr %5, align 8
  %214 = extractvalue { ptr, i32 } %212, 1
  store i32 %214, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #9
  br label %265

215:                                              ; preds = %208
  store i32 0, ptr %11, align 4
  br label %216

216:                                              ; preds = %215, %210
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #9
  %217 = load i32, ptr %11, align 4
  switch i32 %217, label %222 [
    i32 0, label %218
  ]

218:                                              ; preds = %216
  br label %219

219:                                              ; preds = %218
  %220 = load ptr, ptr %25, align 8, !tbaa !5
  %221 = getelementptr inbounds %"class.spirv_cross::TypedID.164", ptr %220, i32 1
  store ptr %221, ptr %25, align 8, !tbaa !5
  br label %174

222:                                              ; preds = %216, %178
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #9
  br label %223

223:                                              ; preds = %222
  %224 = load i8, ptr %23, align 1, !tbaa !11, !range !21, !noundef !22
  %225 = trunc i8 %224 to i1
  br i1 %225, label %226, label %255

226:                                              ; preds = %223
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #9
  %227 = load ptr, ptr %19, align 8, !tbaa !5
  %228 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %227, i32 0, i32 25
  store ptr %228, ptr %29, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #9
  %229 = load ptr, ptr %29, align 8, !tbaa !5
  %230 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %229) #9
  store ptr %230, ptr %30, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #9
  %231 = load ptr, ptr %29, align 8, !tbaa !5
  %232 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %231) #9
  store ptr %232, ptr %31, align 8, !tbaa !5
  br label %233

233:                                              ; preds = %245, %226
  %234 = load ptr, ptr %30, align 8, !tbaa !5
  %235 = load ptr, ptr %31, align 8, !tbaa !5
  %236 = icmp ne ptr %234, %235
  br i1 %236, label %238, label %237

237:                                              ; preds = %233
  store i32 8, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #9
  br label %252

238:                                              ; preds = %233
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #9
  %239 = load ptr, ptr %30, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %32, ptr align 4 %239, i64 4, i1 false), !tbaa.struct !23
  %240 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %32)
          to label %241 unwind label %248

241:                                              ; preds = %238
  %242 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %39, i32 noundef %240)
          to label %243 unwind label %248

243:                                              ; preds = %241
  %244 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %242, i32 0, i32 17
  store i8 0, ptr %244, align 4, !tbaa !24
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #9
  br label %245

245:                                              ; preds = %243
  %246 = load ptr, ptr %30, align 8, !tbaa !5
  %247 = getelementptr inbounds %"class.spirv_cross::TypedID.164", ptr %246, i32 1
  store ptr %247, ptr %30, align 8, !tbaa !5
  br label %233

248:                                              ; preds = %241, %238
  %249 = landingpad { ptr, i32 }
          cleanup
  %250 = extractvalue { ptr, i32 } %249, 0
  store ptr %250, ptr %5, align 8
  %251 = extractvalue { ptr, i32 } %249, 1
  store i32 %251, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #9
  br label %265

252:                                              ; preds = %237
  %253 = load ptr, ptr %19, align 8, !tbaa !5
  %254 = getelementptr inbounds %"struct.spirv_cross::SPIRBlock", ptr %253, i32 0, i32 25
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE2EEELm8EE5clearEv(ptr noundef nonnull align 8 dereferenceable(56) %254) #9
  br label %255

255:                                              ; preds = %252, %223
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #9
  store i32 0, ptr %11, align 4
  br label %256

256:                                              ; preds = %255, %144
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #9
  %257 = load i32, ptr %11, align 4
  switch i32 %257, label %259 [
    i32 0, label %258
  ]

258:                                              ; preds = %256
  store i32 0, ptr %11, align 4
  br label %259

259:                                              ; preds = %258, %256
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #9
  %260 = load i32, ptr %11, align 4
  switch i32 %260, label %366 [
    i32 0, label %261
    i32 5, label %262
  ]

261:                                              ; preds = %259
  br label %262

262:                                              ; preds = %261, %259
  %263 = load ptr, ptr %16, align 8, !tbaa !5
  %264 = getelementptr inbounds %"class.spirv_cross::TypedID.165", ptr %263, i32 1
  store ptr %264, ptr %16, align 8, !tbaa !5
  br label %117

265:                                              ; preds = %248, %211
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #9
  br label %266

266:                                              ; preds = %265, %183
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #9
  br label %267

267:                                              ; preds = %266, %179
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #9
  br label %268

268:                                              ; preds = %267, %145
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #9
  br label %272

269:                                              ; preds = %121
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandlerD2Ev(ptr noundef nonnull align 8 dereferenceable(424) %14) #9
  call void @llvm.lifetime.end.p0(i64 424, ptr %14) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #9
  br label %270

270:                                              ; preds = %269
  %271 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8__detail14_Node_iteratorISt4pairIKjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS5_EEELb0ELb0EEppEv(ptr noundef nonnull align 8 dereferenceable(8) %9) #9
  br label %80

272:                                              ; preds = %268, %130
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandlerD2Ev(ptr noundef nonnull align 8 dereferenceable(424) %14) #9
  br label %273

273:                                              ; preds = %272, %126
  call void @llvm.lifetime.end.p0(i64 424, ptr %14) #9
  br label %274

274:                                              ; preds = %273, %122
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #9
  br label %359

275:                                              ; preds = %82
  %276 = load i8, ptr %7, align 1, !tbaa !11, !range !21, !noundef !22
  %277 = trunc i8 %276 to i1
  br i1 %277, label %358, label %278

278:                                              ; preds = %275
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #9
  %279 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %39, i32 0, i32 2
  store ptr %279, ptr %33, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #9
  %280 = load ptr, ptr %33, align 8, !tbaa !5
  %281 = call noundef ptr @_ZN11spirv_cross10VectorViewIjE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %280) #9
  store ptr %281, ptr %34, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #9
  %282 = load ptr, ptr %33, align 8, !tbaa !5
  %283 = call noundef ptr @_ZN11spirv_cross10VectorViewIjE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %282) #9
  store ptr %283, ptr %35, align 8, !tbaa !5
  br label %284

284:                                              ; preds = %353, %278
  %285 = load ptr, ptr %34, align 8, !tbaa !5
  %286 = load ptr, ptr %35, align 8, !tbaa !5
  %287 = icmp ne ptr %285, %286
  br i1 %287, label %289, label %288

288:                                              ; preds = %284
  store i32 10, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #9
  br label %357

289:                                              ; preds = %284
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #9
  %290 = load ptr, ptr %34, align 8, !tbaa !5
  store ptr %290, ptr %36, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #9
  %291 = load ptr, ptr %36, align 8, !tbaa !5
  %292 = load i32, ptr %291, align 4, !tbaa !9
  %293 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %39, i32 noundef %292)
          to label %294 unwind label %344

294:                                              ; preds = %289
  store ptr %293, ptr %37, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #9
  %295 = load ptr, ptr %37, align 8, !tbaa !5
  %296 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler22get_variable_data_typeERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %39, ptr noundef nonnull align 8 dereferenceable(176) %295)
          to label %297 unwind label %348

297:                                              ; preds = %294
  store ptr %296, ptr %38, align 8, !tbaa !5
  %298 = load ptr, ptr %38, align 8, !tbaa !5
  %299 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %39, ptr noundef nonnull align 8 dereferenceable(336) %298)
  br i1 %299, label %300, label %352

300:                                              ; preds = %297
  %301 = load ptr, ptr %37, align 8, !tbaa !5
  %302 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %301, i32 0, i32 2
  %303 = load i32, ptr %302, align 8, !tbaa !39
  %304 = icmp eq i32 %303, 6
  br i1 %304, label %305, label %352

305:                                              ; preds = %300
  %306 = load ptr, ptr %37, align 8, !tbaa !5
  %307 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %306, i32 0, i32 4
  %308 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %307)
          to label %309 unwind label %348

309:                                              ; preds = %305
  %310 = icmp ne i32 %308, 0
  br i1 %310, label %311, label %352

311:                                              ; preds = %309
  %312 = load ptr, ptr %37, align 8, !tbaa !5
  %313 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %312, i32 0, i32 19
  %314 = load i8, ptr %313, align 2, !tbaa !40, !range !21, !noundef !22
  %315 = trunc i8 %314 to i1
  br i1 %315, label %352, label %316

316:                                              ; preds = %311
  %317 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %39, i32 0, i32 1
  %318 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %317, i32 0, i32 2
  %319 = load ptr, ptr %37, align 8, !tbaa !5
  %320 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %319, i32 0, i32 4
  %321 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %320)
          to label %322 unwind label %348

322:                                              ; preds = %316
  %323 = zext i32 %321 to i64
  %324 = call noundef nonnull align 8 dereferenceable(21) ptr @_ZN11spirv_cross10VectorViewINS_7VariantEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %318, i64 noundef %323) #9
  %325 = invoke noundef i32 @_ZNK11spirv_cross7Variant8get_typeEv(ptr noundef nonnull align 8 dereferenceable(21) %324)
          to label %326 unwind label %348

326:                                              ; preds = %322
  %327 = icmp eq i32 %325, 3
  br i1 %327, label %328, label %352

328:                                              ; preds = %326
  %329 = load ptr, ptr %37, align 8, !tbaa !5
  %330 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %329, i32 0, i32 4
  %331 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %330)
          to label %332 unwind label %348

332:                                              ; preds = %328
  %333 = invoke noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRConstantEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %39, i32 noundef %331)
          to label %334 unwind label %348

334:                                              ; preds = %332
  %335 = getelementptr inbounds %"struct.spirv_cross::SPIRConstant", ptr %333, i32 0, i32 5
  store i8 1, ptr %335, align 2, !tbaa !41
  %336 = load ptr, ptr %37, align 8, !tbaa !5
  %337 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %336, i32 0, i32 4
  %338 = load ptr, ptr %37, align 8, !tbaa !5
  %339 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %338, i32 0, i32 9
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %339, ptr align 8 %337, i64 4, i1 false), !tbaa.struct !23
  %340 = load ptr, ptr %37, align 8, !tbaa !5
  %341 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %340, i32 0, i32 8
  store i8 1, ptr %341, align 1, !tbaa !49
  %342 = load ptr, ptr %37, align 8, !tbaa !5
  %343 = getelementptr inbounds %"struct.spirv_cross::SPIRVariable", ptr %342, i32 0, i32 14
  store i8 1, ptr %343, align 1, !tbaa !50
  br label %352

344:                                              ; preds = %289
  %345 = landingpad { ptr, i32 }
          cleanup
  %346 = extractvalue { ptr, i32 } %345, 0
  store ptr %346, ptr %5, align 8
  %347 = extractvalue { ptr, i32 } %345, 1
  store i32 %347, ptr %6, align 4
  br label %356

348:                                              ; preds = %332, %328, %322, %316, %305, %294
  %349 = landingpad { ptr, i32 }
          cleanup
  %350 = extractvalue { ptr, i32 } %349, 0
  store ptr %350, ptr %5, align 8
  %351 = extractvalue { ptr, i32 } %349, 1
  store i32 %351, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #9
  br label %356

352:                                              ; preds = %334, %326, %311, %309, %300, %297
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #9
  br label %353

353:                                              ; preds = %352
  %354 = load ptr, ptr %34, align 8, !tbaa !5
  %355 = getelementptr inbounds i32, ptr %354, i32 1
  store ptr %355, ptr %34, align 8, !tbaa !5
  br label %284

356:                                              ; preds = %348, %344
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #9
  br label %359

357:                                              ; preds = %288
  br label %358

358:                                              ; preds = %357, %275
  call void @llvm.lifetime.end.p0(i64 1, ptr %7) #9
  call void @_ZN11spirv_cross8Compiler10CFGBuilderD2Ev(ptr noundef nonnull align 8 dereferenceable(72) %3) #9
  call void @llvm.lifetime.end.p0(i64 72, ptr %3) #9
  ret void

359:                                              ; preds = %356, %274
  call void @llvm.lifetime.end.p0(i64 1, ptr %7) #9
  br label %360

360:                                              ; preds = %359, %92, %91
  call void @_ZN11spirv_cross8Compiler10CFGBuilderD2Ev(ptr noundef nonnull align 8 dereferenceable(72) %3) #9
  call void @llvm.lifetime.end.p0(i64 72, ptr %3) #9
  br label %361

361:                                              ; preds = %360
  %362 = load ptr, ptr %5, align 8
  %363 = load i32, ptr %6, align 4
  %364 = insertvalue { ptr, i32 } poison, ptr %362, 0
  %365 = insertvalue { ptr, i32 } %364, i32 %363, 1
  resume { ptr, i32 } %365

366:                                              ; preds = %259
  unreachable
}

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

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znwm(i64 noundef) #4

declare void @_ZN11spirv_cross3CFGC1ERNS_8CompilerERKNS_12SPIRFunctionE(ptr noundef nonnull align 8 dereferenceable(356), ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(795)) unnamed_addr #5

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPvm(ptr noundef, i64 noundef) #6

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

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

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

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

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

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

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

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

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

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

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

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

declare void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandlerC1ERS0_RNS_12SPIRFunctionE(ptr, ptr, ptr)

declare void @_ZN11spirv_cross8Compiler10CFGBuilderC1ERS0_(ptr, ptr)

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nobuiltin allocsize(0) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nobuiltin 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 #7 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { 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 #9 = { nounwind }
attributes #10 = { builtin allocsize(0) }
attributes #11 = { builtin 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 = !{!12, !12, i64 0}
!12 = !{!"bool", !7, i64 0}
!13 = !{!14, !10, i64 0}
!14 = !{!"_ZTSSt4pairIKjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS3_EEE", !10, i64 0, !15, i64 8}
!15 = !{!"_ZTSSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS1_EE", !16, i64 0}
!16 = !{!"_ZTSSt15__uniq_ptr_dataIN11spirv_cross3CFGESt14default_deleteIS1_ELb1ELb1EE", !17, i64 0}
!17 = !{!"_ZTSSt15__uniq_ptr_implIN11spirv_cross3CFGESt14default_deleteIS1_EE", !18, i64 0}
!18 = !{!"_ZTSSt5tupleIJPN11spirv_cross3CFGESt14default_deleteIS1_EEE", !19, i64 0}
!19 = !{!"_ZTSSt11_Tuple_implILm0EJPN11spirv_cross3CFGESt14default_deleteIS1_EEE", !20, i64 0}
!20 = !{!"_ZTSSt10_Head_baseILm0EPN11spirv_cross3CFGELb0EE", !6, i64 0}
!21 = !{i8 0, i8 2}
!22 = !{}
!23 = !{i64 0, i64 4, !9}
!24 = !{!25, !12, i64 164}
!25 = !{!"_ZTSN11spirv_cross12SPIRVariableE", !26, i64 0, !28, i64 12, !29, i64 16, !10, i64 20, !27, i64 24, !30, i64 28, !31, i64 32, !12, i64 88, !12, i64 89, !27, i64 92, !35, i64 96, !12, i64 152, !12, i64 153, !12, i64 154, !12, i64 155, !10, i64 156, !38, i64 160, !12, i64 164, !12, i64 165, !12, i64 166, !6, i64 168}
!26 = !{!"_ZTSN11spirv_cross8IVariantE", !27, i64 8}
!27 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !10, i64 0}
!28 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !10, i64 0}
!29 = !{!"_ZTSN3spv12StorageClassE", !7, i64 0}
!30 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE2EEE", !10, i64 0}
!31 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !32, i64 0, !33, i64 16, !34, i64 24}
!32 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !6, i64 0, !33, i64 8}
!33 = !{!"long", !7, i64 0}
!34 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !7, i64 0}
!35 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EEE", !36, i64 0, !33, i64 16, !37, i64 24}
!36 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEEE", !6, i64 0, !33, i64 8}
!37 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE0EEELm8EEE", !7, i64 0}
!38 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE6EEE", !10, i64 0}
!39 = !{!25, !29, i64 16}
!40 = !{!25, !12, i64 166}
!41 = !{!42, !12, i64 266}
!42 = !{!"_ZTSN11spirv_cross12SPIRConstantE", !26, i64 0, !28, i64 12, !43, i64 16, !12, i64 264, !12, i64 265, !12, i64 266, !44, i64 272, !47, i64 328}
!43 = !{!"_ZTSN11spirv_cross12SPIRConstant14ConstantMatrixE", !7, i64 0, !7, i64 224, !10, i64 240}
!44 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE3EEELm8EEE", !45, i64 0, !33, i64 16, !46, i64 24}
!45 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE3EEEEE", !6, i64 0, !33, i64 8}
!46 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE3EEELm8EEE", !7, i64 0}
!47 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !48, i64 0, !33, i64 8, !7, i64 16}
!48 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!49 = !{!25, !12, i64 89}
!50 = !{!25, !12, i64 155}


; 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.spirv_cross::Compiler::CFGBuilder" = type { %"struct.spirv_cross::Compiler::OpcodeHandler", ptr, %"class.std::unordered_map.117" }
%"struct.spirv_cross::Compiler::OpcodeHandler" = type { ptr }
%"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 }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%"struct.std::__detail::_Node_iterator.347" = type { %"struct.std::__detail::_Node_iterator_base.348" }
%"struct.std::__detail::_Node_iterator_base.348" = 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 }
%"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 }
%"class.std::unordered_set" = type { %"class.std::_Hashtable.74" }
%"class.std::_Hashtable.74" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.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 }
%"class.spirv_cross::TypedID.165" = type { i32 }
%"class.spirv_cross::TypedID.162" = type { i32 }
%"class.spirv_cross::TypedID.164" = type { i32 }

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(336)) local_unnamed_addr #1 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 #2 align 2

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross8Compiler46build_function_control_flow_graphs_and_analyzeEv(ptr noundef nonnull align 8 dereferenceable(3176) %0) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %2 = alloca %"struct.spirv_cross::Compiler::CFGBuilder", align 8
  %3 = alloca i32, align 4
  %4 = alloca %"struct.std::__detail::_Node_iterator.347", align 8
  %5 = alloca %"struct.std::__detail::_Node_iterator.347", align 8
  %6 = alloca %"struct.spirv_cross::Compiler::AnalyzeVariableScopeAccessHandler", align 8
  %7 = alloca %"class.spirv_cross::TypedID.165", align 4
  %8 = alloca %"class.spirv_cross::TypedID.162", align 4
  %9 = alloca %"class.spirv_cross::TypedID.164", align 4
  %10 = alloca %"class.spirv_cross::TypedID.162", align 4
  %11 = alloca %"class.spirv_cross::TypedID.164", align 4
  call void @llvm.lifetime.start.p0(i64 72, ptr nonnull %2) #8
  call void @_ZN11spirv_cross8Compiler10CFGBuilderC1ERS0_(ptr noundef nonnull align 8 dereferenceable(72) %2, ptr noundef nonnull align 8 dereferenceable(3176) %0)
  %12 = getelementptr inbounds i8, ptr %2, i64 16
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #8
  %13 = getelementptr inbounds i8, ptr %0, i64 1744
  %14 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE4EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %13)
  store i32 %14, ptr %3, align 4, !tbaa !5
  %15 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt13unordered_mapIjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS2_EESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %12, ptr noundef nonnull align 4 dereferenceable(4) %3)
          to label %16 unwind label %35

16:                                               ; preds = %1
  %17 = invoke noalias noundef nonnull dereferenceable(360) ptr @_Znwm(i64 noundef 360) #9
          to label %18 unwind label %35

18:                                               ; preds = %16
  %19 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE4EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %13)
  %20 = invoke noundef nonnull align 8 dereferenceable(795) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRFunctionEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %19)
          to label %21 unwind label %37

21:                                               ; preds = %18
  invoke void @_ZN11spirv_cross3CFGC1ERNS_8CompilerERKNS_12SPIRFunctionE(ptr noundef nonnull align 8 dereferenceable(356) %17, ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(795) %20)
          to label %22 unwind label %37

22:                                               ; preds = %21
  call void @_ZNSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS1_EE5resetEPS1_(ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull %17) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #8
  %23 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE4EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %13)
  %24 = invoke noundef nonnull align 8 dereferenceable(795) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRFunctionEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %23)
          to label %25 unwind label %40

25:                                               ; preds = %22
  %26 = invoke 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) %24, ptr noundef nonnull align 8 dereferenceable(8) %2)
          to label %27 unwind label %40

27:                                               ; preds = %25
  %28 = getelementptr inbounds i8, ptr %0, i64 2888
  %29 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNSt13unordered_mapIjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS2_EESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEEaSEOSE_(ptr noundef nonnull align 8 dereferenceable(56) %28, ptr noundef nonnull align 8 dereferenceable(56) %12) #8
  %30 = call noundef i64 @_ZNKSt13unordered_mapIjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS2_EESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(56) %28) #8
  %31 = icmp ult i64 %30, 2
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #8
  %32 = call ptr @_ZNSt13unordered_mapIjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS2_EESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(56) %28) #8
  store ptr %32, ptr %4, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #8
  %33 = call ptr @_ZNSt13unordered_mapIjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS2_EESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %28) #8
  store ptr %33, ptr %5, align 8
  %34 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseISt4pairIKjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS5_EEELb0EEESC_(ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull align 8 dereferenceable(8) %5) #8
  br i1 %34, label %.lr.ph120, label %._crit_edge121

._crit_edge121:                                   ; preds = %._crit_edge118, %27
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #8
  br i1 %31, label %.loopexit, label %120

35:                                               ; preds = %16, %1
  %36 = landingpad { ptr, i32 }
          cleanup
  br label %39

37:                                               ; preds = %21, %18
  %38 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %17, i64 noundef 360) #10
  br label %39

39:                                               ; preds = %37, %35
  %.pn = phi { ptr, i32 } [ %38, %37 ], [ %36, %35 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #8
  br label %163

40:                                               ; preds = %25, %22
  %41 = landingpad { ptr, i32 }
          cleanup
  br label %163

.lr.ph120:                                        ; preds = %27, %._crit_edge118
  %42 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNKSt8__detail14_Node_iteratorISt4pairIKjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS5_EEELb0ELb0EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %4) #8
  %43 = load i32, ptr %42, align 8, !tbaa !9
  %44 = invoke noundef nonnull align 8 dereferenceable(795) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRFunctionEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %43)
          to label %45 unwind label %54

45:                                               ; preds = %.lr.ph120
  call void @llvm.lifetime.start.p0(i64 424, ptr nonnull %6) #8
  invoke void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandlerC1ERS0_RNS_12SPIRFunctionE(ptr noundef nonnull align 8 dereferenceable(424) %6, ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(795) %44)
          to label %46 unwind label %56

46:                                               ; preds = %45
  invoke void @_ZN11spirv_cross8Compiler22analyze_variable_scopeERNS_12SPIRFunctionERNS0_33AnalyzeVariableScopeAccessHandlerE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(795) %44, ptr noundef nonnull align 8 dereferenceable(424) %6)
          to label %47 unwind label %58

47:                                               ; preds = %46
  invoke void @_ZN11spirv_cross8Compiler24find_function_local_lutsERNS_12SPIRFunctionERKNS0_33AnalyzeVariableScopeAccessHandlerEb(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(795) %44, ptr noundef nonnull align 8 dereferenceable(424) %6, i1 noundef zeroext %31)
          to label %48 unwind label %58

48:                                               ; preds = %47
  %49 = getelementptr inbounds i8, ptr %44, i64 456
  %50 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE6EEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %49) #8
  %51 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE6EEEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %49) #8
  %.not84114 = icmp eq ptr %50, %51
  br i1 %.not84114, label %._crit_edge118, label %.lr.ph117

._crit_edge118:                                   ; preds = %.critedge, %48
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandlerD2Ev(ptr noundef nonnull align 8 dereferenceable(424) %6) #8
  call void @llvm.lifetime.end.p0(i64 424, ptr nonnull %6) #8
  %52 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8__detail14_Node_iteratorISt4pairIKjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS5_EEELb0ELb0EEppEv(ptr noundef nonnull align 8 dereferenceable(8) %4) #8
  %53 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseISt4pairIKjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS5_EEELb0EEESC_(ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull align 8 dereferenceable(8) %5) #8
  br i1 %53, label %.lr.ph120, label %._crit_edge121

54:                                               ; preds = %.lr.ph120
  %55 = landingpad { ptr, i32 }
          cleanup
  br label %119

56:                                               ; preds = %45
  %57 = landingpad { ptr, i32 }
          cleanup
  br label %118

58:                                               ; preds = %47, %46
  %59 = landingpad { ptr, i32 }
          cleanup
  br label %117

.lr.ph117:                                        ; preds = %48, %.critedge
  %.073115 = phi ptr [ %115, %.critedge ], [ %50, %48 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #8
  %60 = load i32, ptr %.073115, align 4, !tbaa !5
  store i32 %60, ptr %7, align 4, !tbaa !5
  %61 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE6EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %7)
  %62 = invoke noundef nonnull align 8 dereferenceable(976) ptr @_ZN11spirv_cross8Compiler3getINS_9SPIRBlockEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %61)
          to label %63 unwind label %67

63:                                               ; preds = %.lr.ph117
  %64 = getelementptr inbounds i8, ptr %62, i64 864
  %65 = call noundef i64 @_ZNK11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(16) %64) #8
  %66 = icmp ult i64 %65, 2
  br i1 %66, label %.critedge, label %69

67:                                               ; preds = %.lr.ph117
  %68 = landingpad { ptr, i32 }
          cleanup
  br label %116

69:                                               ; preds = %63
  %70 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE5frontEv(ptr noundef nonnull align 8 dereferenceable(16) %64) #8
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2ILS1_2EEERKNS0_IXT_EEE(ptr noundef nonnull align 4 dereferenceable(4) %8, ptr noundef nonnull align 4 dereferenceable(4) %70)
          to label %71 unwind label %85

71:                                               ; preds = %69
  %72 = load i32, ptr %8, align 4
  %73 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZNK11spirv_cross8Compiler21get_decoration_bitsetENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %72)
          to label %74 unwind label %85

74:                                               ; preds = %71
  %75 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE5frontEv(ptr noundef nonnull align 8 dereferenceable(16) %64) #8
  %76 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %75)
  %77 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %76)
          to label %78 unwind label %87

78:                                               ; preds = %74
  %79 = getelementptr inbounds i8, ptr %77, i64 12
  %80 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %79)
  %81 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %64) #8
  %82 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %64) #8
  %.not85.not108 = icmp eq ptr %81, %82
  br i1 %.not85.not108, label %.critedge, label %.lr.ph

83:                                               ; preds = %102
  %84 = getelementptr inbounds i8, ptr %.078109, i64 4
  %.not85.not = icmp eq ptr %84, %82
  br i1 %.not85.not, label %.critedge, label %.lr.ph

85:                                               ; preds = %71, %69
  %86 = landingpad { ptr, i32 }
          cleanup
  br label %116

87:                                               ; preds = %74
  %88 = landingpad { ptr, i32 }
          cleanup
  br label %116

.lr.ph:                                           ; preds = %78, %83
  %.078109 = phi ptr [ %84, %83 ], [ %81, %78 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #8
  %89 = load i32, ptr %.078109, align 4, !tbaa !5
  store i32 %89, ptr %9, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2ILS1_2EEERKNS0_IXT_EEE(ptr noundef nonnull align 4 dereferenceable(4) %10, ptr noundef nonnull align 4 dereferenceable(4) %9)
          to label %90 unwind label %100

90:                                               ; preds = %.lr.ph
  %91 = load i32, ptr %10, align 4
  %92 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZNK11spirv_cross8Compiler21get_decoration_bitsetENS_7TypedIDILNS_5TypesE0EEE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %91)
          to label %93 unwind label %100

93:                                               ; preds = %90
  %94 = invoke noundef zeroext i1 @_ZNK11spirv_cross6BitsetneERKS0_(ptr noundef nonnull align 8 dereferenceable(64) %73, ptr noundef nonnull align 8 dereferenceable(64) %92)
          to label %95 unwind label %100

95:                                               ; preds = %93
  br i1 %94, label %.thread103, label %96

.thread103:                                       ; preds = %95
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #8
  br label %.loopexit129

96:                                               ; preds = %95
  %97 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE5frontEv(ptr noundef nonnull align 8 dereferenceable(16) %64) #8
  %98 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %97)
  %99 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %98)
          to label %102 unwind label %100

100:                                              ; preds = %96, %93, %90, %.lr.ph
  %101 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #8
  br label %116

102:                                              ; preds = %96
  %103 = getelementptr inbounds i8, ptr %99, i64 12
  %104 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE1EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %103)
  %.not86 = icmp eq i32 %80, %104
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #8
  br i1 %.not86, label %83, label %.loopexit129

.loopexit129:                                     ; preds = %102, %.thread103
  %105 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %64) #8
  %106 = call noundef ptr @_ZN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE2EEEE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %64) #8
  %.not87111 = icmp eq ptr %105, %106
  br i1 %.not87111, label %._crit_edge, label %.lr.ph113

._crit_edge:                                      ; preds = %110, %.loopexit129
  call void @_ZN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE2EEELm8EE5clearEv(ptr noundef nonnull align 8 dereferenceable(56) %64) #8
  br label %.critedge

.lr.ph113:                                        ; preds = %.loopexit129, %110
  %.079112 = phi ptr [ %112, %110 ], [ %105, %.loopexit129 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #8
  %107 = load i32, ptr %.079112, align 4, !tbaa !5
  store i32 %107, ptr %11, align 4, !tbaa !5
  %108 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE2EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %11)
  %109 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %108)
          to label %110 unwind label %113

110:                                              ; preds = %.lr.ph113
  %111 = getelementptr inbounds i8, ptr %109, i64 164
  store i8 0, ptr %111, align 4, !tbaa !18
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #8
  %112 = getelementptr inbounds i8, ptr %.079112, i64 4
  %.not87 = icmp eq ptr %112, %106
  br i1 %.not87, label %._crit_edge, label %.lr.ph113

113:                                              ; preds = %.lr.ph113
  %114 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #8
  br label %116

.critedge:                                        ; preds = %83, %78, %._crit_edge, %63
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #8
  %115 = getelementptr inbounds i8, ptr %.073115, i64 4
  %.not84 = icmp eq ptr %115, %51
  br i1 %.not84, label %._crit_edge118, label %.lr.ph117

116:                                              ; preds = %85, %100, %113, %87, %67
  %.pn88.pn.pn.pn = phi { ptr, i32 } [ %68, %67 ], [ %86, %85 ], [ %88, %87 ], [ %114, %113 ], [ %101, %100 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #8
  br label %117

117:                                              ; preds = %116, %58
  %.pn88.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn88.pn.pn.pn, %116 ], [ %59, %58 ]
  call void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandlerD2Ev(ptr noundef nonnull align 8 dereferenceable(424) %6) #8
  br label %118

118:                                              ; preds = %117, %56
  %.pn88.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn88.pn.pn.pn.pn, %117 ], [ %57, %56 ]
  call void @llvm.lifetime.end.p0(i64 424, ptr nonnull %6) #8
  br label %119

119:                                              ; preds = %118, %54
  %.pn88.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn88.pn.pn.pn.pn.pn, %118 ], [ %55, %54 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #8
  br label %163

120:                                              ; preds = %._crit_edge121
  %121 = getelementptr inbounds i8, ptr %0, i64 1928
  %122 = call noundef ptr @_ZN11spirv_cross10VectorViewIjE5beginEv(ptr noundef nonnull align 8 dereferenceable(16) %121) #8
  %123 = call noundef ptr @_ZN11spirv_cross10VectorViewIjE3endEv(ptr noundef nonnull align 8 dereferenceable(16) %121) #8
  %.not122 = icmp eq ptr %122, %123
  br i1 %.not122, label %.loopexit, label %.lr.ph125

.lr.ph125:                                        ; preds = %120
  %124 = getelementptr inbounds i8, ptr %0, i64 40
  br label %125

125:                                              ; preds = %.lr.ph125, %161
  %.074123 = phi ptr [ %122, %.lr.ph125 ], [ %162, %161 ]
  %126 = load i32, ptr %.074123, align 4, !tbaa !5
  %127 = invoke noundef nonnull align 8 dereferenceable(176) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRVariableEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %126)
          to label %128 unwind label %157

128:                                              ; preds = %125
  %129 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler22get_variable_data_typeERKNS_12SPIRVariableE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(176) %127)
          to label %130 unwind label %159

130:                                              ; preds = %128
  %131 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler8is_arrayERKNS_8SPIRTypeE(ptr noundef nonnull align 8 dereferenceable(3176) %0, ptr noundef nonnull align 8 dereferenceable(336) %129)
  %132 = getelementptr inbounds i8, ptr %127, i64 16
  %133 = load i32, ptr %132, align 8
  %134 = icmp eq i32 %133, 6
  %or.cond = select i1 %131, i1 %134, i1 false
  br i1 %or.cond, label %135, label %161

135:                                              ; preds = %130
  %136 = getelementptr inbounds i8, ptr %127, i64 24
  %137 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %136)
  %.not81 = icmp eq i32 %137, 0
  br i1 %.not81, label %161, label %138

138:                                              ; preds = %135
  %139 = getelementptr inbounds i8, ptr %127, i64 166
  %140 = load i8, ptr %139, align 2, !tbaa !34, !range !35, !noundef !36
  %141 = trunc nuw i8 %140 to i1
  br i1 %141, label %161, label %142

142:                                              ; preds = %138
  %143 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %136)
  %144 = zext i32 %143 to i64
  %145 = call noundef nonnull align 8 dereferenceable(21) ptr @_ZN11spirv_cross10VectorViewINS_7VariantEEixEm(ptr noundef nonnull align 8 dereferenceable(16) %124, i64 noundef %144) #8
  %146 = call noundef i32 @_ZNK11spirv_cross7Variant8get_typeEv(ptr noundef nonnull align 8 dereferenceable(21) %145)
  %147 = icmp eq i32 %146, 3
  br i1 %147, label %148, label %161

148:                                              ; preds = %142
  %149 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %136)
  %150 = invoke noundef nonnull align 8 dereferenceable(360) ptr @_ZN11spirv_cross8Compiler3getINS_12SPIRConstantEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %149)
          to label %151 unwind label %159

151:                                              ; preds = %148
  %152 = getelementptr inbounds i8, ptr %150, i64 266
  store i8 1, ptr %152, align 2, !tbaa !37
  %153 = getelementptr inbounds i8, ptr %127, i64 92
  %154 = load i32, ptr %136, align 8, !tbaa !5
  store i32 %154, ptr %153, align 4, !tbaa !5
  %155 = getelementptr inbounds i8, ptr %127, i64 89
  store i8 1, ptr %155, align 1, !tbaa !45
  %156 = getelementptr inbounds i8, ptr %127, i64 155
  store i8 1, ptr %156, align 1, !tbaa !46
  br label %161

157:                                              ; preds = %125
  %158 = landingpad { ptr, i32 }
          cleanup
  br label %163

159:                                              ; preds = %148, %128
  %160 = landingpad { ptr, i32 }
          cleanup
  br label %163

161:                                              ; preds = %151, %142, %138, %135, %130
  %162 = getelementptr inbounds i8, ptr %.074123, i64 4
  %.not = icmp eq ptr %162, %123
  br i1 %.not, label %.loopexit, label %125

.loopexit:                                        ; preds = %161, %120, %._crit_edge121
  call void @_ZN11spirv_cross8Compiler10CFGBuilderD2Ev(ptr noundef nonnull align 8 dereferenceable(72) %2) #8
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %2) #8
  ret void

163:                                              ; preds = %119, %159, %157, %40, %39
  %.pn88.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %41, %40 ], [ %.pn, %39 ], [ %.pn88.pn.pn.pn.pn.pn.pn, %119 ], [ %160, %159 ], [ %158, %157 ]
  call void @_ZN11spirv_cross8Compiler10CFGBuilderD2Ev(ptr noundef nonnull align 8 dereferenceable(72) %2) #8
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %2) #8
  resume { ptr, i32 } %.pn88.pn.pn.pn.pn.pn.pn.pn.pn
}

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

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

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znwm(i64 noundef) local_unnamed_addr #3

declare void @_ZN11spirv_cross3CFGC1ERNS_8CompilerERKNS_12SPIRFunctionE(ptr noundef nonnull align 8 dereferenceable(356), ptr noundef nonnull align 8 dereferenceable(3176), ptr noundef nonnull align 8 dereferenceable(795)) unnamed_addr #4

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPvm(ptr noundef, i64 noundef) local_unnamed_addr #5

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

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

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

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

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

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

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

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

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

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

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

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

declare void @_ZN11spirv_cross8Compiler33AnalyzeVariableScopeAccessHandlerC1ERS0_RNS_12SPIRFunctionE(ptr, ptr, ptr) local_unnamed_addr

declare void @_ZN11spirv_cross8Compiler10CFGBuilderC1ERS0_(ptr, ptr) local_unnamed_addr

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nobuiltin allocsize(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 = { "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 = { nobuiltin 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 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { nounwind }
attributes #9 = { builtin allocsize(0) }
attributes #10 = { builtin 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 = !{!"_ZTSSt4pairIKjSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS3_EEE", !6, i64 0, !11, i64 8}
!11 = !{!"_ZTSSt10unique_ptrIN11spirv_cross3CFGESt14default_deleteIS1_EE", !12, i64 0}
!12 = !{!"_ZTSSt15__uniq_ptr_dataIN11spirv_cross3CFGESt14default_deleteIS1_ELb1ELb1EE", !13, i64 0}
!13 = !{!"_ZTSSt15__uniq_ptr_implIN11spirv_cross3CFGESt14default_deleteIS1_EE", !14, i64 0}
!14 = !{!"_ZTSSt5tupleIJPN11spirv_cross3CFGESt14default_deleteIS1_EEE", !15, i64 0}
!15 = !{!"_ZTSSt11_Tuple_implILm0EJPN11spirv_cross3CFGESt14default_deleteIS1_EEE", !16, i64 0}
!16 = !{!"_ZTSSt10_Head_baseILm0EPN11spirv_cross3CFGELb0EE", !17, i64 0}
!17 = !{!"any pointer", !7, i64 0}
!18 = !{!19, !29, i64 164}
!19 = !{!"_ZTSN11spirv_cross12SPIRVariableE", !20, i64 0, !22, i64 12, !23, i64 16, !6, i64 20, !21, i64 24, !24, i64 28, !25, i64 32, !29, i64 88, !29, i64 89, !21, i64 92, !30, i64 96, !29, i64 152, !29, i64 153, !29, i64 154, !29, i64 155, !6, i64 156, !33, i64 160, !29, i64 164, !29, i64 165, !29, i64 166, !17, i64 168}
!20 = !{!"_ZTSN11spirv_cross8IVariantE", !21, i64 8}
!21 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !6, i64 0}
!22 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !6, i64 0}
!23 = !{!"_ZTSN3spv12StorageClassE", !7, i64 0}
!24 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE2EEE", !6, i64 0}
!25 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !26, i64 0, !27, i64 16, !28, i64 24}
!26 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !17, i64 0, !27, i64 8}
!27 = !{!"long", !7, i64 0}
!28 = !{!"_ZTSN11spirv_cross13AlignedBufferIjLm8EEE", !7, i64 0}
!29 = !{!"bool", !7, i64 0}
!30 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE0EEELm8EEE", !31, i64 0, !27, i64 16, !32, i64 24}
!31 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE0EEEEE", !17, i64 0, !27, i64 8}
!32 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE0EEELm8EEE", !7, i64 0}
!33 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE6EEE", !6, i64 0}
!34 = !{!19, !29, i64 166}
!35 = !{i8 0, i8 2}
!36 = !{}
!37 = !{!38, !29, i64 266}
!38 = !{!"_ZTSN11spirv_cross12SPIRConstantE", !20, i64 0, !22, i64 12, !39, i64 16, !29, i64 264, !29, i64 265, !29, i64 266, !40, i64 272, !43, i64 328}
!39 = !{!"_ZTSN11spirv_cross12SPIRConstant14ConstantMatrixE", !7, i64 0, !7, i64 224, !6, i64 240}
!40 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE3EEELm8EEE", !41, i64 0, !27, i64 16, !42, i64 24}
!41 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE3EEEEE", !17, i64 0, !27, i64 8}
!42 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE3EEELm8EEE", !7, i64 0}
!43 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !44, i64 0, !27, i64 8, !7, i64 16}
!44 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !17, i64 0}
!45 = !{!19, !29, i64 89}
!46 = !{!19, !29, i64 155}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LCSSAPass,LICMPass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,SCCPPass,SROAPass,SimplifyCFGPass