; LLVM IR from thepowersgang/mrustc :: src/hir_typeck (expr_cs)

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

%"class.HIR::TypeRef" = type { ptr }
%class.TraceLog = type { ptr, %"class.std::function" }
%"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.anon.242 = type { ptr, ptr }
%"class.__gnu_cxx::__normal_iterator.233" = type { ptr }
%"struct.HIR::SimplePath" = type { %class.ThinVector }
%class.ThinVector = type { ptr }
%struct.Span = type { ptr }
%class.anon.243 = type { i8 }
%"class.HIR::GenericPath" = type { %"struct.HIR::SimplePath", %"struct.HIR::PathParams" }
%"struct.HIR::PathParams" = type { %class.ThinVector.69, %class.ThinVector.70, %class.ThinVector.71 }
%class.ThinVector.69 = type { ptr }
%class.ThinVector.70 = type { ptr }
%class.ThinVector.71 = type { ptr }
%"class.HIR::Path" = type { %"class.HIR::Path::Data" }
%"class.HIR::Path::Data" = type { i32, %"union.HIR::Path::Data::DataUnion" }
%"union.HIR::Path::Data::DataUnion" = type { %"struct.HIR::Path::Data::Data_UfcsKnown" }
%"struct.HIR::Path::Data::Data_UfcsKnown" = type { %"class.HIR::TypeRef", %"class.HIR::GenericPath", %class.RcString, %"struct.HIR::PathParams", %"class.std::unique_ptr.91" }
%class.RcString = type { ptr }
%"class.std::unique_ptr.91" = type { %"struct.std::__uniq_ptr_data.92" }
%"struct.std::__uniq_ptr_data.92" = type { %"class.std::__uniq_ptr_impl.93" }
%"class.std::__uniq_ptr_impl.93" = type { %"class.std::tuple.94" }
%"class.std::tuple.94" = type { %"struct.std::_Tuple_impl.95" }
%"struct.std::_Tuple_impl.95" = type { %"struct.std::_Head_base.98" }
%"struct.std::_Head_base.98" = type { ptr }
%"class.HIR::TypePathBinding" = type { i32, %"union.HIR::TypePathBinding::DataUnion" }
%"union.HIR::TypePathBinding::DataUnion" = type { ptr }
%class.anon.412 = type { i8 }
%class.anon.414 = type { ptr, ptr }
%"class.std::vector.133" = type { %"struct.std::_Vector_base.134" }
%"struct.std::_Vector_base.134" = type { %"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.anon.415 = type { i8 }
%"class.__gnu_cxx::__normal_iterator.417" = type { ptr }
%class.anon.418 = type { i8 }
%"class.std::unique_ptr.74" = type { %"struct.std::__uniq_ptr_data.75" }
%"struct.std::__uniq_ptr_data.75" = type { %"class.std::__uniq_ptr_impl.76" }
%"class.std::__uniq_ptr_impl.76" = type { %"class.std::tuple.77" }
%"class.std::tuple.77" = type { %"struct.std::_Tuple_impl.78" }
%"struct.std::_Tuple_impl.78" = type { %"struct.std::_Head_base.81" }
%"struct.std::_Head_base.81" = type { ptr }
%"class.std::unique_ptr.420" = type { %"struct.std::__uniq_ptr_data.421" }
%"struct.std::__uniq_ptr_data.421" = type { %"class.std::__uniq_ptr_impl.422" }
%"class.std::__uniq_ptr_impl.422" = type { %"class.std::tuple.423" }
%"class.std::tuple.423" = type { %"struct.std::_Tuple_impl.424" }
%"struct.std::_Tuple_impl.424" = type { %"struct.std::_Head_base.427" }
%"struct.std::_Head_base.427" = type { ptr }
%struct.SplitTuplePatRevisit = type { %"class.Context::Revisitor", %struct.Span, %"class.HIR::TypeRef", %"class.std::vector.133", %"class.std::vector.133", ptr }
%"class.Context::Revisitor" = type { ptr }
%class.anon.428 = type { ptr }
%"class.std::unique_ptr.429" = type { %"struct.std::__uniq_ptr_data.430" }
%"struct.std::__uniq_ptr_data.430" = type { %"class.std::__uniq_ptr_impl.431" }
%"class.std::__uniq_ptr_impl.431" = type { %"class.std::tuple.432" }
%"class.std::tuple.432" = type { %"struct.std::_Tuple_impl.433" }
%"struct.std::_Tuple_impl.433" = type { %"struct.std::_Head_base.436" }
%"struct.std::_Head_base.436" = type { ptr }
%struct.SlicePatRevisit = type <{ %"class.Context::Revisitor", %struct.Span, %"class.HIR::TypeRef", %"class.HIR::TypeRef", i32, [4 x i8] }>
%class.anon.437 = type { ptr }
%class.anon.438 = type { i8 }
%"class.std::unique_ptr.440" = type { %"struct.std::__uniq_ptr_data.441" }
%"struct.std::__uniq_ptr_data.441" = type { %"class.std::__uniq_ptr_impl.442" }
%"class.std::__uniq_ptr_impl.442" = type { %"class.std::tuple.443" }
%"class.std::tuple.443" = type { %"struct.std::_Tuple_impl.444" }
%"struct.std::_Tuple_impl.444" = type { %"struct.std::_Head_base.447" }
%"struct.std::_Head_base.447" = type { ptr }
%struct.SplitSlicePatRevisit = type <{ %"class.Context::Revisitor", %struct.Span, %"class.HIR::TypeRef", %"class.HIR::TypeRef", %"class.HIR::TypeRef", i32, [4 x i8] }>
%class.anon.448 = type { i8 }
%class.anon.460 = type { i8 }
%struct.MonomorphStatePtr = type { %class.MonomorphiserPP, ptr, ptr, ptr, ptr }
%class.MonomorphiserPP = type { %class.Monomorphiser }
%class.Monomorphiser = type { ptr, ptr, %"class.HIR::ItemPath", %"class.std::vector.86" }
%"class.HIR::ItemPath" = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%"class.std::vector.86" = type { %"struct.std::_Vector_base.87" }
%"struct.std::_Vector_base.87" = type { %"struct.std::_Vector_base<const HIR::GenericParams *, std::allocator<const HIR::GenericParams *>>::_Vector_impl" }
%"struct.std::_Vector_base<const HIR::GenericParams *, std::allocator<const HIR::GenericParams *>>::_Vector_impl" = type { %"struct.std::_Vector_base<const HIR::GenericParams *, std::allocator<const HIR::GenericParams *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<const HIR::GenericParams *, std::allocator<const HIR::GenericParams *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.anon.462 = type { ptr, ptr, ptr }
%class.anon.463 = type { ptr, ptr }
%class.anon.464 = type { ptr, ptr }
%"class.__gnu_cxx::__normal_iterator.468" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.471" = type { ptr }
%class.anon.472 = type { ptr }
%class.anon.473 = type { ptr, ptr }
%"struct.HIR::Pattern" = type <{ %"class.std::vector.198", %"class.HIR::Pattern::Data", i32, [4 x i8] }>
%"class.std::vector.198" = type { %"struct.std::_Vector_base.199" }
%"struct.std::_Vector_base.199" = type { %"struct.std::_Vector_base<HIR::PatternBinding, std::allocator<HIR::PatternBinding>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::PatternBinding, std::allocator<HIR::PatternBinding>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::PatternBinding, std::allocator<HIR::PatternBinding>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::PatternBinding, std::allocator<HIR::PatternBinding>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.HIR::Pattern::Data" = type { i32, %"union.HIR::Pattern::Data::DataUnion" }
%"union.HIR::Pattern::Data::DataUnion" = type { %"struct.HIR::Pattern::Data::Data_PathValue", [64 x i8] }
%"struct.HIR::Pattern::Data::Data_PathValue" = type { %"class.HIR::Path", %"class.HIR::Pattern::PathBinding" }
%"class.HIR::Pattern::PathBinding" = type { i32, %"union.HIR::Pattern::PathBinding::DataUnion" }
%"union.HIR::Pattern::PathBinding::DataUnion" = type { %"struct.HIR::Pattern::PathBinding::Data_Enum" }
%"struct.HIR::Pattern::PathBinding::Data_Enum" = type { ptr, i32 }
%"struct.HIR::Pattern::Data::Data_Value" = type { %"class.HIR::Pattern::Value" }
%"class.HIR::Pattern::Value" = type { i32, %"union.HIR::Pattern::Value::DataUnion" }
%"union.HIR::Pattern::Value::DataUnion" = type { %"struct.HIR::Pattern::Value::Data_Named" }
%"struct.HIR::Pattern::Value::Data_Named" = type { %"class.HIR::Path", ptr }
%"struct.HIR::Pattern::Data::Data_Range" = type <{ %"class.std::unique_ptr.225", %"class.std::unique_ptr.225", i8, [7 x i8] }>
%"class.std::unique_ptr.225" = type { %"struct.std::__uniq_ptr_data.226" }
%"struct.std::__uniq_ptr_data.226" = type { %"class.std::__uniq_ptr_impl.227" }
%"class.std::__uniq_ptr_impl.227" = type { %"class.std::tuple.228" }
%"class.std::tuple.228" = type { %"struct.std::_Tuple_impl.229" }
%"struct.std::_Tuple_impl.229" = type { %"struct.std::_Head_base.232" }
%"struct.std::_Head_base.232" = type { ptr }
%struct.Context = type { ptr, %"class.std::vector", %class.HMTypeInferrence, %class.TraitResolution, i32, %"class.std::vector.23", %"class.std::vector.28", %"class.std::vector.33", %"class.std::vector.38", %"class.std::vector.43", %"class.std::vector.47", %"class.std::map.52", %"struct.HIR::SimplePath" }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<Context::Binding, std::allocator<Context::Binding>>::_Vector_impl" }
%"struct.std::_Vector_base<Context::Binding, std::allocator<Context::Binding>>::_Vector_impl" = type { %"struct.std::_Vector_base<Context::Binding, std::allocator<Context::Binding>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Context::Binding, std::allocator<Context::Binding>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.HMTypeInferrence = type <{ %"class.std::vector.0", %"class.std::vector.5", i8, [7 x i8] }>
%"class.std::vector.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = type { %"struct.std::_Vector_base<HMTypeInferrence::IVar, std::allocator<HMTypeInferrence::IVar>>::_Vector_impl" }
%"struct.std::_Vector_base<HMTypeInferrence::IVar, std::allocator<HMTypeInferrence::IVar>>::_Vector_impl" = type { %"struct.std::_Vector_base<HMTypeInferrence::IVar, std::allocator<HMTypeInferrence::IVar>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HMTypeInferrence::IVar, std::allocator<HMTypeInferrence::IVar>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.5" = type { %"struct.std::_Vector_base.6" }
%"struct.std::_Vector_base.6" = type { %"struct.std::_Vector_base<HMTypeInferrence::IVarValue, std::allocator<HMTypeInferrence::IVarValue>>::_Vector_impl" }
%"struct.std::_Vector_base<HMTypeInferrence::IVarValue, std::allocator<HMTypeInferrence::IVarValue>>::_Vector_impl" = type { %"struct.std::_Vector_base<HMTypeInferrence::IVarValue, std::allocator<HMTypeInferrence::IVarValue>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HMTypeInferrence::IVarValue, std::allocator<HMTypeInferrence::IVarValue>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.TraitResolution = type { %struct.TraitResolveCommon, ptr, ptr, ptr, ptr, ptr, %"class.std::vector.18" }
%struct.TraitResolveCommon = type { ptr, ptr, ptr, %"class.std::map", %class.RangeVecMap, %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath", %"struct.HIR::SimplePath" }
%"class.std::map" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<HIR::TypeRef, std::pair<const HIR::TypeRef, TraitResolveCommon::CachedEquality>, std::_Select1st<std::pair<const HIR::TypeRef, TraitResolveCommon::CachedEquality>>, std::less<HIR::TypeRef>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<HIR::TypeRef, std::pair<const HIR::TypeRef, TraitResolveCommon::CachedEquality>, std::_Select1st<std::pair<const HIR::TypeRef, TraitResolveCommon::CachedEquality>>, std::less<HIR::TypeRef>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%class.RangeVecMap = type <{ %"class.std::vector.13", [8 x i8] }>
%"class.std::vector.13" = type { %"struct.std::_Vector_base.14" }
%"struct.std::_Vector_base.14" = type { %"struct.std::_Vector_base<std::unique_ptr<std::pair<std::pair<HIR::TypeRef, HIR::GenericPath>, TraitResolveCommon::CachedBound>>, std::allocator<std::unique_ptr<std::pair<std::pair<HIR::TypeRef, HIR::GenericPath>, TraitResolveCommon::CachedBound>>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::unique_ptr<std::pair<std::pair<HIR::TypeRef, HIR::GenericPath>, TraitResolveCommon::CachedBound>>, std::allocator<std::unique_ptr<std::pair<std::pair<HIR::TypeRef, HIR::GenericPath>, TraitResolveCommon::CachedBound>>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::unique_ptr<std::pair<std::pair<HIR::TypeRef, HIR::GenericPath>, TraitResolveCommon::CachedBound>>, std::allocator<std::unique_ptr<std::pair<std::pair<HIR::TypeRef, HIR::GenericPath>, TraitResolveCommon::CachedBound>>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::unique_ptr<std::pair<std::pair<HIR::TypeRef, HIR::GenericPath>, TraitResolveCommon::CachedBound>>, std::allocator<std::unique_ptr<std::pair<std::pair<HIR::TypeRef, HIR::GenericPath>, TraitResolveCommon::CachedBound>>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.18" = type { %"struct.std::_Vector_base.19" }
%"struct.std::_Vector_base.19" = type { %"struct.std::_Vector_base<std::unique_ptr<HIR::TypeRef>, std::allocator<std::unique_ptr<HIR::TypeRef>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::unique_ptr<HIR::TypeRef>, std::allocator<std::unique_ptr<HIR::TypeRef>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::unique_ptr<HIR::TypeRef>, std::allocator<std::unique_ptr<HIR::TypeRef>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::unique_ptr<HIR::TypeRef>, std::allocator<std::unique_ptr<HIR::TypeRef>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.23" = type { %"struct.std::_Vector_base.24" }
%"struct.std::_Vector_base.24" = type { %"struct.std::_Vector_base<std::unique_ptr<Context::Coercion>, std::allocator<std::unique_ptr<Context::Coercion>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::unique_ptr<Context::Coercion>, std::allocator<std::unique_ptr<Context::Coercion>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::unique_ptr<Context::Coercion>, std::allocator<std::unique_ptr<Context::Coercion>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::unique_ptr<Context::Coercion>, std::allocator<std::unique_ptr<Context::Coercion>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.28" = type { %"struct.std::_Vector_base.29" }
%"struct.std::_Vector_base.29" = type { %"struct.std::_Vector_base<Context::Associated, std::allocator<Context::Associated>>::_Vector_impl" }
%"struct.std::_Vector_base<Context::Associated, std::allocator<Context::Associated>>::_Vector_impl" = type { %"struct.std::_Vector_base<Context::Associated, std::allocator<Context::Associated>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Context::Associated, std::allocator<Context::Associated>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.33" = type { %"struct.std::_Vector_base.34" }
%"struct.std::_Vector_base.34" = type { %"struct.std::_Vector_base<HIR::ExprNode *, std::allocator<HIR::ExprNode *>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::ExprNode *, std::allocator<HIR::ExprNode *>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::ExprNode *, std::allocator<HIR::ExprNode *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::ExprNode *, std::allocator<HIR::ExprNode *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.38" = type { %"struct.std::_Vector_base.39" }
%"struct.std::_Vector_base.39" = type { %"struct.std::_Vector_base<std::unique_ptr<Context::Revisitor>, std::allocator<std::unique_ptr<Context::Revisitor>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::unique_ptr<Context::Revisitor>, std::allocator<std::unique_ptr<Context::Revisitor>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::unique_ptr<Context::Revisitor>, std::allocator<std::unique_ptr<Context::Revisitor>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::unique_ptr<Context::Revisitor>, std::allocator<std::unique_ptr<Context::Revisitor>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.43" = type { %"struct.std::_Bvector_base" }
%"struct.std::_Bvector_base" = type { %"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl" }
%"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl" = type { %"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl_data" }
%"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl_data" = type { %"struct.std::_Bit_iterator", %"struct.std::_Bit_iterator", ptr }
%"struct.std::_Bit_iterator" = type { %"struct.std::_Bit_iterator_base.base", [4 x i8] }
%"struct.std::_Bit_iterator_base.base" = type <{ ptr, i32 }>
%"class.std::vector.47" = type { %"struct.std::_Vector_base.48" }
%"struct.std::_Vector_base.48" = type { %"struct.std::_Vector_base<Context::IVarPossible, std::allocator<Context::IVarPossible>>::_Vector_impl" }
%"struct.std::_Vector_base<Context::IVarPossible, std::allocator<Context::IVarPossible>>::_Vector_impl" = type { %"struct.std::_Vector_base<Context::IVarPossible, std::allocator<Context::IVarPossible>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Context::IVarPossible, std::allocator<Context::IVarPossible>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::map.52" = type { %"class.std::_Rb_tree.53" }
%"class.std::_Rb_tree.53" = type { %"struct.std::_Rb_tree<HIR::TypeData_ErasedType_AliasInner *, std::pair<HIR::TypeData_ErasedType_AliasInner *const, Context::TaitEntry>, std::_Select1st<std::pair<HIR::TypeData_ErasedType_AliasInner *const, Context::TaitEntry>>, std::less<HIR::TypeData_ErasedType_AliasInner *>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<HIR::TypeData_ErasedType_AliasInner *, std::pair<HIR::TypeData_ErasedType_AliasInner *const, Context::TaitEntry>, std::_Select1st<std::pair<HIR::TypeData_ErasedType_AliasInner *const, Context::TaitEntry>>, std::less<HIR::TypeData_ErasedType_AliasInner *>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.HIR::TypeData_Path" = type { %"class.HIR::Path", %"class.HIR::TypePathBinding", %"class.std::unique_ptr.91" }
%"struct.HIR::Pattern::Data::Data_Box" = type { %"class.std::unique_ptr.203" }
%"class.std::unique_ptr.203" = type { %"struct.std::__uniq_ptr_data.204" }
%"struct.std::__uniq_ptr_data.204" = type { %"class.std::__uniq_ptr_impl.205" }
%"class.std::__uniq_ptr_impl.205" = type { %"class.std::tuple.206" }
%"class.std::tuple.206" = type { %"struct.std::_Tuple_impl.207" }
%"struct.std::_Tuple_impl.207" = type { %"struct.std::_Head_base.210" }
%"struct.std::_Head_base.210" = type { ptr }
%"struct.HIR::TypeData::Data_Borrow" = type { %"struct.HIR::LifetimeRef", i32, %"class.HIR::TypeRef" }
%"struct.HIR::LifetimeRef" = type { i32 }
%"struct.HIR::Pattern::Data::Data_Ref" = type { i32, %"class.std::unique_ptr.203" }
%"struct.HIR::Pattern::Data::Data_Tuple" = type { %"class.std::vector.211" }
%"class.std::vector.211" = type { %"struct.std::_Vector_base.212" }
%"struct.std::_Vector_base.212" = type { %"struct.std::_Vector_base<HIR::Pattern, std::allocator<HIR::Pattern>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::Pattern, std::allocator<HIR::Pattern>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::Pattern, std::allocator<HIR::Pattern>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::Pattern, std::allocator<HIR::Pattern>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.HIR::Pattern::Data::Data_SplitTuple" = type <{ %"class.std::vector.211", %"class.std::vector.211", i32, [4 x i8] }>
%"struct.HIR::Pattern::Data::Data_Slice" = type { %"class.std::vector.211" }
%"struct.HIR::TypeData::Data_Slice" = type { %"class.HIR::TypeRef" }
%"struct.HIR::TypeData::Data_Array" = type { %"class.HIR::TypeRef", %"class.HIR::ArraySize" }
%"class.HIR::ArraySize" = type { i32, %"union.HIR::ArraySize::DataUnion" }
%"union.HIR::ArraySize::DataUnion" = type { %"class.HIR::ConstGeneric" }
%"class.HIR::ConstGeneric" = type { i32, %"union.HIR::ConstGeneric::DataUnion" }
%"union.HIR::ConstGeneric::DataUnion" = type { %"class.std::unique_ptr.125", [8 x i8] }
%"class.std::unique_ptr.125" = type { %"struct.std::__uniq_ptr_data.126" }
%"struct.std::__uniq_ptr_data.126" = type { %"class.std::__uniq_ptr_impl.127" }
%"class.std::__uniq_ptr_impl.127" = type { %"class.std::tuple.128" }
%"class.std::tuple.128" = type { %"struct.std::_Tuple_impl.129" }
%"struct.std::_Tuple_impl.129" = type { %"struct.std::_Head_base.132" }
%"struct.std::_Head_base.132" = type { ptr }
%"struct.HIR::Pattern::Data::Data_SplitSlice" = type { %"class.std::vector.211", %"struct.HIR::PatternBinding", %"class.std::vector.211" }
%"struct.HIR::PatternBinding" = type { i8, i32, %class.RcString, i32, i32 }
%"class.HIR::Struct" = type <{ %"class.HIR::GenericParams", i32, [4 x i8], %"class.HIR::Struct::Data", i32, i32, %"struct.HIR::TraitMarkings", %"struct.HIR::StructMarkings", i32, [4 x i8] }>
%"class.HIR::GenericParams" = type { %"class.std::vector.138", %"class.std::vector.143", %"class.std::vector.148", %"class.std::vector.153" }
%"class.std::vector.138" = type { %"struct.std::_Vector_base.139" }
%"struct.std::_Vector_base.139" = type { %"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.143" = type { %"struct.std::_Vector_base.144" }
%"struct.std::_Vector_base.144" = type { %"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.148" = type { %"struct.std::_Vector_base.149" }
%"struct.std::_Vector_base.149" = type { %"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.153" = type { %"struct.std::_Vector_base.154" }
%"struct.std::_Vector_base.154" = type { %"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.HIR::Struct::Data" = type { i32, %"union.HIR::Struct::Data::DataUnion" }
%"union.HIR::Struct::Data::DataUnion" = type { %"class.std::vector.397" }
%"class.std::vector.397" = type { %"struct.std::_Vector_base.398" }
%"struct.std::_Vector_base.398" = type { %"struct.std::_Vector_base<HIR::VisEnt<HIR::TypeRef>, std::allocator<HIR::VisEnt<HIR::TypeRef>>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::VisEnt<HIR::TypeRef>, std::allocator<HIR::VisEnt<HIR::TypeRef>>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::VisEnt<HIR::TypeRef>, std::allocator<HIR::VisEnt<HIR::TypeRef>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::VisEnt<HIR::TypeRef>, std::allocator<HIR::VisEnt<HIR::TypeRef>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.HIR::TraitMarkings" = type { i8, i8, i8, %"class.std::map.407" }
%"class.std::map.407" = type { %"class.std::_Rb_tree.408" }
%"class.std::_Rb_tree.408" = type { %"struct.std::_Rb_tree<HIR::SimplePath, std::pair<const HIR::SimplePath, HIR::TraitMarkings::AutoMarking>, std::_Select1st<std::pair<const HIR::SimplePath, HIR::TraitMarkings::AutoMarking>>, std::less<HIR::SimplePath>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<HIR::SimplePath, std::pair<const HIR::SimplePath, HIR::TraitMarkings::AutoMarking>, std::_Select1st<std::pair<const HIR::SimplePath, HIR::TraitMarkings::AutoMarking>>, std::less<HIR::SimplePath>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.HIR::StructMarkings" = type { i8, i32, i32, i32, i32, i32, i32, i8, i8, %class.U128 }
%class.U128 = type { i64, i64 }
%"class.HIR::Enum" = type { %"class.HIR::GenericParams", i8, i32, %"class.HIR::Enum::Class", %"struct.HIR::TraitMarkings" }
%"class.HIR::Enum::Class" = type { i32, %"union.HIR::Enum::Class::DataUnion" }
%"union.HIR::Enum::Class::DataUnion" = type { %"class.std::vector.450", [8 x i8] }
%"class.std::vector.450" = type { %"struct.std::_Vector_base.451" }
%"struct.std::_Vector_base.451" = type { %"struct.std::_Vector_base<HIR::Enum::DataVariant, std::allocator<HIR::Enum::DataVariant>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::Enum::DataVariant, std::allocator<HIR::Enum::DataVariant>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::Enum::DataVariant, std::allocator<HIR::Enum::DataVariant>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::Enum::DataVariant, std::allocator<HIR::Enum::DataVariant>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.HIR::Enum::DataVariant" = type { %class.RcString, i8, %"class.HIR::TypeRef" }
%"struct.HIR::Pattern::Data::Data_PathTuple" = type <{ %"class.HIR::Path", %"class.HIR::Pattern::PathBinding", %"class.std::vector.211", i8, [7 x i8], %"class.std::vector.211", i32, [4 x i8] }>
%"struct.HIR::VisEnt" = type { %"class.HIR::Publicity", %"class.HIR::TypeRef" }
%"class.HIR::Publicity" = type { %"class.std::shared_ptr.465" }
%"class.std::shared_ptr.465" = type { %"class.std::__shared_ptr.466" }
%"class.std::__shared_ptr.466" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }
%"struct.HIR::Pattern::Data::Data_PathNamed" = type <{ %"class.HIR::Path", %"class.HIR::Pattern::PathBinding", %"class.std::vector.216", i8, [7 x i8] }>
%"class.std::vector.216" = type { %"struct.std::_Vector_base.217" }
%"struct.std::_Vector_base.217" = type { %"struct.std::_Vector_base<std::pair<RcString, HIR::Pattern>, std::allocator<std::pair<RcString, HIR::Pattern>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<RcString, HIR::Pattern>, std::allocator<std::pair<RcString, HIR::Pattern>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<RcString, HIR::Pattern>, std::allocator<std::pair<RcString, HIR::Pattern>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<RcString, HIR::Pattern>, std::allocator<std::pair<RcString, HIR::Pattern>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.std::pair.474" = type { %class.RcString, %"struct.HIR::VisEnt" }
%"struct.std::pair.469" = type { %class.RcString, %"struct.HIR::Pattern" }

@.str.16 = external hidden unnamed_addr constant [17 x i8], align 1
@_ZTISt13runtime_error = external constant ptr
@.str.19 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [81 x i8], align 1
@__func__._ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE = external hidden unnamed_addr constant [28 x i8], align 1
@__PRETTY_FUNCTION__._ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE = external hidden unnamed_addr constant [98 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [23 x i8], align 1

declare noundef zeroext i1 @_Z13debug_enabledv() #0

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

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

declare i32 @__gxx_personality_v0(...)

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

declare void @_ZN8TraceLogC1EPKcSt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef, ptr noundef) unnamed_addr #0

declare void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #0

declare void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #0

; Function Attrs: nounwind
declare void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #3

declare ptr @__cxa_allocate_exception(i64)

declare void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) unnamed_addr #0

declare void @__cxa_free_exception(ptr)

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

declare void @__cxa_throw(ptr, ptr, ptr)

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

declare void @_ZNK13Monomorphiser14monomorph_typeERK4SpanRKN3HIR7TypeRefEb(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8, ptr noundef nonnull align 8 dereferenceable(96), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), i1 noundef zeroext) unnamed_addr #0

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

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

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

; Function Attrs: nounwind
declare void @_ZN8TraceLogD1Ev(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #3

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

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

declare void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8, ptr noundef nonnull align 8 dereferenceable(8)) #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184)) #6 align 2

declare void @_ZNK4Span5errorE9ErrorTypeSt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8), i32 noundef, ptr noundef) #0

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR8TypeData8as_ArrayEv(ptr noundef nonnull align 8 dereferenceable(184)) #6 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR8TypeData8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(184)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7Context17add_binding_innerERK4SpanRKN3HIR14PatternBindingENS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef) #2 align 2

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3HIR7TypeRef10new_borrowENS_10BorrowTypeES0_(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeRef") align 8, i32 noundef, ptr noundef) #4 align 2

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(212) %2, ptr noundef nonnull align 8 dereferenceable(8) %3) #2 align 2 personality ptr @__gxx_personality_v0 {
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca %class.TraceLog, align 8
  %10 = alloca %"class.std::function", align 8
  %11 = alloca %class.anon.242, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca ptr, align 8
  %15 = alloca %"class.__gnu_cxx::__normal_iterator.233", align 8
  %16 = alloca %"class.__gnu_cxx::__normal_iterator.233", align 8
  %17 = alloca ptr, align 8
  %18 = alloca %"class.HIR::TypeRef", align 8
  %19 = alloca i8, align 1
  %20 = alloca i32, align 4
  %21 = alloca ptr, align 8
  %22 = alloca i8, align 1
  %23 = alloca ptr, align 8
  %24 = alloca i8, align 1
  %25 = alloca ptr, align 8
  %26 = alloca i8, align 1
  %27 = alloca ptr, align 8
  %28 = alloca i8, align 1
  %29 = alloca ptr, align 8
  %30 = alloca %"struct.HIR::SimplePath", align 8
  %31 = alloca %struct.Span, align 8
  %32 = alloca %"class.std::function", align 8
  %33 = alloca %class.anon.243, align 1
  %34 = alloca ptr, align 8
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca %"class.HIR::TypeRef", align 8
  %38 = alloca %"class.HIR::GenericPath", align 8
  %39 = alloca %"struct.HIR::SimplePath", align 8
  %40 = alloca %"struct.HIR::PathParams", align 8
  %41 = alloca %"class.HIR::TypeRef", align 8
  %42 = alloca %"class.HIR::TypeRef", align 8
  %43 = alloca %"class.HIR::Path", align 8
  %44 = alloca %"class.HIR::GenericPath", align 8
  %45 = alloca %"class.HIR::TypePathBinding", align 8
  %46 = alloca i8, align 1
  %47 = alloca ptr, align 8
  %48 = alloca ptr, align 8
  %49 = alloca ptr, align 8
  %50 = alloca %struct.Span, align 8
  %51 = alloca %"class.std::function", align 8
  %52 = alloca %class.anon.412, align 1
  %53 = alloca %"class.HIR::TypeRef", align 8
  %54 = alloca %"class.HIR::TypeRef", align 8
  %55 = alloca %"class.HIR::TypeRef", align 8
  %56 = alloca i8, align 1
  %57 = alloca ptr, align 8
  %58 = alloca ptr, align 8
  %59 = alloca ptr, align 8
  %60 = alloca ptr, align 8
  %61 = alloca %struct.Span, align 8
  %62 = alloca %"class.std::function", align 8
  %63 = alloca %class.anon.414, align 8
  %64 = alloca i32, align 4
  %65 = alloca %"class.std::vector.133", align 8
  %66 = alloca i32, align 4
  %67 = alloca %"class.HIR::TypeRef", align 8
  %68 = alloca %"class.HIR::TypeRef", align 8
  %69 = alloca %"class.std::vector.133", align 8
  %70 = alloca i8, align 1
  %71 = alloca ptr, align 8
  %72 = alloca ptr, align 8
  %73 = alloca ptr, align 8
  %74 = alloca ptr, align 8
  %75 = alloca %struct.Span, align 8
  %76 = alloca %"class.std::function", align 8
  %77 = alloca %class.anon.415, align 1
  %78 = alloca i32, align 4
  %79 = alloca ptr, align 8
  %80 = alloca %"class.__gnu_cxx::__normal_iterator.417", align 8
  %81 = alloca %"class.__gnu_cxx::__normal_iterator.417", align 8
  %82 = alloca ptr, align 8
  %83 = alloca ptr, align 8
  %84 = alloca %"class.__gnu_cxx::__normal_iterator.417", align 8
  %85 = alloca %"class.__gnu_cxx::__normal_iterator.417", align 8
  %86 = alloca ptr, align 8
  %87 = alloca %struct.Span, align 8
  %88 = alloca %"class.std::function", align 8
  %89 = alloca %class.anon.418, align 1
  %90 = alloca %"class.std::vector.133", align 8
  %91 = alloca ptr, align 8
  %92 = alloca %"class.__gnu_cxx::__normal_iterator.417", align 8
  %93 = alloca %"class.__gnu_cxx::__normal_iterator.417", align 8
  %94 = alloca ptr, align 8
  %95 = alloca %"class.HIR::TypeRef", align 8
  %96 = alloca %"class.std::vector.133", align 8
  %97 = alloca ptr, align 8
  %98 = alloca %"class.__gnu_cxx::__normal_iterator.417", align 8
  %99 = alloca %"class.__gnu_cxx::__normal_iterator.417", align 8
  %100 = alloca ptr, align 8
  %101 = alloca %"class.HIR::TypeRef", align 8
  %102 = alloca %"class.std::unique_ptr.74", align 8
  %103 = alloca %"class.std::unique_ptr.420", align 8
  %104 = alloca %struct.SplitTuplePatRevisit, align 8
  %105 = alloca %struct.Span, align 8
  %106 = alloca %"class.HIR::TypeRef", align 8
  %107 = alloca %"class.std::vector.133", align 8
  %108 = alloca %"class.std::vector.133", align 8
  %109 = alloca i8, align 1
  %110 = alloca ptr, align 8
  %111 = alloca ptr, align 8
  %112 = alloca i8, align 1
  %113 = alloca ptr, align 8
  %114 = alloca %struct.Span, align 8
  %115 = alloca %"class.std::function", align 8
  %116 = alloca %class.anon.428, align 8
  %117 = alloca i8, align 1
  %118 = alloca ptr, align 8
  %119 = alloca ptr, align 8
  %120 = alloca %"class.__gnu_cxx::__normal_iterator.417", align 8
  %121 = alloca %"class.__gnu_cxx::__normal_iterator.417", align 8
  %122 = alloca ptr, align 8
  %123 = alloca i8, align 1
  %124 = alloca ptr, align 8
  %125 = alloca ptr, align 8
  %126 = alloca %"class.__gnu_cxx::__normal_iterator.417", align 8
  %127 = alloca %"class.__gnu_cxx::__normal_iterator.417", align 8
  %128 = alloca ptr, align 8
  %129 = alloca i8, align 1
  %130 = alloca ptr, align 8
  %131 = alloca %"class.HIR::TypeRef", align 8
  %132 = alloca ptr, align 8
  %133 = alloca %"class.__gnu_cxx::__normal_iterator.417", align 8
  %134 = alloca %"class.__gnu_cxx::__normal_iterator.417", align 8
  %135 = alloca ptr, align 8
  %136 = alloca %"class.std::unique_ptr.74", align 8
  %137 = alloca %"class.std::unique_ptr.429", align 8
  %138 = alloca %struct.SlicePatRevisit, align 8
  %139 = alloca %struct.Span, align 8
  %140 = alloca %"class.HIR::TypeRef", align 8
  %141 = alloca %"class.HIR::TypeRef", align 8
  %142 = alloca i8, align 1
  %143 = alloca ptr, align 8
  %144 = alloca %"class.HIR::TypeRef", align 8
  %145 = alloca i32, align 4
  %146 = alloca ptr, align 8
  %147 = alloca i8, align 1
  %148 = alloca ptr, align 8
  %149 = alloca %struct.Span, align 8
  %150 = alloca %"class.std::function", align 8
  %151 = alloca %class.anon.437, align 8
  %152 = alloca i8, align 1
  %153 = alloca ptr, align 8
  %154 = alloca %"class.HIR::TypeRef", align 8
  %155 = alloca %"class.HIR::TypeRef", align 8
  %156 = alloca i8, align 1
  %157 = alloca ptr, align 8
  %158 = alloca %"class.HIR::TypeRef", align 8
  %159 = alloca %struct.Span, align 8
  %160 = alloca %"class.std::function", align 8
  %161 = alloca %class.anon.438, align 1
  %162 = alloca i32, align 4
  %163 = alloca %"class.HIR::TypeRef", align 8
  %164 = alloca %"class.HIR::TypeRef", align 8
  %165 = alloca i8, align 1
  %166 = alloca ptr, align 8
  %167 = alloca %"class.HIR::TypeRef", align 8
  %168 = alloca %"class.HIR::TypeRef", align 8
  %169 = alloca %"class.HIR::TypeRef", align 8
  %170 = alloca %"class.HIR::TypeRef", align 8
  %171 = alloca %"class.std::unique_ptr.74", align 8
  %172 = alloca %"class.std::unique_ptr.440", align 8
  %173 = alloca %struct.SplitSlicePatRevisit, align 8
  %174 = alloca %struct.Span, align 8
  %175 = alloca %"class.HIR::TypeRef", align 8
  %176 = alloca %"class.HIR::TypeRef", align 8
  %177 = alloca %"class.HIR::TypeRef", align 8
  %178 = alloca ptr, align 8
  %179 = alloca %"class.__gnu_cxx::__normal_iterator.417", align 8
  %180 = alloca %"class.__gnu_cxx::__normal_iterator.417", align 8
  %181 = alloca ptr, align 8
  %182 = alloca ptr, align 8
  %183 = alloca %"class.__gnu_cxx::__normal_iterator.417", align 8
  %184 = alloca %"class.__gnu_cxx::__normal_iterator.417", align 8
  %185 = alloca ptr, align 8
  %186 = alloca i8, align 1
  %187 = alloca ptr, align 8
  %188 = alloca %"class.HIR::TypeRef", align 8
  %189 = alloca i8, align 1
  %190 = alloca ptr, align 8
  %191 = alloca i8, align 1
  %192 = alloca ptr, align 8
  %193 = alloca %struct.Span, align 8
  %194 = alloca %"class.std::function", align 8
  %195 = alloca %class.anon.448, align 1
  %196 = alloca i8, align 1
  %197 = alloca ptr, align 8
  %198 = alloca i8, align 1
  %199 = alloca ptr, align 8
  %200 = alloca ptr, align 8
  %201 = alloca %struct.Span, align 8
  %202 = alloca %"class.std::function", align 8
  %203 = alloca %class.anon.460, align 1
  %204 = alloca ptr, align 8
  %205 = alloca i8, align 1
  %206 = alloca ptr, align 8
  %207 = alloca %"class.HIR::TypeRef", align 8
  %208 = alloca ptr, align 8
  %209 = alloca %struct.MonomorphStatePtr, align 8
  %210 = alloca %"class.HIR::TypeRef", align 8
  %211 = alloca %class.anon.462, align 8
  %212 = alloca %struct.Span, align 8
  %213 = alloca %"class.std::function", align 8
  %214 = alloca %class.anon.463, align 8
  %215 = alloca %struct.Span, align 8
  %216 = alloca %"class.std::function", align 8
  %217 = alloca %class.anon.464, align 8
  %218 = alloca i64, align 8
  %219 = alloca ptr, align 8
  %220 = alloca i64, align 8
  %221 = alloca ptr, align 8
  %222 = alloca i8, align 1
  %223 = alloca ptr, align 8
  %224 = alloca %"class.HIR::TypeRef", align 8
  %225 = alloca ptr, align 8
  %226 = alloca %struct.MonomorphStatePtr, align 8
  %227 = alloca ptr, align 8
  %228 = alloca %"class.__gnu_cxx::__normal_iterator.468", align 8
  %229 = alloca %"class.__gnu_cxx::__normal_iterator.468", align 8
  %230 = alloca ptr, align 8
  %231 = alloca i32, align 4
  %232 = alloca %"class.__gnu_cxx::__normal_iterator.471", align 8
  %233 = alloca %"class.__gnu_cxx::__normal_iterator.471", align 8
  %234 = alloca %"class.__gnu_cxx::__normal_iterator.471", align 8
  %235 = alloca %class.anon.472, align 8
  %236 = alloca %"class.__gnu_cxx::__normal_iterator.471", align 8
  %237 = alloca %struct.Span, align 8
  %238 = alloca %"class.std::function", align 8
  %239 = alloca %class.anon.473, align 8
  %240 = alloca ptr, align 8
  %241 = alloca %"class.HIR::TypeRef", align 8
  %242 = alloca i8, align 1
  %243 = alloca ptr, align 8
  %244 = alloca ptr, align 8
  %245 = alloca %"class.__gnu_cxx::__normal_iterator.417", align 8
  %246 = alloca %"class.__gnu_cxx::__normal_iterator.417", align 8
  %247 = alloca ptr, align 8
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store ptr %2, ptr %7, align 8, !tbaa !5
  store ptr %3, ptr %8, align 8, !tbaa !5
  %248 = load ptr, ptr %5, align 8
  call void @llvm.lifetime.start.p0(i64 40, ptr %9) #8
  %249 = call noundef zeroext i1 @_Z13debug_enabledv()
  %250 = zext i1 %249 to i64
  %251 = select i1 %249, ptr @__func__._ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE, ptr null
  call void @llvm.lifetime.start.p0(i64 16, ptr %11) #8
  %252 = getelementptr inbounds %class.anon.242, ptr %11, i32 0, i32 0
  %253 = load ptr, ptr %7, align 8, !tbaa !5
  store ptr %253, ptr %252, align 8, !tbaa !5
  %254 = getelementptr inbounds %class.anon.242, ptr %11, i32 0, i32 1
  %255 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %255, ptr %254, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef nonnull align 8 dereferenceable(16) %11) #8
  invoke void @_ZN8TraceLogC1EPKcSt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(40) %9, ptr noundef %251, ptr noundef %10)
          to label %256 unwind label %268

256:                                              ; preds = %4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %11) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #8
  %257 = load ptr, ptr %7, align 8, !tbaa !5
  %258 = getelementptr inbounds %"struct.HIR::Pattern", ptr %257, i32 0, i32 0
  store ptr %258, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #8
  %259 = load ptr, ptr %14, align 8, !tbaa !5
  %260 = call ptr @_ZNSt6vectorIN3HIR14PatternBindingESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %259) #8
  %261 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.233", ptr %15, i32 0, i32 0
  store ptr %260, ptr %261, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #8
  %262 = load ptr, ptr %14, align 8, !tbaa !5
  %263 = call ptr @_ZNSt6vectorIN3HIR14PatternBindingESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %262) #8
  %264 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.233", ptr %16, i32 0, i32 0
  store ptr %263, ptr %264, align 8
  br label %265

265:                                              ; preds = %279, %256
  %266 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR14PatternBindingESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(8) %16) #8
  br i1 %266, label %272, label %267

267:                                              ; preds = %265
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  br label %290

268:                                              ; preds = %4
  %269 = landingpad { ptr, i32 }
          cleanup
  %270 = extractvalue { ptr, i32 } %269, 0
  store ptr %270, ptr %12, align 8
  %271 = extractvalue { ptr, i32 } %269, 1
  store i32 %271, ptr %13, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %11) #8
  br label %2632

272:                                              ; preds = %265
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #8
  %273 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR14PatternBindingESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %15) #8
  store ptr %273, ptr %17, align 8, !tbaa !5
  %274 = load ptr, ptr %6, align 8, !tbaa !5
  %275 = load ptr, ptr %17, align 8, !tbaa !5
  %276 = load ptr, ptr %8, align 8, !tbaa !5
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %18, ptr noundef nonnull align 8 dereferenceable(8) %276)
          to label %277 unwind label %281

277:                                              ; preds = %272
  invoke void @_ZN7Context17add_binding_innerERK4SpanRKN3HIR14PatternBindingENS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef nonnull align 8 dereferenceable(8) %274, ptr noundef nonnull align 8 dereferenceable(24) %275, ptr noundef %18)
          to label %278 unwind label %285

278:                                              ; preds = %277
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %18) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #8
  br label %279

279:                                              ; preds = %278
  %280 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR14PatternBindingESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %15) #8
  br label %265

281:                                              ; preds = %272
  %282 = landingpad { ptr, i32 }
          cleanup
  %283 = extractvalue { ptr, i32 } %282, 0
  store ptr %283, ptr %12, align 8
  %284 = extractvalue { ptr, i32 } %282, 1
  store i32 %284, ptr %13, align 4
  br label %289

285:                                              ; preds = %277
  %286 = landingpad { ptr, i32 }
          cleanup
  %287 = extractvalue { ptr, i32 } %286, 0
  store ptr %287, ptr %12, align 8
  %288 = extractvalue { ptr, i32 } %286, 1
  store i32 %288, ptr %13, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %18) #8
  br label %289

289:                                              ; preds = %285, %281
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  br label %2631

290:                                              ; preds = %267
  call void @llvm.lifetime.start.p0(i64 1, ptr %19) #8
  store i8 1, ptr %19, align 1, !tbaa !9
  br label %291

291:                                              ; preds = %2624, %290
  %292 = load i8, ptr %19, align 1, !tbaa !9, !range !11, !noundef !12
  %293 = trunc i8 %292 to i1
  br i1 %293, label %295, label %294

294:                                              ; preds = %291
  store i32 4, ptr %20, align 4
  br label %2625

295:                                              ; preds = %291
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #8
  %296 = load ptr, ptr %7, align 8, !tbaa !5
  %297 = getelementptr inbounds %"struct.HIR::Pattern", ptr %296, i32 0, i32 1
  store ptr %297, ptr %21, align 8, !tbaa !5
  br label %298

298:                                              ; preds = %2619, %295
  %299 = load i8, ptr %19, align 1, !tbaa !9, !range !11, !noundef !12
  %300 = trunc i8 %299 to i1
  br i1 %300, label %302, label %301

301:                                              ; preds = %298
  store i32 7, ptr %20, align 4
  br label %2620

302:                                              ; preds = %298
  %303 = load ptr, ptr %21, align 8, !tbaa !5
  %304 = invoke noundef i32 @_ZNK3HIR7Pattern4Data3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %303)
          to label %305 unwind label %306

305:                                              ; preds = %302
  switch i32 %304, label %2618 [
    i32 0, label %310
    i32 1, label %311
    i32 10, label %334
    i32 11, label %362
    i32 2, label %407
    i32 3, label %610
    i32 4, label %733
    i32 5, label %901
    i32 12, label %1201
    i32 13, label %1478
    i32 6, label %1901
    i32 7, label %2143
    i32 8, label %2379
    i32 9, label %2571
  ]

306:                                              ; preds = %302
  %307 = landingpad { ptr, i32 }
          cleanup
  %308 = extractvalue { ptr, i32 } %307, 0
  store ptr %308, ptr %12, align 8
  %309 = extractvalue { ptr, i32 } %307, 1
  store i32 %309, ptr %13, align 4
  br label %2622

310:                                              ; preds = %305
  call void @__assert_fail(ptr noundef @.str.20, ptr noundef @.str.21, i32 noundef 3253, ptr noundef @__PRETTY_FUNCTION__._ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE) #9
  unreachable

311:                                              ; preds = %305
  call void @llvm.lifetime.start.p0(i64 1, ptr %22) #8
  store i8 1, ptr %22, align 1, !tbaa !9
  br label %312

312:                                              ; preds = %332, %311
  %313 = load i8, ptr %22, align 1, !tbaa !9, !range !11, !noundef !12
  %314 = trunc i8 %313 to i1
  br i1 %314, label %316, label %315

315:                                              ; preds = %312
  store i32 11, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #8
  br label %333

316:                                              ; preds = %312
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #8
  %317 = load ptr, ptr %21, align 8, !tbaa !5
  %318 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZN3HIR7Pattern4Data6as_AnyEv(ptr noundef nonnull align 8 dereferenceable(184) %317)
          to label %319 unwind label %325

319:                                              ; preds = %316
  store ptr %318, ptr %23, align 8, !tbaa !5
  br label %320

320:                                              ; preds = %330, %319
  %321 = load ptr, ptr %23, align 8, !tbaa !5
  %322 = load i8, ptr %22, align 1, !tbaa !9, !range !11, !noundef !12
  %323 = trunc i8 %322 to i1
  br i1 %323, label %329, label %324

324:                                              ; preds = %320
  store i32 14, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  br label %331

325:                                              ; preds = %316
  %326 = landingpad { ptr, i32 }
          cleanup
  %327 = extractvalue { ptr, i32 } %326, 0
  store ptr %327, ptr %12, align 8
  %328 = extractvalue { ptr, i32 } %326, 1
  store i32 %328, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #8
  br label %2622

329:                                              ; preds = %320
  br label %330

330:                                              ; preds = %329
  store i8 0, ptr %22, align 1, !tbaa !9
  br label %320, !llvm.loop !13

331:                                              ; preds = %324
  br label %332

332:                                              ; preds = %331
  store i8 0, ptr %22, align 1, !tbaa !9
  br label %312, !llvm.loop !15

333:                                              ; preds = %315
  br label %2618

334:                                              ; preds = %305
  call void @llvm.lifetime.start.p0(i64 1, ptr %24) #8
  store i8 1, ptr %24, align 1, !tbaa !9
  br label %335

335:                                              ; preds = %360, %334
  %336 = load i8, ptr %24, align 1, !tbaa !9, !range !11, !noundef !12
  %337 = trunc i8 %336 to i1
  br i1 %337, label %339, label %338

338:                                              ; preds = %335
  store i32 17, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #8
  br label %361

339:                                              ; preds = %335
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #8
  %340 = load ptr, ptr %21, align 8, !tbaa !5
  %341 = invoke noundef nonnull align 8 dereferenceable(104) ptr @_ZN3HIR7Pattern4Data8as_ValueEv(ptr noundef nonnull align 8 dereferenceable(184) %340)
          to label %342 unwind label %348

342:                                              ; preds = %339
  store ptr %341, ptr %25, align 8, !tbaa !5
  br label %343

343:                                              ; preds = %358, %342
  %344 = load ptr, ptr %25, align 8, !tbaa !5
  %345 = load i8, ptr %24, align 1, !tbaa !9, !range !11, !noundef !12
  %346 = trunc i8 %345 to i1
  br i1 %346, label %352, label %347

347:                                              ; preds = %343
  store i32 20, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  br label %359

348:                                              ; preds = %352, %339
  %349 = landingpad { ptr, i32 }
          cleanup
  %350 = extractvalue { ptr, i32 } %349, 0
  store ptr %350, ptr %12, align 8
  %351 = extractvalue { ptr, i32 } %349, 1
  store i32 %351, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #8
  br label %2622

352:                                              ; preds = %343
  %353 = load ptr, ptr %6, align 8, !tbaa !5
  %354 = load ptr, ptr %8, align 8, !tbaa !5
  %355 = load ptr, ptr %25, align 8, !tbaa !5
  %356 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_Value", ptr %355, i32 0, i32 0
  invoke void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN1H12handle_valueERS_S2_S8_RKNS4_5ValueE(ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef nonnull align 8 dereferenceable(8) %353, ptr noundef nonnull align 8 dereferenceable(8) %354, ptr noundef nonnull align 8 dereferenceable(104) %356)
          to label %357 unwind label %348

357:                                              ; preds = %352
  br label %358

358:                                              ; preds = %357
  store i8 0, ptr %24, align 1, !tbaa !9
  br label %343, !llvm.loop !16

359:                                              ; preds = %347
  br label %360

360:                                              ; preds = %359
  store i8 0, ptr %24, align 1, !tbaa !9
  br label %335, !llvm.loop !17

361:                                              ; preds = %338
  br label %2618

362:                                              ; preds = %305
  call void @llvm.lifetime.start.p0(i64 1, ptr %26) #8
  store i8 1, ptr %26, align 1, !tbaa !9
  br label %363

363:                                              ; preds = %405, %362
  %364 = load i8, ptr %26, align 1, !tbaa !9, !range !11, !noundef !12
  %365 = trunc i8 %364 to i1
  br i1 %365, label %367, label %366

366:                                              ; preds = %363
  store i32 23, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #8
  br label %406

367:                                              ; preds = %363
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #8
  %368 = load ptr, ptr %21, align 8, !tbaa !5
  %369 = invoke noundef nonnull align 8 dereferenceable(17) ptr @_ZN3HIR7Pattern4Data8as_RangeEv(ptr noundef nonnull align 8 dereferenceable(184) %368)
          to label %370 unwind label %376

370:                                              ; preds = %367
  store ptr %369, ptr %27, align 8, !tbaa !5
  br label %371

371:                                              ; preds = %403, %370
  %372 = load ptr, ptr %27, align 8, !tbaa !5
  %373 = load i8, ptr %26, align 1, !tbaa !9, !range !11, !noundef !12
  %374 = trunc i8 %373 to i1
  br i1 %374, label %380, label %375

375:                                              ; preds = %371
  store i32 26, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #8
  br label %404

376:                                              ; preds = %395, %384, %367
  %377 = landingpad { ptr, i32 }
          cleanup
  %378 = extractvalue { ptr, i32 } %377, 0
  store ptr %378, ptr %12, align 8
  %379 = extractvalue { ptr, i32 } %377, 1
  store i32 %379, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #8
  br label %2622

380:                                              ; preds = %371
  %381 = load ptr, ptr %27, align 8, !tbaa !5
  %382 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_Range", ptr %381, i32 0, i32 0
  %383 = call noundef zeroext i1 @_ZNKSt10unique_ptrIN3HIR7Pattern5ValueESt14default_deleteIS2_EEcvbEv(ptr noundef nonnull align 8 dereferenceable(8) %382) #8
  br i1 %383, label %384, label %391

384:                                              ; preds = %380
  %385 = load ptr, ptr %6, align 8, !tbaa !5
  %386 = load ptr, ptr %8, align 8, !tbaa !5
  %387 = load ptr, ptr %27, align 8, !tbaa !5
  %388 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_Range", ptr %387, i32 0, i32 0
  %389 = call noundef nonnull align 8 dereferenceable(104) ptr @_ZNKSt10unique_ptrIN3HIR7Pattern5ValueESt14default_deleteIS2_EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %388) #8
  invoke void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN1H12handle_valueERS_S2_S8_RKNS4_5ValueE(ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef nonnull align 8 dereferenceable(8) %385, ptr noundef nonnull align 8 dereferenceable(8) %386, ptr noundef nonnull align 8 dereferenceable(104) %389)
          to label %390 unwind label %376

390:                                              ; preds = %384
  br label %391

391:                                              ; preds = %390, %380
  %392 = load ptr, ptr %27, align 8, !tbaa !5
  %393 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_Range", ptr %392, i32 0, i32 1
  %394 = call noundef zeroext i1 @_ZNKSt10unique_ptrIN3HIR7Pattern5ValueESt14default_deleteIS2_EEcvbEv(ptr noundef nonnull align 8 dereferenceable(8) %393) #8
  br i1 %394, label %395, label %402

395:                                              ; preds = %391
  %396 = load ptr, ptr %6, align 8, !tbaa !5
  %397 = load ptr, ptr %8, align 8, !tbaa !5
  %398 = load ptr, ptr %27, align 8, !tbaa !5
  %399 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_Range", ptr %398, i32 0, i32 1
  %400 = call noundef nonnull align 8 dereferenceable(104) ptr @_ZNKSt10unique_ptrIN3HIR7Pattern5ValueESt14default_deleteIS2_EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %399) #8
  invoke void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN1H12handle_valueERS_S2_S8_RKNS4_5ValueE(ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef nonnull align 8 dereferenceable(8) %396, ptr noundef nonnull align 8 dereferenceable(8) %397, ptr noundef nonnull align 8 dereferenceable(104) %400)
          to label %401 unwind label %376

401:                                              ; preds = %395
  br label %402

402:                                              ; preds = %401, %391
  br label %403

403:                                              ; preds = %402
  store i8 0, ptr %26, align 1, !tbaa !9
  br label %371, !llvm.loop !18

404:                                              ; preds = %375
  br label %405

405:                                              ; preds = %404
  store i8 0, ptr %26, align 1, !tbaa !9
  br label %363, !llvm.loop !19

406:                                              ; preds = %366
  br label %2618

407:                                              ; preds = %305
  call void @llvm.lifetime.start.p0(i64 1, ptr %28) #8
  store i8 1, ptr %28, align 1, !tbaa !9
  br label %408

408:                                              ; preds = %608, %407
  %409 = load i8, ptr %28, align 1, !tbaa !9, !range !11, !noundef !12
  %410 = trunc i8 %409 to i1
  br i1 %410, label %412, label %411

411:                                              ; preds = %408
  store i32 29, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %28) #8
  br label %609

412:                                              ; preds = %408
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #8
  %413 = load ptr, ptr %21, align 8, !tbaa !5
  %414 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIR7Pattern4Data6as_BoxEv(ptr noundef nonnull align 8 dereferenceable(184) %413)
          to label %415 unwind label %421

415:                                              ; preds = %412
  store ptr %414, ptr %29, align 8, !tbaa !5
  br label %416

416:                                              ; preds = %549, %415
  %417 = load ptr, ptr %29, align 8, !tbaa !5
  %418 = load i8, ptr %28, align 1, !tbaa !9, !range !11, !noundef !12
  %419 = trunc i8 %418 to i1
  br i1 %419, label %425, label %420

420:                                              ; preds = %416
  store i32 32, ptr %20, align 4
  br label %605

421:                                              ; preds = %436, %412
  %422 = landingpad { ptr, i32 }
          cleanup
  %423 = extractvalue { ptr, i32 } %422, 0
  store ptr %423, ptr %12, align 8
  %424 = extractvalue { ptr, i32 } %422, 1
  store i32 %424, ptr %13, align 4
  br label %606

425:                                              ; preds = %416
  %426 = getelementptr inbounds %struct.Context, ptr %248, i32 0, i32 12
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #8
  invoke void @_ZN3HIR10SimplePathC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %30)
          to label %427 unwind label %437

427:                                              ; preds = %425
  %428 = invoke noundef zeroext i1 @_ZNK3HIR10SimplePatheqERKS0_(ptr noundef nonnull align 8 dereferenceable(8) %426, ptr noundef nonnull align 8 dereferenceable(8) %30)
          to label %429 unwind label %441

429:                                              ; preds = %427
  call void @_ZN3HIR10SimplePathD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %30) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  br i1 %428, label %430, label %461

430:                                              ; preds = %429
  br label %431

431:                                              ; preds = %430
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #8
  %432 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %31, ptr noundef nonnull align 8 dereferenceable(8) %432)
          to label %433 unwind label %446

433:                                              ; preds = %431
  call void @llvm.lifetime.start.p0(i64 1, ptr %33) #8
  call void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %32, ptr noundef nonnull align 1 dereferenceable(1) %33) #8
  invoke void @_ZNK4Span5errorE9ErrorTypeSt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %31, i32 noundef 0, ptr noundef %32)
          to label %434 unwind label %450

434:                                              ; preds = %433
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %33) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %31) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #8
  %435 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %435, ptr noundef @.str.19)
          to label %436 unwind label %455

436:                                              ; preds = %434
  invoke void @__cxa_throw(ptr %435, ptr @_ZTISt13runtime_error, ptr @_ZNSt13runtime_errorD1Ev) #10
          to label %2638 unwind label %421

437:                                              ; preds = %425
  %438 = landingpad { ptr, i32 }
          cleanup
  %439 = extractvalue { ptr, i32 } %438, 0
  store ptr %439, ptr %12, align 8
  %440 = extractvalue { ptr, i32 } %438, 1
  store i32 %440, ptr %13, align 4
  br label %445

441:                                              ; preds = %427
  %442 = landingpad { ptr, i32 }
          cleanup
  %443 = extractvalue { ptr, i32 } %442, 0
  store ptr %443, ptr %12, align 8
  %444 = extractvalue { ptr, i32 } %442, 1
  store i32 %444, ptr %13, align 4
  call void @_ZN3HIR10SimplePathD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %30) #8
  br label %445

445:                                              ; preds = %441, %437
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  br label %606

446:                                              ; preds = %431
  %447 = landingpad { ptr, i32 }
          cleanup
  %448 = extractvalue { ptr, i32 } %447, 0
  store ptr %448, ptr %12, align 8
  %449 = extractvalue { ptr, i32 } %447, 1
  store i32 %449, ptr %13, align 4
  br label %454

450:                                              ; preds = %433
  %451 = landingpad { ptr, i32 }
          cleanup
  %452 = extractvalue { ptr, i32 } %451, 0
  store ptr %452, ptr %12, align 8
  %453 = extractvalue { ptr, i32 } %451, 1
  store i32 %453, ptr %13, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %33) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %31) #8
  br label %454

454:                                              ; preds = %450, %446
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #8
  br label %606

455:                                              ; preds = %434
  %456 = landingpad { ptr, i32 }
          cleanup
  %457 = extractvalue { ptr, i32 } %456, 0
  store ptr %457, ptr %12, align 8
  %458 = extractvalue { ptr, i32 } %456, 1
  store i32 %458, ptr %13, align 4
  call void @__cxa_free_exception(ptr %435) #8
  br label %606

459:                                              ; No predecessors!
  br label %460

460:                                              ; preds = %459
  br label %461

461:                                              ; preds = %460, %429
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #8
  %462 = load ptr, ptr %8, align 8, !tbaa !5
  %463 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7Context8get_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef nonnull align 8 dereferenceable(8) %462)
          to label %464 unwind label %504

464:                                              ; preds = %461
  store ptr %463, ptr %34, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #8
  %465 = load ptr, ptr %34, align 8, !tbaa !5
  %466 = invoke noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %465)
          to label %467 unwind label %508

467:                                              ; preds = %464
  %468 = invoke noundef ptr @_ZNK3HIR8TypeData8opt_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %466)
          to label %469 unwind label %508

469:                                              ; preds = %467
  store ptr %468, ptr %35, align 8, !tbaa !5
  %470 = load ptr, ptr %35, align 8, !tbaa !5
  %471 = icmp ne ptr %470, null
  br i1 %471, label %472, label %517

472:                                              ; preds = %469
  %473 = load ptr, ptr %35, align 8, !tbaa !5
  %474 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %473, i32 0, i32 0
  %475 = getelementptr inbounds %"class.HIR::Path", ptr %474, i32 0, i32 0
  %476 = invoke noundef zeroext i1 @_ZNK3HIR4Path4Data10is_GenericEv(ptr noundef nonnull align 8 dereferenceable(88) %475)
          to label %477 unwind label %508

477:                                              ; preds = %472
  br i1 %476, label %478, label %516

478:                                              ; preds = %477
  %479 = load ptr, ptr %35, align 8, !tbaa !5
  %480 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %479, i32 0, i32 0
  %481 = getelementptr inbounds %"class.HIR::Path", ptr %480, i32 0, i32 0
  %482 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNK3HIR4Path4Data10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(88) %481)
          to label %483 unwind label %508

483:                                              ; preds = %478
  %484 = getelementptr inbounds %"class.HIR::GenericPath", ptr %482, i32 0, i32 0
  %485 = getelementptr inbounds %struct.Context, ptr %248, i32 0, i32 12
  %486 = invoke noundef zeroext i1 @_ZNK3HIR10SimplePatheqERKS0_(ptr noundef nonnull align 8 dereferenceable(8) %484, ptr noundef nonnull align 8 dereferenceable(8) %485)
          to label %487 unwind label %508

487:                                              ; preds = %483
  br i1 %486, label %488, label %516

488:                                              ; preds = %487
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #8
  %489 = load ptr, ptr %35, align 8, !tbaa !5
  %490 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %489, i32 0, i32 0
  %491 = getelementptr inbounds %"class.HIR::Path", ptr %490, i32 0, i32 0
  %492 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNK3HIR4Path4Data10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(88) %491)
          to label %493 unwind label %512

493:                                              ; preds = %488
  %494 = getelementptr inbounds %"class.HIR::GenericPath", ptr %492, i32 0, i32 1
  %495 = getelementptr inbounds %"struct.HIR::PathParams", ptr %494, i32 0, i32 1
  %496 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK10ThinVectorIN3HIR7TypeRefEE2atEm(ptr noundef nonnull align 8 dereferenceable(8) %495, i64 noundef 0)
          to label %497 unwind label %512

497:                                              ; preds = %493
  store ptr %496, ptr %36, align 8, !tbaa !5
  %498 = load ptr, ptr %6, align 8, !tbaa !5
  %499 = load ptr, ptr %29, align 8, !tbaa !5
  %500 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_Box", ptr %499, i32 0, i32 0
  %501 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNKSt10unique_ptrIN3HIR7PatternESt14default_deleteIS1_EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %500) #8
  %502 = load ptr, ptr %36, align 8, !tbaa !5
  invoke void @_ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef nonnull align 8 dereferenceable(8) %498, ptr noundef nonnull align 8 dereferenceable(212) %501, ptr noundef nonnull align 8 dereferenceable(8) %502)
          to label %503 unwind label %512

503:                                              ; preds = %497
  store i32 32, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #8
  br label %518

504:                                              ; preds = %461
  %505 = landingpad { ptr, i32 }
          cleanup
  %506 = extractvalue { ptr, i32 } %505, 0
  store ptr %506, ptr %12, align 8
  %507 = extractvalue { ptr, i32 } %505, 1
  store i32 %507, ptr %13, align 4
  br label %604

508:                                              ; preds = %483, %478, %472, %467, %464
  %509 = landingpad { ptr, i32 }
          cleanup
  %510 = extractvalue { ptr, i32 } %509, 0
  store ptr %510, ptr %12, align 8
  %511 = extractvalue { ptr, i32 } %509, 1
  store i32 %511, ptr %13, align 4
  br label %550

512:                                              ; preds = %497, %493, %488
  %513 = landingpad { ptr, i32 }
          cleanup
  %514 = extractvalue { ptr, i32 } %513, 0
  store ptr %514, ptr %12, align 8
  %515 = extractvalue { ptr, i32 } %513, 1
  store i32 %515, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #8
  br label %550

516:                                              ; preds = %487, %477
  br label %517

517:                                              ; preds = %516, %469
  store i32 0, ptr %20, align 4
  br label %518

518:                                              ; preds = %517, %503
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #8
  %519 = load i32, ptr %20, align 4
  switch i32 %519, label %546 [
    i32 0, label %520
  ]

520:                                              ; preds = %518
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #8
  %521 = getelementptr inbounds %struct.Context, ptr %248, i32 0, i32 2
  invoke void @_ZN16HMTypeInferrence11new_ivar_trEN3HIR10InferClassE(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %37, ptr noundef nonnull align 8 dereferenceable(49) %521, i32 noundef 0)
          to label %522 unwind label %551

522:                                              ; preds = %520
  %523 = load ptr, ptr %6, align 8, !tbaa !5
  %524 = load ptr, ptr %29, align 8, !tbaa !5
  %525 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_Box", ptr %524, i32 0, i32 0
  %526 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNKSt10unique_ptrIN3HIR7PatternESt14default_deleteIS1_EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %525) #8
  invoke void @_ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef nonnull align 8 dereferenceable(8) %523, ptr noundef nonnull align 8 dereferenceable(212) %526, ptr noundef nonnull align 8 dereferenceable(8) %37)
          to label %527 unwind label %555

527:                                              ; preds = %522
  call void @llvm.lifetime.start.p0(i64 32, ptr %38) #8
  %528 = getelementptr inbounds %struct.Context, ptr %248, i32 0, i32 12
  invoke void @_ZN3HIR10SimplePathC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(8) %39, ptr noundef nonnull align 8 dereferenceable(8) %528)
          to label %529 unwind label %559

529:                                              ; preds = %527
  invoke void @_ZN3HIR7TypeRefC2EOS0_(ptr noundef nonnull align 8 dereferenceable(8) %41, ptr noundef nonnull align 8 dereferenceable(8) %37)
          to label %530 unwind label %563

530:                                              ; preds = %529
  invoke void @_ZN3HIR10PathParamsC1ENS_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(24) %40, ptr noundef %41)
          to label %531 unwind label %567

531:                                              ; preds = %530
  invoke void @_ZN3HIR11GenericPathC1ENS_10SimplePathENS_10PathParamsE(ptr noundef nonnull align 8 dereferenceable(32) %38, ptr noundef %39, ptr noundef %40)
          to label %532 unwind label %571

532:                                              ; preds = %531
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %40) #8
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %41) #8
  call void @_ZN3HIR10SimplePathD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %39) #8
  %533 = load ptr, ptr %6, align 8, !tbaa !5
  %534 = load ptr, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #8
  invoke void @_ZN3HIR11GenericPathC2EOS0_(ptr noundef nonnull align 8 dereferenceable(32) %44, ptr noundef nonnull align 8 dereferenceable(32) %38)
          to label %535 unwind label %577

535:                                              ; preds = %532
  invoke void @_ZN3HIR4PathC1ENS_11GenericPathE(ptr noundef nonnull align 8 dereferenceable(88) %43, ptr noundef %44)
          to label %536 unwind label %581

536:                                              ; preds = %535
  %537 = getelementptr inbounds %struct.Context, ptr %248, i32 0, i32 0
  %538 = load ptr, ptr %537, align 8, !tbaa !20
  %539 = load ptr, ptr %6, align 8, !tbaa !5
  %540 = getelementptr inbounds %struct.Context, ptr %248, i32 0, i32 12
  %541 = invoke noundef nonnull align 8 dereferenceable(252) ptr @_ZNK3HIR5Crate18get_struct_by_pathERK4SpanRKNS_10SimplePathE(ptr noundef nonnull align 8 dereferenceable(944) %538, ptr noundef nonnull align 8 dereferenceable(8) %539, ptr noundef nonnull align 8 dereferenceable(8) %540)
          to label %542 unwind label %585

542:                                              ; preds = %536
  invoke void @_ZN3HIR15TypePathBindingC2EPKNS_6StructE(ptr noundef nonnull align 8 dereferenceable(16) %45, ptr noundef %541)
          to label %543 unwind label %585

543:                                              ; preds = %542
  invoke void @_ZN3HIR7TypeRef8new_pathENS_4PathENS_15TypePathBindingE(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %42, ptr noundef %43, ptr noundef %45)
          to label %544 unwind label %589

544:                                              ; preds = %543
  invoke void @_ZN7Context12equate_typesERK4SpanRKN3HIR7TypeRefES6_(ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef nonnull align 8 dereferenceable(8) %533, ptr noundef nonnull align 8 dereferenceable(8) %534, ptr noundef nonnull align 8 dereferenceable(8) %42)
          to label %545 unwind label %593

545:                                              ; preds = %544
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %42) #8
  call void @_ZN3HIR15TypePathBindingD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %45) #8
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %43) #8
  call void @_ZN3HIR11GenericPathD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #8
  call void @_ZN3HIR11GenericPathD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %38) #8
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %37) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #8
  store i32 0, ptr %20, align 4
  br label %546

546:                                              ; preds = %545, %518
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #8
  %547 = load i32, ptr %20, align 4
  switch i32 %547, label %605 [
    i32 0, label %548
  ]

548:                                              ; preds = %546
  br label %549

549:                                              ; preds = %548
  store i8 0, ptr %28, align 1, !tbaa !9
  br label %416, !llvm.loop !90

550:                                              ; preds = %512, %508
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #8
  br label %604

551:                                              ; preds = %520
  %552 = landingpad { ptr, i32 }
          cleanup
  %553 = extractvalue { ptr, i32 } %552, 0
  store ptr %553, ptr %12, align 8
  %554 = extractvalue { ptr, i32 } %552, 1
  store i32 %554, ptr %13, align 4
  br label %603

555:                                              ; preds = %522
  %556 = landingpad { ptr, i32 }
          cleanup
  %557 = extractvalue { ptr, i32 } %556, 0
  store ptr %557, ptr %12, align 8
  %558 = extractvalue { ptr, i32 } %556, 1
  store i32 %558, ptr %13, align 4
  br label %602

559:                                              ; preds = %527
  %560 = landingpad { ptr, i32 }
          cleanup
  %561 = extractvalue { ptr, i32 } %560, 0
  store ptr %561, ptr %12, align 8
  %562 = extractvalue { ptr, i32 } %560, 1
  store i32 %562, ptr %13, align 4
  br label %601

563:                                              ; preds = %529
  %564 = landingpad { ptr, i32 }
          cleanup
  %565 = extractvalue { ptr, i32 } %564, 0
  store ptr %565, ptr %12, align 8
  %566 = extractvalue { ptr, i32 } %564, 1
  store i32 %566, ptr %13, align 4
  br label %576

567:                                              ; preds = %530
  %568 = landingpad { ptr, i32 }
          cleanup
  %569 = extractvalue { ptr, i32 } %568, 0
  store ptr %569, ptr %12, align 8
  %570 = extractvalue { ptr, i32 } %568, 1
  store i32 %570, ptr %13, align 4
  br label %575

571:                                              ; preds = %531
  %572 = landingpad { ptr, i32 }
          cleanup
  %573 = extractvalue { ptr, i32 } %572, 0
  store ptr %573, ptr %12, align 8
  %574 = extractvalue { ptr, i32 } %572, 1
  store i32 %574, ptr %13, align 4
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %40) #8
  br label %575

575:                                              ; preds = %571, %567
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %41) #8
  br label %576

576:                                              ; preds = %575, %563
  call void @_ZN3HIR10SimplePathD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %39) #8
  br label %601

577:                                              ; preds = %532
  %578 = landingpad { ptr, i32 }
          cleanup
  %579 = extractvalue { ptr, i32 } %578, 0
  store ptr %579, ptr %12, align 8
  %580 = extractvalue { ptr, i32 } %578, 1
  store i32 %580, ptr %13, align 4
  br label %600

581:                                              ; preds = %535
  %582 = landingpad { ptr, i32 }
          cleanup
  %583 = extractvalue { ptr, i32 } %582, 0
  store ptr %583, ptr %12, align 8
  %584 = extractvalue { ptr, i32 } %582, 1
  store i32 %584, ptr %13, align 4
  br label %599

585:                                              ; preds = %542, %536
  %586 = landingpad { ptr, i32 }
          cleanup
  %587 = extractvalue { ptr, i32 } %586, 0
  store ptr %587, ptr %12, align 8
  %588 = extractvalue { ptr, i32 } %586, 1
  store i32 %588, ptr %13, align 4
  br label %598

589:                                              ; preds = %543
  %590 = landingpad { ptr, i32 }
          cleanup
  %591 = extractvalue { ptr, i32 } %590, 0
  store ptr %591, ptr %12, align 8
  %592 = extractvalue { ptr, i32 } %590, 1
  store i32 %592, ptr %13, align 4
  br label %597

593:                                              ; preds = %544
  %594 = landingpad { ptr, i32 }
          cleanup
  %595 = extractvalue { ptr, i32 } %594, 0
  store ptr %595, ptr %12, align 8
  %596 = extractvalue { ptr, i32 } %594, 1
  store i32 %596, ptr %13, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %42) #8
  br label %597

597:                                              ; preds = %593, %589
  call void @_ZN3HIR15TypePathBindingD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %45) #8
  br label %598

598:                                              ; preds = %597, %585
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %43) #8
  br label %599

599:                                              ; preds = %598, %581
  call void @_ZN3HIR11GenericPathD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #8
  br label %600

600:                                              ; preds = %599, %577
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #8
  call void @_ZN3HIR11GenericPathD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #8
  br label %601

601:                                              ; preds = %600, %576, %559
  call void @llvm.lifetime.end.p0(i64 32, ptr %38) #8
  br label %602

602:                                              ; preds = %601, %555
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %37) #8
  br label %603

603:                                              ; preds = %602, %551
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #8
  br label %604

604:                                              ; preds = %603, %550, %504
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #8
  br label %606

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

606:                                              ; preds = %604, %455, %454, %445, %421
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %28) #8
  br label %2622

607:                                              ; preds = %605
  br label %608

608:                                              ; preds = %607
  store i8 0, ptr %28, align 1, !tbaa !9
  br label %408, !llvm.loop !91

609:                                              ; preds = %411
  br label %2618

610:                                              ; preds = %305
  call void @llvm.lifetime.start.p0(i64 1, ptr %46) #8
  store i8 1, ptr %46, align 1, !tbaa !9
  br label %611

611:                                              ; preds = %731, %610
  %612 = load i8, ptr %46, align 1, !tbaa !9, !range !11, !noundef !12
  %613 = trunc i8 %612 to i1
  br i1 %613, label %615, label %614

614:                                              ; preds = %611
  store i32 37, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %46) #8
  br label %732

615:                                              ; preds = %611
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #8
  %616 = load ptr, ptr %21, align 8, !tbaa !5
  %617 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN3HIR7Pattern4Data6as_RefEv(ptr noundef nonnull align 8 dereferenceable(184) %616)
          to label %618 unwind label %624

618:                                              ; preds = %615
  store ptr %617, ptr %47, align 8, !tbaa !5
  br label %619

619:                                              ; preds = %726, %618
  %620 = load ptr, ptr %47, align 8, !tbaa !5
  %621 = load i8, ptr %46, align 1, !tbaa !9, !range !11, !noundef !12
  %622 = trunc i8 %621 to i1
  br i1 %622, label %628, label %623

623:                                              ; preds = %619
  store i32 40, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #8
  br label %730

624:                                              ; preds = %615
  %625 = landingpad { ptr, i32 }
          cleanup
  %626 = extractvalue { ptr, i32 } %625, 0
  store ptr %626, ptr %12, align 8
  %627 = extractvalue { ptr, i32 } %625, 1
  store i32 %627, ptr %13, align 4
  br label %729

628:                                              ; preds = %619
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #8
  %629 = load ptr, ptr %8, align 8, !tbaa !5
  %630 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7Context8get_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef nonnull align 8 dereferenceable(8) %629)
          to label %631 unwind label %654

631:                                              ; preds = %628
  store ptr %630, ptr %48, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #8
  %632 = load ptr, ptr %48, align 8, !tbaa !5
  %633 = invoke noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %632)
          to label %634 unwind label %658

634:                                              ; preds = %631
  %635 = invoke noundef ptr @_ZNK3HIR8TypeData10opt_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %633)
          to label %636 unwind label %658

636:                                              ; preds = %634
  store ptr %635, ptr %49, align 8, !tbaa !5
  %637 = load ptr, ptr %49, align 8, !tbaa !5
  %638 = icmp ne ptr %637, null
  br i1 %638, label %639, label %685

639:                                              ; preds = %636
  %640 = load ptr, ptr %49, align 8, !tbaa !5
  %641 = getelementptr inbounds %"struct.HIR::TypeData::Data_Borrow", ptr %640, i32 0, i32 1
  %642 = load i32, ptr %641, align 4, !tbaa !92
  %643 = load ptr, ptr %47, align 8, !tbaa !5
  %644 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_Ref", ptr %643, i32 0, i32 0
  %645 = load i32, ptr %644, align 8, !tbaa !97
  %646 = icmp ne i32 %642, %645
  br i1 %646, label %647, label %677

647:                                              ; preds = %639
  br label %648

648:                                              ; preds = %647
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #8
  %649 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %50, ptr noundef nonnull align 8 dereferenceable(8) %649)
          to label %650 unwind label %662

650:                                              ; preds = %648
  call void @llvm.lifetime.start.p0(i64 1, ptr %52) #8
  call void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %51, ptr noundef nonnull align 1 dereferenceable(1) %52) #8
  invoke void @_ZNK4Span5errorE9ErrorTypeSt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %50, i32 noundef 0, ptr noundef %51)
          to label %651 unwind label %666

651:                                              ; preds = %650
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %52) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %50) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #8
  %652 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %652, ptr noundef @.str.19)
          to label %653 unwind label %671

653:                                              ; preds = %651
  invoke void @__cxa_throw(ptr %652, ptr @_ZTISt13runtime_error, ptr @_ZNSt13runtime_errorD1Ev) #10
          to label %2638 unwind label %658

654:                                              ; preds = %628
  %655 = landingpad { ptr, i32 }
          cleanup
  %656 = extractvalue { ptr, i32 } %655, 0
  store ptr %656, ptr %12, align 8
  %657 = extractvalue { ptr, i32 } %655, 1
  store i32 %657, ptr %13, align 4
  br label %728

658:                                              ; preds = %677, %653, %634, %631
  %659 = landingpad { ptr, i32 }
          cleanup
  %660 = extractvalue { ptr, i32 } %659, 0
  store ptr %660, ptr %12, align 8
  %661 = extractvalue { ptr, i32 } %659, 1
  store i32 %661, ptr %13, align 4
  br label %727

662:                                              ; preds = %648
  %663 = landingpad { ptr, i32 }
          cleanup
  %664 = extractvalue { ptr, i32 } %663, 0
  store ptr %664, ptr %12, align 8
  %665 = extractvalue { ptr, i32 } %663, 1
  store i32 %665, ptr %13, align 4
  br label %670

666:                                              ; preds = %650
  %667 = landingpad { ptr, i32 }
          cleanup
  %668 = extractvalue { ptr, i32 } %667, 0
  store ptr %668, ptr %12, align 8
  %669 = extractvalue { ptr, i32 } %667, 1
  store i32 %669, ptr %13, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %52) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %50) #8
  br label %670

670:                                              ; preds = %666, %662
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #8
  br label %727

671:                                              ; preds = %651
  %672 = landingpad { ptr, i32 }
          cleanup
  %673 = extractvalue { ptr, i32 } %672, 0
  store ptr %673, ptr %12, align 8
  %674 = extractvalue { ptr, i32 } %672, 1
  store i32 %674, ptr %13, align 4
  call void @__cxa_free_exception(ptr %652) #8
  br label %727

675:                                              ; No predecessors!
  br label %676

676:                                              ; preds = %675
  br label %677

677:                                              ; preds = %676, %639
  %678 = load ptr, ptr %6, align 8, !tbaa !5
  %679 = load ptr, ptr %47, align 8, !tbaa !5
  %680 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_Ref", ptr %679, i32 0, i32 1
  %681 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNKSt10unique_ptrIN3HIR7PatternESt14default_deleteIS1_EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %680) #8
  %682 = load ptr, ptr %49, align 8, !tbaa !5
  %683 = getelementptr inbounds %"struct.HIR::TypeData::Data_Borrow", ptr %682, i32 0, i32 2
  invoke void @_ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef nonnull align 8 dereferenceable(8) %678, ptr noundef nonnull align 8 dereferenceable(212) %681, ptr noundef nonnull align 8 dereferenceable(8) %683)
          to label %684 unwind label %658

684:                                              ; preds = %677
  br label %725

685:                                              ; preds = %636
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #8
  %686 = getelementptr inbounds %struct.Context, ptr %248, i32 0, i32 2
  invoke void @_ZN16HMTypeInferrence11new_ivar_trEN3HIR10InferClassE(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %53, ptr noundef nonnull align 8 dereferenceable(49) %686, i32 noundef 0)
          to label %687 unwind label %701

687:                                              ; preds = %685
  %688 = load ptr, ptr %6, align 8, !tbaa !5
  %689 = load ptr, ptr %47, align 8, !tbaa !5
  %690 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_Ref", ptr %689, i32 0, i32 1
  %691 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNKSt10unique_ptrIN3HIR7PatternESt14default_deleteIS1_EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %690) #8
  invoke void @_ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef nonnull align 8 dereferenceable(8) %688, ptr noundef nonnull align 8 dereferenceable(212) %691, ptr noundef nonnull align 8 dereferenceable(8) %53)
          to label %692 unwind label %705

692:                                              ; preds = %687
  %693 = load ptr, ptr %6, align 8, !tbaa !5
  %694 = load ptr, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #8
  %695 = load ptr, ptr %47, align 8, !tbaa !5
  %696 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_Ref", ptr %695, i32 0, i32 0
  %697 = load i32, ptr %696, align 8, !tbaa !97
  invoke void @_ZN3HIR7TypeRefC2EOS0_(ptr noundef nonnull align 8 dereferenceable(8) %55, ptr noundef nonnull align 8 dereferenceable(8) %53)
          to label %698 unwind label %709

698:                                              ; preds = %692
  invoke void @_ZN3HIR7TypeRef10new_borrowENS_10BorrowTypeES0_(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %54, i32 noundef %697, ptr noundef %55)
          to label %699 unwind label %713

699:                                              ; preds = %698
  invoke void @_ZN7Context12equate_typesERK4SpanRKN3HIR7TypeRefES6_(ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef nonnull align 8 dereferenceable(8) %693, ptr noundef nonnull align 8 dereferenceable(8) %694, ptr noundef nonnull align 8 dereferenceable(8) %54)
          to label %700 unwind label %717

700:                                              ; preds = %699
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %54) #8
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %55) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #8
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %53) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #8
  br label %725

701:                                              ; preds = %685
  %702 = landingpad { ptr, i32 }
          cleanup
  %703 = extractvalue { ptr, i32 } %702, 0
  store ptr %703, ptr %12, align 8
  %704 = extractvalue { ptr, i32 } %702, 1
  store i32 %704, ptr %13, align 4
  br label %724

705:                                              ; preds = %687
  %706 = landingpad { ptr, i32 }
          cleanup
  %707 = extractvalue { ptr, i32 } %706, 0
  store ptr %707, ptr %12, align 8
  %708 = extractvalue { ptr, i32 } %706, 1
  store i32 %708, ptr %13, align 4
  br label %723

709:                                              ; preds = %692
  %710 = landingpad { ptr, i32 }
          cleanup
  %711 = extractvalue { ptr, i32 } %710, 0
  store ptr %711, ptr %12, align 8
  %712 = extractvalue { ptr, i32 } %710, 1
  store i32 %712, ptr %13, align 4
  br label %722

713:                                              ; preds = %698
  %714 = landingpad { ptr, i32 }
          cleanup
  %715 = extractvalue { ptr, i32 } %714, 0
  store ptr %715, ptr %12, align 8
  %716 = extractvalue { ptr, i32 } %714, 1
  store i32 %716, ptr %13, align 4
  br label %721

717:                                              ; preds = %699
  %718 = landingpad { ptr, i32 }
          cleanup
  %719 = extractvalue { ptr, i32 } %718, 0
  store ptr %719, ptr %12, align 8
  %720 = extractvalue { ptr, i32 } %718, 1
  store i32 %720, ptr %13, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %54) #8
  br label %721

721:                                              ; preds = %717, %713
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %55) #8
  br label %722

722:                                              ; preds = %721, %709
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #8
  br label %723

723:                                              ; preds = %722, %705
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %53) #8
  br label %724

724:                                              ; preds = %723, %701
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #8
  br label %727

725:                                              ; preds = %700, %684
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #8
  br label %726

726:                                              ; preds = %725
  store i8 0, ptr %46, align 1, !tbaa !9
  br label %619, !llvm.loop !105

727:                                              ; preds = %724, %671, %670, %658
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #8
  br label %728

728:                                              ; preds = %727, %654
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #8
  br label %729

729:                                              ; preds = %728, %624
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %46) #8
  br label %2622

730:                                              ; preds = %623
  br label %731

731:                                              ; preds = %730
  store i8 0, ptr %46, align 1, !tbaa !9
  br label %611, !llvm.loop !106

732:                                              ; preds = %614
  br label %2618

733:                                              ; preds = %305
  call void @llvm.lifetime.start.p0(i64 1, ptr %56) #8
  store i8 1, ptr %56, align 1, !tbaa !9
  br label %734

734:                                              ; preds = %899, %733
  %735 = load i8, ptr %56, align 1, !tbaa !9, !range !11, !noundef !12
  %736 = trunc i8 %735 to i1
  br i1 %736, label %738, label %737

737:                                              ; preds = %734
  store i32 45, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %56) #8
  br label %900

738:                                              ; preds = %734
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #8
  %739 = load ptr, ptr %21, align 8, !tbaa !5
  %740 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3HIR7Pattern4Data8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(184) %739)
          to label %741 unwind label %747

741:                                              ; preds = %738
  store ptr %740, ptr %57, align 8, !tbaa !5
  br label %742

742:                                              ; preds = %894, %741
  %743 = load ptr, ptr %57, align 8, !tbaa !5
  %744 = load i8, ptr %56, align 1, !tbaa !9, !range !11, !noundef !12
  %745 = trunc i8 %744 to i1
  br i1 %745, label %751, label %746

746:                                              ; preds = %742
  store i32 48, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #8
  br label %898

747:                                              ; preds = %738
  %748 = landingpad { ptr, i32 }
          cleanup
  %749 = extractvalue { ptr, i32 } %748, 0
  store ptr %749, ptr %12, align 8
  %750 = extractvalue { ptr, i32 } %748, 1
  store i32 %750, ptr %13, align 4
  br label %897

751:                                              ; preds = %742
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #8
  %752 = load ptr, ptr %8, align 8, !tbaa !5
  %753 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7Context8get_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef nonnull align 8 dereferenceable(8) %752)
          to label %754 unwind label %781

754:                                              ; preds = %751
  store ptr %753, ptr %58, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #8
  %755 = load ptr, ptr %58, align 8, !tbaa !5
  %756 = invoke noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %755)
          to label %757 unwind label %785

757:                                              ; preds = %754
  %758 = invoke noundef ptr @_ZNK3HIR8TypeData9opt_TupleEv(ptr noundef nonnull align 8 dereferenceable(184) %756)
          to label %759 unwind label %785

759:                                              ; preds = %757
  store ptr %758, ptr %59, align 8, !tbaa !5
  %760 = load ptr, ptr %59, align 8, !tbaa !5
  %761 = icmp ne ptr %760, null
  br i1 %761, label %762, label %838

762:                                              ; preds = %759
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #8
  %763 = load ptr, ptr %59, align 8, !tbaa !5
  store ptr %763, ptr %60, align 8, !tbaa !5
  %764 = load ptr, ptr %57, align 8, !tbaa !5
  %765 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_Tuple", ptr %764, i32 0, i32 0
  %766 = call noundef i64 @_ZNKSt6vectorIN3HIR7PatternESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %765) #8
  %767 = load ptr, ptr %60, align 8, !tbaa !5
  %768 = call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %767) #8
  %769 = icmp ne i64 %766, %768
  br i1 %769, label %770, label %808

770:                                              ; preds = %762
  br label %771

771:                                              ; preds = %770
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #8
  %772 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %61, ptr noundef nonnull align 8 dereferenceable(8) %772)
          to label %773 unwind label %789

773:                                              ; preds = %771
  call void @llvm.lifetime.start.p0(i64 16, ptr %63) #8
  %774 = getelementptr inbounds %class.anon.414, ptr %63, i32 0, i32 0
  %775 = load ptr, ptr %57, align 8, !tbaa !5
  store ptr %775, ptr %774, align 8, !tbaa !5
  %776 = getelementptr inbounds %class.anon.414, ptr %63, i32 0, i32 1
  %777 = load ptr, ptr %58, align 8, !tbaa !5
  store ptr %777, ptr %776, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE3$_3vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %62, ptr noundef nonnull align 8 dereferenceable(16) %63) #8
  invoke void @_ZNK4Span5errorE9ErrorTypeSt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %61, i32 noundef 0, ptr noundef %62)
          to label %778 unwind label %793

778:                                              ; preds = %773
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %63) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %61) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #8
  %779 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %779, ptr noundef @.str.19)
          to label %780 unwind label %798

780:                                              ; preds = %778
  invoke void @__cxa_throw(ptr %779, ptr @_ZTISt13runtime_error, ptr @_ZNSt13runtime_errorD1Ev) #10
          to label %2638 unwind label %802

781:                                              ; preds = %751
  %782 = landingpad { ptr, i32 }
          cleanup
  %783 = extractvalue { ptr, i32 } %782, 0
  store ptr %783, ptr %12, align 8
  %784 = extractvalue { ptr, i32 } %782, 1
  store i32 %784, ptr %13, align 4
  br label %896

785:                                              ; preds = %757, %754
  %786 = landingpad { ptr, i32 }
          cleanup
  %787 = extractvalue { ptr, i32 } %786, 0
  store ptr %787, ptr %12, align 8
  %788 = extractvalue { ptr, i32 } %786, 1
  store i32 %788, ptr %13, align 4
  br label %895

789:                                              ; preds = %771
  %790 = landingpad { ptr, i32 }
          cleanup
  %791 = extractvalue { ptr, i32 } %790, 0
  store ptr %791, ptr %12, align 8
  %792 = extractvalue { ptr, i32 } %790, 1
  store i32 %792, ptr %13, align 4
  br label %797

793:                                              ; preds = %773
  %794 = landingpad { ptr, i32 }
          cleanup
  %795 = extractvalue { ptr, i32 } %794, 0
  store ptr %795, ptr %12, align 8
  %796 = extractvalue { ptr, i32 } %794, 1
  store i32 %796, ptr %13, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %63) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %61) #8
  br label %797

797:                                              ; preds = %793, %789
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #8
  br label %837

798:                                              ; preds = %778
  %799 = landingpad { ptr, i32 }
          cleanup
  %800 = extractvalue { ptr, i32 } %799, 0
  store ptr %800, ptr %12, align 8
  %801 = extractvalue { ptr, i32 } %799, 1
  store i32 %801, ptr %13, align 4
  call void @__cxa_free_exception(ptr %779) #8
  br label %837

802:                                              ; preds = %780
  %803 = landingpad { ptr, i32 }
          cleanup
  %804 = extractvalue { ptr, i32 } %803, 0
  store ptr %804, ptr %12, align 8
  %805 = extractvalue { ptr, i32 } %803, 1
  store i32 %805, ptr %13, align 4
  br label %837

806:                                              ; No predecessors!
  br label %807

807:                                              ; preds = %806
  br label %808

808:                                              ; preds = %807, %762
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #8
  store i32 0, ptr %64, align 4, !tbaa !107
  br label %809

809:                                              ; preds = %829, %808
  %810 = load i32, ptr %64, align 4, !tbaa !107
  %811 = zext i32 %810 to i64
  %812 = load ptr, ptr %57, align 8, !tbaa !5
  %813 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_Tuple", ptr %812, i32 0, i32 0
  %814 = call noundef i64 @_ZNKSt6vectorIN3HIR7PatternESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %813) #8
  %815 = icmp ult i64 %811, %814
  br i1 %815, label %817, label %816

816:                                              ; preds = %809
  store i32 53, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #8
  br label %836

817:                                              ; preds = %809
  %818 = load ptr, ptr %6, align 8, !tbaa !5
  %819 = load ptr, ptr %57, align 8, !tbaa !5
  %820 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_Tuple", ptr %819, i32 0, i32 0
  %821 = load i32, ptr %64, align 4, !tbaa !107
  %822 = zext i32 %821 to i64
  %823 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %820, i64 noundef %822) #8
  %824 = load ptr, ptr %60, align 8, !tbaa !5
  %825 = load i32, ptr %64, align 4, !tbaa !107
  %826 = zext i32 %825 to i64
  %827 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %824, i64 noundef %826) #8
  invoke void @_ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef nonnull align 8 dereferenceable(8) %818, ptr noundef nonnull align 8 dereferenceable(212) %823, ptr noundef nonnull align 8 dereferenceable(8) %827)
          to label %828 unwind label %832

828:                                              ; preds = %817
  br label %829

829:                                              ; preds = %828
  %830 = load i32, ptr %64, align 4, !tbaa !107
  %831 = add i32 %830, 1
  store i32 %831, ptr %64, align 4, !tbaa !107
  br label %809, !llvm.loop !108

832:                                              ; preds = %817
  %833 = landingpad { ptr, i32 }
          cleanup
  %834 = extractvalue { ptr, i32 } %833, 0
  store ptr %834, ptr %12, align 8
  %835 = extractvalue { ptr, i32 } %833, 1
  store i32 %835, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #8
  br label %837

836:                                              ; preds = %816
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #8
  br label %893

837:                                              ; preds = %832, %802, %798, %797
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #8
  br label %895

838:                                              ; preds = %759
  call void @llvm.lifetime.start.p0(i64 24, ptr %65) #8
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %65) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #8
  store i32 0, ptr %66, align 4, !tbaa !107
  br label %839

839:                                              ; preds = %861, %838
  %840 = load i32, ptr %66, align 4, !tbaa !107
  %841 = zext i32 %840 to i64
  %842 = load ptr, ptr %57, align 8, !tbaa !5
  %843 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_Tuple", ptr %842, i32 0, i32 0
  %844 = call noundef i64 @_ZNKSt6vectorIN3HIR7PatternESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %843) #8
  %845 = icmp ult i64 %841, %844
  br i1 %845, label %847, label %846

846:                                              ; preds = %839
  store i32 56, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #8
  br label %878

847:                                              ; preds = %839
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #8
  %848 = getelementptr inbounds %struct.Context, ptr %248, i32 0, i32 2
  invoke void @_ZN16HMTypeInferrence11new_ivar_trEN3HIR10InferClassE(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %67, ptr noundef nonnull align 8 dereferenceable(49) %848, i32 noundef 0)
          to label %849 unwind label %864

849:                                              ; preds = %847
  invoke void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %65, ptr noundef nonnull align 8 dereferenceable(8) %67)
          to label %850 unwind label %868

850:                                              ; preds = %849
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %67) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #8
  %851 = load ptr, ptr %6, align 8, !tbaa !5
  %852 = load ptr, ptr %57, align 8, !tbaa !5
  %853 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_Tuple", ptr %852, i32 0, i32 0
  %854 = load i32, ptr %66, align 4, !tbaa !107
  %855 = zext i32 %854 to i64
  %856 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %853, i64 noundef %855) #8
  %857 = load i32, ptr %66, align 4, !tbaa !107
  %858 = zext i32 %857 to i64
  %859 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %65, i64 noundef %858) #8
  invoke void @_ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef nonnull align 8 dereferenceable(8) %851, ptr noundef nonnull align 8 dereferenceable(212) %856, ptr noundef nonnull align 8 dereferenceable(8) %859)
          to label %860 unwind label %873

860:                                              ; preds = %850
  br label %861

861:                                              ; preds = %860
  %862 = load i32, ptr %66, align 4, !tbaa !107
  %863 = add i32 %862, 1
  store i32 %863, ptr %66, align 4, !tbaa !107
  br label %839, !llvm.loop !109

864:                                              ; preds = %847
  %865 = landingpad { ptr, i32 }
          cleanup
  %866 = extractvalue { ptr, i32 } %865, 0
  store ptr %866, ptr %12, align 8
  %867 = extractvalue { ptr, i32 } %865, 1
  store i32 %867, ptr %13, align 4
  br label %872

868:                                              ; preds = %849
  %869 = landingpad { ptr, i32 }
          cleanup
  %870 = extractvalue { ptr, i32 } %869, 0
  store ptr %870, ptr %12, align 8
  %871 = extractvalue { ptr, i32 } %869, 1
  store i32 %871, ptr %13, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %67) #8
  br label %872

872:                                              ; preds = %868, %864
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #8
  br label %877

873:                                              ; preds = %850
  %874 = landingpad { ptr, i32 }
          cleanup
  %875 = extractvalue { ptr, i32 } %874, 0
  store ptr %875, ptr %12, align 8
  %876 = extractvalue { ptr, i32 } %874, 1
  store i32 %876, ptr %13, align 4
  br label %877

877:                                              ; preds = %873, %872
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #8
  br label %892

878:                                              ; preds = %846
  %879 = load ptr, ptr %6, align 8, !tbaa !5
  %880 = load ptr, ptr %58, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #8
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EEC2EOS3_(ptr noundef nonnull align 8 dereferenceable(24) %69, ptr noundef nonnull align 8 dereferenceable(24) %65) #8
  invoke void @_ZN3HIR7TypeRefC2ESt6vectorIS0_SaIS0_EE(ptr noundef nonnull align 8 dereferenceable(8) %68, ptr noundef %69)
          to label %881 unwind label %883

881:                                              ; preds = %878
  invoke void @_ZN7Context12equate_typesERK4SpanRKN3HIR7TypeRefES6_(ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef nonnull align 8 dereferenceable(8) %879, ptr noundef nonnull align 8 dereferenceable(8) %880, ptr noundef nonnull align 8 dereferenceable(8) %68)
          to label %882 unwind label %887

882:                                              ; preds = %881
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %68) #8
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %69) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #8
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %65) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %65) #8
  br label %893

883:                                              ; preds = %878
  %884 = landingpad { ptr, i32 }
          cleanup
  %885 = extractvalue { ptr, i32 } %884, 0
  store ptr %885, ptr %12, align 8
  %886 = extractvalue { ptr, i32 } %884, 1
  store i32 %886, ptr %13, align 4
  br label %891

887:                                              ; preds = %881
  %888 = landingpad { ptr, i32 }
          cleanup
  %889 = extractvalue { ptr, i32 } %888, 0
  store ptr %889, ptr %12, align 8
  %890 = extractvalue { ptr, i32 } %888, 1
  store i32 %890, ptr %13, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %68) #8
  br label %891

891:                                              ; preds = %887, %883
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %69) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #8
  br label %892

892:                                              ; preds = %891, %877
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %65) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %65) #8
  br label %895

893:                                              ; preds = %882, %836
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #8
  br label %894

894:                                              ; preds = %893
  store i8 0, ptr %56, align 1, !tbaa !9
  br label %742, !llvm.loop !110

895:                                              ; preds = %892, %837, %785
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #8
  br label %896

896:                                              ; preds = %895, %781
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #8
  br label %897

897:                                              ; preds = %896, %747
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %56) #8
  br label %2622

898:                                              ; preds = %746
  br label %899

899:                                              ; preds = %898
  store i8 0, ptr %56, align 1, !tbaa !9
  br label %734, !llvm.loop !111

900:                                              ; preds = %737
  br label %2618

901:                                              ; preds = %305
  call void @llvm.lifetime.start.p0(i64 1, ptr %70) #8
  store i8 1, ptr %70, align 1, !tbaa !9
  br label %902

902:                                              ; preds = %1199, %901
  %903 = load i8, ptr %70, align 1, !tbaa !9, !range !11, !noundef !12
  %904 = trunc i8 %903 to i1
  br i1 %904, label %906, label %905

905:                                              ; preds = %902
  store i32 59, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %70) #8
  br label %1200

906:                                              ; preds = %902
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #8
  %907 = load ptr, ptr %21, align 8, !tbaa !5
  %908 = invoke noundef nonnull align 8 dereferenceable(52) ptr @_ZN3HIR7Pattern4Data13as_SplitTupleEv(ptr noundef nonnull align 8 dereferenceable(184) %907)
          to label %909 unwind label %915

909:                                              ; preds = %906
  store ptr %908, ptr %71, align 8, !tbaa !5
  br label %910

910:                                              ; preds = %1194, %909
  %911 = load ptr, ptr %71, align 8, !tbaa !5
  %912 = load i8, ptr %70, align 1, !tbaa !9, !range !11, !noundef !12
  %913 = trunc i8 %912 to i1
  br i1 %913, label %919, label %914

914:                                              ; preds = %910
  store i32 62, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #8
  br label %1198

915:                                              ; preds = %906
  %916 = landingpad { ptr, i32 }
          cleanup
  %917 = extractvalue { ptr, i32 } %916, 0
  store ptr %917, ptr %12, align 8
  %918 = extractvalue { ptr, i32 } %916, 1
  store i32 %918, ptr %13, align 4
  br label %1197

919:                                              ; preds = %910
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #8
  %920 = load ptr, ptr %8, align 8, !tbaa !5
  %921 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7Context8get_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef nonnull align 8 dereferenceable(8) %920)
          to label %922 unwind label %949

922:                                              ; preds = %919
  store ptr %921, ptr %72, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #8
  %923 = load ptr, ptr %72, align 8, !tbaa !5
  %924 = invoke noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %923)
          to label %925 unwind label %953

925:                                              ; preds = %922
  %926 = invoke noundef ptr @_ZNK3HIR8TypeData9opt_TupleEv(ptr noundef nonnull align 8 dereferenceable(184) %924)
          to label %927 unwind label %953

927:                                              ; preds = %925
  store ptr %926, ptr %73, align 8, !tbaa !5
  %928 = load ptr, ptr %73, align 8, !tbaa !5
  %929 = icmp ne ptr %928, null
  br i1 %929, label %930, label %1047

930:                                              ; preds = %927
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #8
  %931 = load ptr, ptr %73, align 8, !tbaa !5
  store ptr %931, ptr %74, align 8, !tbaa !5
  br label %932

932:                                              ; preds = %930
  %933 = load ptr, ptr %71, align 8, !tbaa !5
  %934 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_SplitTuple", ptr %933, i32 0, i32 0
  %935 = call noundef i64 @_ZNKSt6vectorIN3HIR7PatternESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %934) #8
  %936 = load ptr, ptr %71, align 8, !tbaa !5
  %937 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_SplitTuple", ptr %936, i32 0, i32 1
  %938 = call noundef i64 @_ZNKSt6vectorIN3HIR7PatternESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %937) #8
  %939 = add i64 %935, %938
  %940 = load ptr, ptr %74, align 8, !tbaa !5
  %941 = call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %940) #8
  %942 = icmp ule i64 %939, %941
  br i1 %942, label %974, label %943

943:                                              ; preds = %932
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #8
  %944 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %75, ptr noundef nonnull align 8 dereferenceable(8) %944)
          to label %945 unwind label %957

945:                                              ; preds = %943
  call void @llvm.lifetime.start.p0(i64 1, ptr %77) #8
  call void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE3$_4vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %76, ptr noundef nonnull align 1 dereferenceable(1) %77) #8
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %75, ptr noundef %76)
          to label %946 unwind label %961

946:                                              ; preds = %945
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %76) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %77) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %75) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #8
  %947 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %947, ptr noundef @.str.16)
          to label %948 unwind label %966

948:                                              ; preds = %946
  invoke void @__cxa_throw(ptr %947, ptr @_ZTISt13runtime_error, ptr @_ZNSt13runtime_errorD1Ev) #10
          to label %2638 unwind label %970

949:                                              ; preds = %919
  %950 = landingpad { ptr, i32 }
          cleanup
  %951 = extractvalue { ptr, i32 } %950, 0
  store ptr %951, ptr %12, align 8
  %952 = extractvalue { ptr, i32 } %950, 1
  store i32 %952, ptr %13, align 4
  br label %1196

953:                                              ; preds = %1059, %1050, %1047, %925, %922
  %954 = landingpad { ptr, i32 }
          cleanup
  %955 = extractvalue { ptr, i32 } %954, 0
  store ptr %955, ptr %12, align 8
  %956 = extractvalue { ptr, i32 } %954, 1
  store i32 %956, ptr %13, align 4
  br label %1195

957:                                              ; preds = %943
  %958 = landingpad { ptr, i32 }
          cleanup
  %959 = extractvalue { ptr, i32 } %958, 0
  store ptr %959, ptr %12, align 8
  %960 = extractvalue { ptr, i32 } %958, 1
  store i32 %960, ptr %13, align 4
  br label %965

961:                                              ; preds = %945
  %962 = landingpad { ptr, i32 }
          cleanup
  %963 = extractvalue { ptr, i32 } %962, 0
  store ptr %963, ptr %12, align 8
  %964 = extractvalue { ptr, i32 } %962, 1
  store i32 %964, ptr %13, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %76) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %77) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %75) #8
  br label %965

965:                                              ; preds = %961, %957
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #8
  br label %1046

966:                                              ; preds = %946
  %967 = landingpad { ptr, i32 }
          cleanup
  %968 = extractvalue { ptr, i32 } %967, 0
  store ptr %968, ptr %12, align 8
  %969 = extractvalue { ptr, i32 } %967, 1
  store i32 %969, ptr %13, align 4
  call void @__cxa_free_exception(ptr %947) #8
  br label %1046

970:                                              ; preds = %948
  %971 = landingpad { ptr, i32 }
          cleanup
  %972 = extractvalue { ptr, i32 } %971, 0
  store ptr %972, ptr %12, align 8
  %973 = extractvalue { ptr, i32 } %971, 1
  store i32 %973, ptr %13, align 4
  br label %1046

974:                                              ; preds = %932
  br label %975

975:                                              ; preds = %974
  br label %976

976:                                              ; preds = %975
  call void @llvm.lifetime.start.p0(i64 4, ptr %78) #8
  store i32 0, ptr %78, align 4, !tbaa !107
  call void @llvm.lifetime.start.p0(i64 8, ptr %79) #8
  %977 = load ptr, ptr %71, align 8, !tbaa !5
  %978 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_SplitTuple", ptr %977, i32 0, i32 0
  store ptr %978, ptr %79, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %80) #8
  %979 = load ptr, ptr %79, align 8, !tbaa !5
  %980 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %979) #8
  %981 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.417", ptr %80, i32 0, i32 0
  store ptr %980, ptr %981, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %81) #8
  %982 = load ptr, ptr %79, align 8, !tbaa !5
  %983 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %982) #8
  %984 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.417", ptr %81, i32 0, i32 0
  store ptr %983, ptr %984, align 8
  br label %985

985:                                              ; preds = %998, %976
  %986 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %80, ptr noundef nonnull align 8 dereferenceable(8) %81) #8
  br i1 %986, label %988, label %987

987:                                              ; preds = %985
  store i32 67, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #8
  br label %1004

988:                                              ; preds = %985
  call void @llvm.lifetime.start.p0(i64 8, ptr %82) #8
  %989 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %80) #8
  store ptr %989, ptr %82, align 8, !tbaa !5
  %990 = load ptr, ptr %6, align 8, !tbaa !5
  %991 = load ptr, ptr %82, align 8, !tbaa !5
  %992 = load ptr, ptr %74, align 8, !tbaa !5
  %993 = load i32, ptr %78, align 4, !tbaa !107
  %994 = add i32 %993, 1
  store i32 %994, ptr %78, align 4, !tbaa !107
  %995 = zext i32 %993 to i64
  %996 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %992, i64 noundef %995) #8
  invoke void @_ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef nonnull align 8 dereferenceable(8) %990, ptr noundef nonnull align 8 dereferenceable(212) %991, ptr noundef nonnull align 8 dereferenceable(8) %996)
          to label %997 unwind label %1000

997:                                              ; preds = %988
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #8
  br label %998

998:                                              ; preds = %997
  %999 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %80) #8
  br label %985

1000:                                             ; preds = %988
  %1001 = landingpad { ptr, i32 }
          cleanup
  %1002 = extractvalue { ptr, i32 } %1001, 0
  store ptr %1002, ptr %12, align 8
  %1003 = extractvalue { ptr, i32 } %1001, 1
  store i32 %1003, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #8
  br label %1045

1004:                                             ; preds = %987
  %1005 = load ptr, ptr %74, align 8, !tbaa !5
  %1006 = call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1005) #8
  %1007 = load ptr, ptr %71, align 8, !tbaa !5
  %1008 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_SplitTuple", ptr %1007, i32 0, i32 1
  %1009 = call noundef i64 @_ZNKSt6vectorIN3HIR7PatternESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1008) #8
  %1010 = sub i64 %1006, %1009
  %1011 = trunc i64 %1010 to i32
  store i32 %1011, ptr %78, align 4, !tbaa !107
  call void @llvm.lifetime.start.p0(i64 8, ptr %83) #8
  %1012 = load ptr, ptr %71, align 8, !tbaa !5
  %1013 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_SplitTuple", ptr %1012, i32 0, i32 1
  store ptr %1013, ptr %83, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %84) #8
  %1014 = load ptr, ptr %83, align 8, !tbaa !5
  %1015 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1014) #8
  %1016 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.417", ptr %84, i32 0, i32 0
  store ptr %1015, ptr %1016, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %85) #8
  %1017 = load ptr, ptr %83, align 8, !tbaa !5
  %1018 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1017) #8
  %1019 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.417", ptr %85, i32 0, i32 0
  store ptr %1018, ptr %1019, align 8
  br label %1020

1020:                                             ; preds = %1033, %1004
  %1021 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %84, ptr noundef nonnull align 8 dereferenceable(8) %85) #8
  br i1 %1021, label %1023, label %1022

1022:                                             ; preds = %1020
  store i32 69, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #8
  br label %1039

1023:                                             ; preds = %1020
  call void @llvm.lifetime.start.p0(i64 8, ptr %86) #8
  %1024 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %84) #8
  store ptr %1024, ptr %86, align 8, !tbaa !5
  %1025 = load ptr, ptr %6, align 8, !tbaa !5
  %1026 = load ptr, ptr %86, align 8, !tbaa !5
  %1027 = load ptr, ptr %74, align 8, !tbaa !5
  %1028 = load i32, ptr %78, align 4, !tbaa !107
  %1029 = add i32 %1028, 1
  store i32 %1029, ptr %78, align 4, !tbaa !107
  %1030 = zext i32 %1028 to i64
  %1031 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1027, i64 noundef %1030) #8
  invoke void @_ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef nonnull align 8 dereferenceable(8) %1025, ptr noundef nonnull align 8 dereferenceable(212) %1026, ptr noundef nonnull align 8 dereferenceable(8) %1031)
          to label %1032 unwind label %1035

1032:                                             ; preds = %1023
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #8
  br label %1033

1033:                                             ; preds = %1032
  %1034 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %84) #8
  br label %1020

1035:                                             ; preds = %1023
  %1036 = landingpad { ptr, i32 }
          cleanup
  %1037 = extractvalue { ptr, i32 } %1036, 0
  store ptr %1037, ptr %12, align 8
  %1038 = extractvalue { ptr, i32 } %1036, 1
  store i32 %1038, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #8
  br label %1045

1039:                                             ; preds = %1022
  %1040 = load ptr, ptr %74, align 8, !tbaa !5
  %1041 = call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1040) #8
  %1042 = trunc i64 %1041 to i32
  %1043 = load ptr, ptr %71, align 8, !tbaa !5
  %1044 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_SplitTuple", ptr %1043, i32 0, i32 2
  store i32 %1042, ptr %1044, align 8, !tbaa !112
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #8
  br label %1193

1045:                                             ; preds = %1035, %1000
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #8
  br label %1046

1046:                                             ; preds = %1045, %970, %966, %965
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #8
  br label %1195

1047:                                             ; preds = %927
  %1048 = load ptr, ptr %72, align 8, !tbaa !5
  %1049 = invoke noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %1048)
          to label %1050 unwind label %953

1050:                                             ; preds = %1047
  %1051 = invoke noundef zeroext i1 @_ZNK3HIR8TypeData8is_InferEv(ptr noundef nonnull align 8 dereferenceable(184) %1049)
          to label %1052 unwind label %953

1052:                                             ; preds = %1050
  br i1 %1051, label %1075, label %1053

1053:                                             ; preds = %1052
  br label %1054

1054:                                             ; preds = %1053
  call void @llvm.lifetime.start.p0(i64 8, ptr %87) #8
  %1055 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %87, ptr noundef nonnull align 8 dereferenceable(8) %1055)
          to label %1056 unwind label %1060

1056:                                             ; preds = %1054
  call void @llvm.lifetime.start.p0(i64 1, ptr %89) #8
  call void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE3$_5vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %88, ptr noundef nonnull align 1 dereferenceable(1) %89) #8
  invoke void @_ZNK4Span5errorE9ErrorTypeSt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %87, i32 noundef 0, ptr noundef %88)
          to label %1057 unwind label %1064

1057:                                             ; preds = %1056
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %88) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %89) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %87) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #8
  %1058 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1058, ptr noundef @.str.19)
          to label %1059 unwind label %1069

1059:                                             ; preds = %1057
  invoke void @__cxa_throw(ptr %1058, ptr @_ZTISt13runtime_error, ptr @_ZNSt13runtime_errorD1Ev) #10
          to label %2638 unwind label %953

1060:                                             ; preds = %1054
  %1061 = landingpad { ptr, i32 }
          cleanup
  %1062 = extractvalue { ptr, i32 } %1061, 0
  store ptr %1062, ptr %12, align 8
  %1063 = extractvalue { ptr, i32 } %1061, 1
  store i32 %1063, ptr %13, align 4
  br label %1068

1064:                                             ; preds = %1056
  %1065 = landingpad { ptr, i32 }
          cleanup
  %1066 = extractvalue { ptr, i32 } %1065, 0
  store ptr %1066, ptr %12, align 8
  %1067 = extractvalue { ptr, i32 } %1065, 1
  store i32 %1067, ptr %13, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %88) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %89) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %87) #8
  br label %1068

1068:                                             ; preds = %1064, %1060
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #8
  br label %1195

1069:                                             ; preds = %1057
  %1070 = landingpad { ptr, i32 }
          cleanup
  %1071 = extractvalue { ptr, i32 } %1070, 0
  store ptr %1071, ptr %12, align 8
  %1072 = extractvalue { ptr, i32 } %1070, 1
  store i32 %1072, ptr %13, align 4
  call void @__cxa_free_exception(ptr %1058) #8
  br label %1195

1073:                                             ; No predecessors!
  br label %1074

1074:                                             ; preds = %1073
  br label %1075

1075:                                             ; preds = %1074, %1052
  call void @llvm.lifetime.start.p0(i64 24, ptr %90) #8
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %90) #8
  %1076 = load ptr, ptr %71, align 8, !tbaa !5
  %1077 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_SplitTuple", ptr %1076, i32 0, i32 0
  %1078 = call noundef i64 @_ZNKSt6vectorIN3HIR7PatternESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1077) #8
  invoke void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24) %90, i64 noundef %1078)
          to label %1079 unwind label %1091

1079:                                             ; preds = %1075
  call void @llvm.lifetime.start.p0(i64 8, ptr %91) #8
  %1080 = load ptr, ptr %71, align 8, !tbaa !5
  %1081 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_SplitTuple", ptr %1080, i32 0, i32 0
  store ptr %1081, ptr %91, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %92) #8
  %1082 = load ptr, ptr %91, align 8, !tbaa !5
  %1083 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1082) #8
  %1084 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.417", ptr %92, i32 0, i32 0
  store ptr %1083, ptr %1084, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %93) #8
  %1085 = load ptr, ptr %91, align 8, !tbaa !5
  %1086 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1085) #8
  %1087 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.417", ptr %93, i32 0, i32 0
  store ptr %1086, ptr %1087, align 8
  br label %1088

1088:                                             ; preds = %1104, %1079
  %1089 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %92, ptr noundef nonnull align 8 dereferenceable(8) %93) #8
  br i1 %1089, label %1095, label %1090

1090:                                             ; preds = %1088
  store i32 73, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #8
  br label %1120

1091:                                             ; preds = %1075
  %1092 = landingpad { ptr, i32 }
          cleanup
  %1093 = extractvalue { ptr, i32 } %1092, 0
  store ptr %1093, ptr %12, align 8
  %1094 = extractvalue { ptr, i32 } %1092, 1
  store i32 %1094, ptr %13, align 4
  br label %1192

1095:                                             ; preds = %1088
  call void @llvm.lifetime.start.p0(i64 8, ptr %94) #8
  %1096 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %92) #8
  store ptr %1096, ptr %94, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %95) #8
  %1097 = getelementptr inbounds %struct.Context, ptr %248, i32 0, i32 2
  invoke void @_ZN16HMTypeInferrence11new_ivar_trEN3HIR10InferClassE(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %95, ptr noundef nonnull align 8 dereferenceable(49) %1097, i32 noundef 0)
          to label %1098 unwind label %1106

1098:                                             ; preds = %1095
  invoke void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %90, ptr noundef nonnull align 8 dereferenceable(8) %95)
          to label %1099 unwind label %1110

1099:                                             ; preds = %1098
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %95) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %95) #8
  %1100 = load ptr, ptr %6, align 8, !tbaa !5
  %1101 = load ptr, ptr %94, align 8, !tbaa !5
  %1102 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %90) #8
  invoke void @_ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef nonnull align 8 dereferenceable(8) %1100, ptr noundef nonnull align 8 dereferenceable(212) %1101, ptr noundef nonnull align 8 dereferenceable(8) %1102)
          to label %1103 unwind label %1115

1103:                                             ; preds = %1099
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #8
  br label %1104

1104:                                             ; preds = %1103
  %1105 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %92) #8
  br label %1088

1106:                                             ; preds = %1095
  %1107 = landingpad { ptr, i32 }
          cleanup
  %1108 = extractvalue { ptr, i32 } %1107, 0
  store ptr %1108, ptr %12, align 8
  %1109 = extractvalue { ptr, i32 } %1107, 1
  store i32 %1109, ptr %13, align 4
  br label %1114

1110:                                             ; preds = %1098
  %1111 = landingpad { ptr, i32 }
          cleanup
  %1112 = extractvalue { ptr, i32 } %1111, 0
  store ptr %1112, ptr %12, align 8
  %1113 = extractvalue { ptr, i32 } %1111, 1
  store i32 %1113, ptr %13, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %95) #8
  br label %1114

1114:                                             ; preds = %1110, %1106
  call void @llvm.lifetime.end.p0(i64 8, ptr %95) #8
  br label %1119

1115:                                             ; preds = %1099
  %1116 = landingpad { ptr, i32 }
          cleanup
  %1117 = extractvalue { ptr, i32 } %1116, 0
  store ptr %1117, ptr %12, align 8
  %1118 = extractvalue { ptr, i32 } %1116, 1
  store i32 %1118, ptr %13, align 4
  br label %1119

1119:                                             ; preds = %1115, %1114
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #8
  br label %1192

1120:                                             ; preds = %1090
  call void @llvm.lifetime.start.p0(i64 24, ptr %96) #8
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %96) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %97) #8
  %1121 = load ptr, ptr %71, align 8, !tbaa !5
  %1122 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_SplitTuple", ptr %1121, i32 0, i32 1
  store ptr %1122, ptr %97, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %98) #8
  %1123 = load ptr, ptr %97, align 8, !tbaa !5
  %1124 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1123) #8
  %1125 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.417", ptr %98, i32 0, i32 0
  store ptr %1124, ptr %1125, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %99) #8
  %1126 = load ptr, ptr %97, align 8, !tbaa !5
  %1127 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1126) #8
  %1128 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.417", ptr %99, i32 0, i32 0
  store ptr %1127, ptr %1128, align 8
  br label %1129

1129:                                             ; preds = %1141, %1120
  %1130 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %98, ptr noundef nonnull align 8 dereferenceable(8) %99) #8
  br i1 %1130, label %1132, label %1131

1131:                                             ; preds = %1129
  store i32 75, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %99) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %97) #8
  br label %1157

1132:                                             ; preds = %1129
  call void @llvm.lifetime.start.p0(i64 8, ptr %100) #8
  %1133 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %98) #8
  store ptr %1133, ptr %100, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %101) #8
  %1134 = getelementptr inbounds %struct.Context, ptr %248, i32 0, i32 2
  invoke void @_ZN16HMTypeInferrence11new_ivar_trEN3HIR10InferClassE(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %101, ptr noundef nonnull align 8 dereferenceable(49) %1134, i32 noundef 0)
          to label %1135 unwind label %1143

1135:                                             ; preds = %1132
  invoke void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %96, ptr noundef nonnull align 8 dereferenceable(8) %101)
          to label %1136 unwind label %1147

1136:                                             ; preds = %1135
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %101) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #8
  %1137 = load ptr, ptr %6, align 8, !tbaa !5
  %1138 = load ptr, ptr %100, align 8, !tbaa !5
  %1139 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %96) #8
  invoke void @_ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef nonnull align 8 dereferenceable(8) %1137, ptr noundef nonnull align 8 dereferenceable(212) %1138, ptr noundef nonnull align 8 dereferenceable(8) %1139)
          to label %1140 unwind label %1152

1140:                                             ; preds = %1136
  call void @llvm.lifetime.end.p0(i64 8, ptr %100) #8
  br label %1141

1141:                                             ; preds = %1140
  %1142 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %98) #8
  br label %1129

1143:                                             ; preds = %1132
  %1144 = landingpad { ptr, i32 }
          cleanup
  %1145 = extractvalue { ptr, i32 } %1144, 0
  store ptr %1145, ptr %12, align 8
  %1146 = extractvalue { ptr, i32 } %1144, 1
  store i32 %1146, ptr %13, align 4
  br label %1151

1147:                                             ; preds = %1135
  %1148 = landingpad { ptr, i32 }
          cleanup
  %1149 = extractvalue { ptr, i32 } %1148, 0
  store ptr %1149, ptr %12, align 8
  %1150 = extractvalue { ptr, i32 } %1148, 1
  store i32 %1150, ptr %13, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %101) #8
  br label %1151

1151:                                             ; preds = %1147, %1143
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #8
  br label %1156

1152:                                             ; preds = %1136
  %1153 = landingpad { ptr, i32 }
          cleanup
  %1154 = extractvalue { ptr, i32 } %1153, 0
  store ptr %1154, ptr %12, align 8
  %1155 = extractvalue { ptr, i32 } %1153, 1
  store i32 %1155, ptr %13, align 4
  br label %1156

1156:                                             ; preds = %1152, %1151
  call void @llvm.lifetime.end.p0(i64 8, ptr %100) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %99) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %97) #8
  br label %1191

1157:                                             ; preds = %1131
  call void @llvm.lifetime.start.p0(i64 8, ptr %103) #8
  call void @llvm.lifetime.start.p0(i64 80, ptr %104) #8
  %1158 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %105, ptr noundef nonnull align 8 dereferenceable(8) %1158)
          to label %1159 unwind label %1167

1159:                                             ; preds = %1157
  %1160 = load ptr, ptr %72, align 8, !tbaa !5
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %106, ptr noundef nonnull align 8 dereferenceable(8) %1160)
          to label %1161 unwind label %1171

1161:                                             ; preds = %1159
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EEC2EOS3_(ptr noundef nonnull align 8 dereferenceable(24) %107, ptr noundef nonnull align 8 dereferenceable(24) %90) #8
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EEC2EOS3_(ptr noundef nonnull align 8 dereferenceable(24) %108, ptr noundef nonnull align 8 dereferenceable(24) %96) #8
  %1162 = load ptr, ptr %71, align 8, !tbaa !5
  %1163 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_SplitTuple", ptr %1162, i32 0, i32 2
  invoke void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN20SplitTuplePatRevisitC2ES0_S6_St6vectorIS6_SaIS6_EESC_Rj(ptr noundef nonnull align 8 dereferenceable(80) %104, ptr noundef %105, ptr noundef %106, ptr noundef %107, ptr noundef %108, ptr noundef nonnull align 4 dereferenceable(4) %1163)
          to label %1164 unwind label %1175

1164:                                             ; preds = %1161
  invoke void @_Z15make_unique_ptrIZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS4_7TypeRefEE20SplitTuplePatRevisitESt10unique_ptrIT_St14default_deleteISC_EEOSC_(ptr dead_on_unwind writable sret(%"class.std::unique_ptr.420") align 8 %103, ptr noundef nonnull align 8 dereferenceable(80) %104)
          to label %1165 unwind label %1179

1165:                                             ; preds = %1164
  call void @_ZNSt10unique_ptrIN7Context9RevisitorESt14default_deleteIS1_EEC2IZNS0_27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS9_7TypeRefEE20SplitTuplePatRevisitS2_ISF_EvEEOS_IT_T0_E(ptr noundef nonnull align 8 dereferenceable(8) %102, ptr noundef nonnull align 8 dereferenceable(8) %103) #8
  invoke void @_ZN7Context15add_revisit_advESt10unique_ptrINS_9RevisitorESt14default_deleteIS1_EE(ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef %102)
          to label %1166 unwind label %1183

1166:                                             ; preds = %1165
  call void @_ZNSt10unique_ptrIN7Context9RevisitorESt14default_deleteIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %102) #8
  call void @_ZNSt10unique_ptrIZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS4_7TypeRefEE20SplitTuplePatRevisitSt14default_deleteISA_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %103) #8
  call void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN20SplitTuplePatRevisitD2Ev(ptr noundef nonnull align 8 dereferenceable(80) %104) #8
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %108) #8
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %107) #8
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %106) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %105) #8
  call void @llvm.lifetime.end.p0(i64 80, ptr %104) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %103) #8
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %96) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %96) #8
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %90) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %90) #8
  br label %1193

1167:                                             ; preds = %1157
  %1168 = landingpad { ptr, i32 }
          cleanup
  %1169 = extractvalue { ptr, i32 } %1168, 0
  store ptr %1169, ptr %12, align 8
  %1170 = extractvalue { ptr, i32 } %1168, 1
  store i32 %1170, ptr %13, align 4
  br label %1190

1171:                                             ; preds = %1159
  %1172 = landingpad { ptr, i32 }
          cleanup
  %1173 = extractvalue { ptr, i32 } %1172, 0
  store ptr %1173, ptr %12, align 8
  %1174 = extractvalue { ptr, i32 } %1172, 1
  store i32 %1174, ptr %13, align 4
  br label %1189

1175:                                             ; preds = %1161
  %1176 = landingpad { ptr, i32 }
          cleanup
  %1177 = extractvalue { ptr, i32 } %1176, 0
  store ptr %1177, ptr %12, align 8
  %1178 = extractvalue { ptr, i32 } %1176, 1
  store i32 %1178, ptr %13, align 4
  br label %1188

1179:                                             ; preds = %1164
  %1180 = landingpad { ptr, i32 }
          cleanup
  %1181 = extractvalue { ptr, i32 } %1180, 0
  store ptr %1181, ptr %12, align 8
  %1182 = extractvalue { ptr, i32 } %1180, 1
  store i32 %1182, ptr %13, align 4
  br label %1187

1183:                                             ; preds = %1165
  %1184 = landingpad { ptr, i32 }
          cleanup
  %1185 = extractvalue { ptr, i32 } %1184, 0
  store ptr %1185, ptr %12, align 8
  %1186 = extractvalue { ptr, i32 } %1184, 1
  store i32 %1186, ptr %13, align 4
  call void @_ZNSt10unique_ptrIN7Context9RevisitorESt14default_deleteIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %102) #8
  call void @_ZNSt10unique_ptrIZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS4_7TypeRefEE20SplitTuplePatRevisitSt14default_deleteISA_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %103) #8
  br label %1187

1187:                                             ; preds = %1183, %1179
  call void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN20SplitTuplePatRevisitD2Ev(ptr noundef nonnull align 8 dereferenceable(80) %104) #8
  br label %1188

1188:                                             ; preds = %1187, %1175
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %108) #8
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %107) #8
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %106) #8
  br label %1189

1189:                                             ; preds = %1188, %1171
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %105) #8
  br label %1190

1190:                                             ; preds = %1189, %1167
  call void @llvm.lifetime.end.p0(i64 80, ptr %104) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %103) #8
  br label %1191

1191:                                             ; preds = %1190, %1156
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %96) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %96) #8
  br label %1192

1192:                                             ; preds = %1191, %1119, %1091
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %90) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %90) #8
  br label %1195

1193:                                             ; preds = %1166, %1039
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #8
  br label %1194

1194:                                             ; preds = %1193
  store i8 0, ptr %70, align 1, !tbaa !9
  br label %910, !llvm.loop !118

1195:                                             ; preds = %1192, %1069, %1068, %1046, %953
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #8
  br label %1196

1196:                                             ; preds = %1195, %949
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #8
  br label %1197

1197:                                             ; preds = %1196, %915
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %70) #8
  br label %2622

1198:                                             ; preds = %914
  br label %1199

1199:                                             ; preds = %1198
  store i8 0, ptr %70, align 1, !tbaa !9
  br label %902, !llvm.loop !119

1200:                                             ; preds = %905
  br label %2618

1201:                                             ; preds = %305
  call void @llvm.lifetime.start.p0(i64 1, ptr %109) #8
  store i8 1, ptr %109, align 1, !tbaa !9
  br label %1202

1202:                                             ; preds = %1476, %1201
  %1203 = load i8, ptr %109, align 1, !tbaa !9, !range !11, !noundef !12
  %1204 = trunc i8 %1203 to i1
  br i1 %1204, label %1206, label %1205

1205:                                             ; preds = %1202
  store i32 77, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %109) #8
  br label %1477

1206:                                             ; preds = %1202
  call void @llvm.lifetime.start.p0(i64 8, ptr %110) #8
  %1207 = load ptr, ptr %21, align 8, !tbaa !5
  %1208 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3HIR7Pattern4Data8as_SliceEv(ptr noundef nonnull align 8 dereferenceable(184) %1207)
          to label %1209 unwind label %1215

1209:                                             ; preds = %1206
  store ptr %1208, ptr %110, align 8, !tbaa !5
  br label %1210

1210:                                             ; preds = %1472, %1209
  %1211 = load ptr, ptr %110, align 8, !tbaa !5
  %1212 = load i8, ptr %109, align 1, !tbaa !9, !range !11, !noundef !12
  %1213 = trunc i8 %1212 to i1
  br i1 %1213, label %1219, label %1214

1214:                                             ; preds = %1210
  store i32 80, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %110) #8
  br label %1475

1215:                                             ; preds = %1206
  %1216 = landingpad { ptr, i32 }
          cleanup
  %1217 = extractvalue { ptr, i32 } %1216, 0
  store ptr %1217, ptr %12, align 8
  %1218 = extractvalue { ptr, i32 } %1216, 1
  store i32 %1218, ptr %13, align 4
  br label %1474

1219:                                             ; preds = %1210
  call void @llvm.lifetime.start.p0(i64 8, ptr %111) #8
  %1220 = load ptr, ptr %8, align 8, !tbaa !5
  %1221 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7Context8get_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef nonnull align 8 dereferenceable(8) %1220)
          to label %1222 unwind label %1227

1222:                                             ; preds = %1219
  store ptr %1221, ptr %111, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %112) #8
  store i8 1, ptr %112, align 1, !tbaa !9
  br label %1223

1223:                                             ; preds = %1470, %1222
  %1224 = load i8, ptr %112, align 1, !tbaa !9, !range !11, !noundef !12
  %1225 = trunc i8 %1224 to i1
  br i1 %1225, label %1231, label %1226

1226:                                             ; preds = %1223
  store i32 83, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %112) #8
  br label %1471

1227:                                             ; preds = %1219
  %1228 = landingpad { ptr, i32 }
          cleanup
  %1229 = extractvalue { ptr, i32 } %1228, 0
  store ptr %1229, ptr %12, align 8
  %1230 = extractvalue { ptr, i32 } %1228, 1
  store i32 %1230, ptr %13, align 4
  br label %1473

1231:                                             ; preds = %1223
  call void @llvm.lifetime.start.p0(i64 8, ptr %113) #8
  %1232 = load ptr, ptr %111, align 8, !tbaa !5
  %1233 = invoke noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %1232)
          to label %1234 unwind label %1239

1234:                                             ; preds = %1231
  store ptr %1233, ptr %113, align 8, !tbaa !5
  br label %1235

1235:                                             ; preds = %1467, %1234
  %1236 = load i8, ptr %112, align 1, !tbaa !9, !range !11, !noundef !12
  %1237 = trunc i8 %1236 to i1
  br i1 %1237, label %1243, label %1238

1238:                                             ; preds = %1235
  store i32 86, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %113) #8
  br label %1469

1239:                                             ; preds = %1256, %1243, %1231
  %1240 = landingpad { ptr, i32 }
          cleanup
  %1241 = extractvalue { ptr, i32 } %1240, 0
  store ptr %1241, ptr %12, align 8
  %1242 = extractvalue { ptr, i32 } %1240, 1
  store i32 %1242, ptr %13, align 4
  br label %1468

1243:                                             ; preds = %1235
  %1244 = load ptr, ptr %113, align 8, !tbaa !5
  %1245 = invoke noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %1244)
          to label %1246 unwind label %1239

1246:                                             ; preds = %1243
  switch i32 %1245, label %1248 [
    i32 0, label %1247
    i32 9, label %1272
    i32 8, label %1321
    i32 1, label %1370
  ]

1247:                                             ; preds = %1246
  call void @__assert_fail(ptr noundef @.str.20, ptr noundef @.str.21, i32 noundef 3413, ptr noundef @__PRETTY_FUNCTION__._ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE) #9
  unreachable

1248:                                             ; preds = %1246
  br label %1249

1249:                                             ; preds = %1248
  call void @llvm.lifetime.start.p0(i64 8, ptr %114) #8
  %1250 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %114, ptr noundef nonnull align 8 dereferenceable(8) %1250)
          to label %1251 unwind label %1257

1251:                                             ; preds = %1249
  call void @llvm.lifetime.start.p0(i64 8, ptr %116) #8
  %1252 = getelementptr inbounds %class.anon.428, ptr %116, i32 0, i32 0
  %1253 = load ptr, ptr %111, align 8, !tbaa !5
  store ptr %1253, ptr %1252, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE3$_6vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %115, ptr noundef nonnull align 8 dereferenceable(8) %116) #8
  invoke void @_ZNK4Span5errorE9ErrorTypeSt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %114, i32 noundef 0, ptr noundef %115)
          to label %1254 unwind label %1261

1254:                                             ; preds = %1251
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %115) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %116) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %114) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %114) #8
  %1255 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1255, ptr noundef @.str.19)
          to label %1256 unwind label %1266

1256:                                             ; preds = %1254
  invoke void @__cxa_throw(ptr %1255, ptr @_ZTISt13runtime_error, ptr @_ZNSt13runtime_errorD1Ev) #10
          to label %2638 unwind label %1239

1257:                                             ; preds = %1249
  %1258 = landingpad { ptr, i32 }
          cleanup
  %1259 = extractvalue { ptr, i32 } %1258, 0
  store ptr %1259, ptr %12, align 8
  %1260 = extractvalue { ptr, i32 } %1258, 1
  store i32 %1260, ptr %13, align 4
  br label %1265

1261:                                             ; preds = %1251
  %1262 = landingpad { ptr, i32 }
          cleanup
  %1263 = extractvalue { ptr, i32 } %1262, 0
  store ptr %1263, ptr %12, align 8
  %1264 = extractvalue { ptr, i32 } %1262, 1
  store i32 %1264, ptr %13, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %115) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %116) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %114) #8
  br label %1265

1265:                                             ; preds = %1261, %1257
  call void @llvm.lifetime.end.p0(i64 8, ptr %114) #8
  br label %1468

1266:                                             ; preds = %1254
  %1267 = landingpad { ptr, i32 }
          cleanup
  %1268 = extractvalue { ptr, i32 } %1267, 0
  store ptr %1268, ptr %12, align 8
  %1269 = extractvalue { ptr, i32 } %1267, 1
  store i32 %1269, ptr %13, align 4
  call void @__cxa_free_exception(ptr %1255) #8
  br label %1468

1270:                                             ; No predecessors!
  br label %1271

1271:                                             ; preds = %1270
  br label %1466

1272:                                             ; preds = %1246
  call void @llvm.lifetime.start.p0(i64 1, ptr %117) #8
  store i8 1, ptr %117, align 1, !tbaa !9
  br label %1273

1273:                                             ; preds = %1319, %1272
  %1274 = load i8, ptr %117, align 1, !tbaa !9, !range !11, !noundef !12
  %1275 = trunc i8 %1274 to i1
  br i1 %1275, label %1277, label %1276

1276:                                             ; preds = %1273
  store i32 92, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %117) #8
  br label %1320

1277:                                             ; preds = %1273
  call void @llvm.lifetime.start.p0(i64 8, ptr %118) #8
  %1278 = load ptr, ptr %113, align 8, !tbaa !5
  %1279 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_SliceEv(ptr noundef nonnull align 8 dereferenceable(184) %1278)
          to label %1280 unwind label %1286

1280:                                             ; preds = %1277
  store ptr %1279, ptr %118, align 8, !tbaa !5
  br label %1281

1281:                                             ; preds = %1316, %1280
  %1282 = load ptr, ptr %118, align 8, !tbaa !5
  %1283 = load i8, ptr %117, align 1, !tbaa !9, !range !11, !noundef !12
  %1284 = trunc i8 %1283 to i1
  br i1 %1284, label %1290, label %1285

1285:                                             ; preds = %1281
  store i32 95, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %118) #8
  br label %1318

1286:                                             ; preds = %1277
  %1287 = landingpad { ptr, i32 }
          cleanup
  %1288 = extractvalue { ptr, i32 } %1287, 0
  store ptr %1288, ptr %12, align 8
  %1289 = extractvalue { ptr, i32 } %1287, 1
  store i32 %1289, ptr %13, align 4
  br label %1317

1290:                                             ; preds = %1281
  call void @llvm.lifetime.start.p0(i64 8, ptr %119) #8
  %1291 = load ptr, ptr %110, align 8, !tbaa !5
  %1292 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_Slice", ptr %1291, i32 0, i32 0
  store ptr %1292, ptr %119, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %120) #8
  %1293 = load ptr, ptr %119, align 8, !tbaa !5
  %1294 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1293) #8
  %1295 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.417", ptr %120, i32 0, i32 0
  store ptr %1294, ptr %1295, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %121) #8
  %1296 = load ptr, ptr %119, align 8, !tbaa !5
  %1297 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1296) #8
  %1298 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.417", ptr %121, i32 0, i32 0
  store ptr %1297, ptr %1298, align 8
  br label %1299

1299:                                             ; preds = %1309, %1290
  %1300 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %120, ptr noundef nonnull align 8 dereferenceable(8) %121) #8
  br i1 %1300, label %1302, label %1301

1301:                                             ; preds = %1299
  store i32 98, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %121) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %120) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %119) #8
  br label %1315

1302:                                             ; preds = %1299
  call void @llvm.lifetime.start.p0(i64 8, ptr %122) #8
  %1303 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %120) #8
  store ptr %1303, ptr %122, align 8, !tbaa !5
  %1304 = load ptr, ptr %6, align 8, !tbaa !5
  %1305 = load ptr, ptr %122, align 8, !tbaa !5
  %1306 = load ptr, ptr %118, align 8, !tbaa !5
  %1307 = getelementptr inbounds %"struct.HIR::TypeData::Data_Slice", ptr %1306, i32 0, i32 0
  invoke void @_ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef nonnull align 8 dereferenceable(8) %1304, ptr noundef nonnull align 8 dereferenceable(212) %1305, ptr noundef nonnull align 8 dereferenceable(8) %1307)
          to label %1308 unwind label %1311

1308:                                             ; preds = %1302
  call void @llvm.lifetime.end.p0(i64 8, ptr %122) #8
  br label %1309

1309:                                             ; preds = %1308
  %1310 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %120) #8
  br label %1299

1311:                                             ; preds = %1302
  %1312 = landingpad { ptr, i32 }
          cleanup
  %1313 = extractvalue { ptr, i32 } %1312, 0
  store ptr %1313, ptr %12, align 8
  %1314 = extractvalue { ptr, i32 } %1312, 1
  store i32 %1314, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %122) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %121) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %120) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %119) #8
  br label %1317

1315:                                             ; preds = %1301
  br label %1316

1316:                                             ; preds = %1315
  store i8 0, ptr %117, align 1, !tbaa !9
  br label %1281, !llvm.loop !120

1317:                                             ; preds = %1311, %1286
  call void @llvm.lifetime.end.p0(i64 8, ptr %118) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %117) #8
  br label %1468

1318:                                             ; preds = %1285
  br label %1319

1319:                                             ; preds = %1318
  store i8 0, ptr %117, align 1, !tbaa !9
  br label %1273, !llvm.loop !121

1320:                                             ; preds = %1276
  br label %1466

1321:                                             ; preds = %1246
  call void @llvm.lifetime.start.p0(i64 1, ptr %123) #8
  store i8 1, ptr %123, align 1, !tbaa !9
  br label %1322

1322:                                             ; preds = %1368, %1321
  %1323 = load i8, ptr %123, align 1, !tbaa !9, !range !11, !noundef !12
  %1324 = trunc i8 %1323 to i1
  br i1 %1324, label %1326, label %1325

1325:                                             ; preds = %1322
  store i32 100, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %123) #8
  br label %1369

1326:                                             ; preds = %1322
  call void @llvm.lifetime.start.p0(i64 8, ptr %124) #8
  %1327 = load ptr, ptr %113, align 8, !tbaa !5
  %1328 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR8TypeData8as_ArrayEv(ptr noundef nonnull align 8 dereferenceable(184) %1327)
          to label %1329 unwind label %1335

1329:                                             ; preds = %1326
  store ptr %1328, ptr %124, align 8, !tbaa !5
  br label %1330

1330:                                             ; preds = %1365, %1329
  %1331 = load ptr, ptr %124, align 8, !tbaa !5
  %1332 = load i8, ptr %123, align 1, !tbaa !9, !range !11, !noundef !12
  %1333 = trunc i8 %1332 to i1
  br i1 %1333, label %1339, label %1334

1334:                                             ; preds = %1330
  store i32 103, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %124) #8
  br label %1367

1335:                                             ; preds = %1326
  %1336 = landingpad { ptr, i32 }
          cleanup
  %1337 = extractvalue { ptr, i32 } %1336, 0
  store ptr %1337, ptr %12, align 8
  %1338 = extractvalue { ptr, i32 } %1336, 1
  store i32 %1338, ptr %13, align 4
  br label %1366

1339:                                             ; preds = %1330
  call void @llvm.lifetime.start.p0(i64 8, ptr %125) #8
  %1340 = load ptr, ptr %110, align 8, !tbaa !5
  %1341 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_Slice", ptr %1340, i32 0, i32 0
  store ptr %1341, ptr %125, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %126) #8
  %1342 = load ptr, ptr %125, align 8, !tbaa !5
  %1343 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1342) #8
  %1344 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.417", ptr %126, i32 0, i32 0
  store ptr %1343, ptr %1344, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %127) #8
  %1345 = load ptr, ptr %125, align 8, !tbaa !5
  %1346 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1345) #8
  %1347 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.417", ptr %127, i32 0, i32 0
  store ptr %1346, ptr %1347, align 8
  br label %1348

1348:                                             ; preds = %1358, %1339
  %1349 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %126, ptr noundef nonnull align 8 dereferenceable(8) %127) #8
  br i1 %1349, label %1351, label %1350

1350:                                             ; preds = %1348
  store i32 106, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %127) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %126) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %125) #8
  br label %1364

1351:                                             ; preds = %1348
  call void @llvm.lifetime.start.p0(i64 8, ptr %128) #8
  %1352 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %126) #8
  store ptr %1352, ptr %128, align 8, !tbaa !5
  %1353 = load ptr, ptr %6, align 8, !tbaa !5
  %1354 = load ptr, ptr %128, align 8, !tbaa !5
  %1355 = load ptr, ptr %124, align 8, !tbaa !5
  %1356 = getelementptr inbounds %"struct.HIR::TypeData::Data_Array", ptr %1355, i32 0, i32 0
  invoke void @_ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef nonnull align 8 dereferenceable(8) %1353, ptr noundef nonnull align 8 dereferenceable(212) %1354, ptr noundef nonnull align 8 dereferenceable(8) %1356)
          to label %1357 unwind label %1360

1357:                                             ; preds = %1351
  call void @llvm.lifetime.end.p0(i64 8, ptr %128) #8
  br label %1358

1358:                                             ; preds = %1357
  %1359 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %126) #8
  br label %1348

1360:                                             ; preds = %1351
  %1361 = landingpad { ptr, i32 }
          cleanup
  %1362 = extractvalue { ptr, i32 } %1361, 0
  store ptr %1362, ptr %12, align 8
  %1363 = extractvalue { ptr, i32 } %1361, 1
  store i32 %1363, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %128) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %127) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %126) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %125) #8
  br label %1366

1364:                                             ; preds = %1350
  br label %1365

1365:                                             ; preds = %1364
  store i8 0, ptr %123, align 1, !tbaa !9
  br label %1330, !llvm.loop !122

1366:                                             ; preds = %1360, %1335
  call void @llvm.lifetime.end.p0(i64 8, ptr %124) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %123) #8
  br label %1468

1367:                                             ; preds = %1334
  br label %1368

1368:                                             ; preds = %1367
  store i8 0, ptr %123, align 1, !tbaa !9
  br label %1322, !llvm.loop !123

1369:                                             ; preds = %1325
  br label %1466

1370:                                             ; preds = %1246
  call void @llvm.lifetime.start.p0(i64 1, ptr %129) #8
  store i8 1, ptr %129, align 1, !tbaa !9
  br label %1371

1371:                                             ; preds = %1464, %1370
  %1372 = load i8, ptr %129, align 1, !tbaa !9, !range !11, !noundef !12
  %1373 = trunc i8 %1372 to i1
  br i1 %1373, label %1375, label %1374

1374:                                             ; preds = %1371
  store i32 108, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %129) #8
  br label %1465

1375:                                             ; preds = %1371
  call void @llvm.lifetime.start.p0(i64 8, ptr %130) #8
  %1376 = load ptr, ptr %113, align 8, !tbaa !5
  %1377 = invoke noundef nonnull align 4 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_InferEv(ptr noundef nonnull align 8 dereferenceable(184) %1376)
          to label %1378 unwind label %1384

1378:                                             ; preds = %1375
  store ptr %1377, ptr %130, align 8, !tbaa !5
  br label %1379

1379:                                             ; preds = %1430, %1378
  %1380 = load ptr, ptr %130, align 8, !tbaa !5
  %1381 = load i8, ptr %129, align 1, !tbaa !9, !range !11, !noundef !12
  %1382 = trunc i8 %1381 to i1
  br i1 %1382, label %1388, label %1383

1383:                                             ; preds = %1379
  store i32 111, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %130) #8
  br label %1463

1384:                                             ; preds = %1375
  %1385 = landingpad { ptr, i32 }
          cleanup
  %1386 = extractvalue { ptr, i32 } %1385, 0
  store ptr %1386, ptr %12, align 8
  %1387 = extractvalue { ptr, i32 } %1385, 1
  store i32 %1387, ptr %13, align 4
  br label %1462

1388:                                             ; preds = %1379
  call void @llvm.lifetime.start.p0(i64 8, ptr %131) #8
  %1389 = getelementptr inbounds %struct.Context, ptr %248, i32 0, i32 2
  invoke void @_ZN16HMTypeInferrence11new_ivar_trEN3HIR10InferClassE(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %131, ptr noundef nonnull align 8 dereferenceable(49) %1389, i32 noundef 0)
          to label %1390 unwind label %1402

1390:                                             ; preds = %1388
  call void @llvm.lifetime.start.p0(i64 8, ptr %132) #8
  %1391 = load ptr, ptr %110, align 8, !tbaa !5
  %1392 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_Slice", ptr %1391, i32 0, i32 0
  store ptr %1392, ptr %132, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %133) #8
  %1393 = load ptr, ptr %132, align 8, !tbaa !5
  %1394 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1393) #8
  %1395 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.417", ptr %133, i32 0, i32 0
  store ptr %1394, ptr %1395, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %134) #8
  %1396 = load ptr, ptr %132, align 8, !tbaa !5
  %1397 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1396) #8
  %1398 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.417", ptr %134, i32 0, i32 0
  store ptr %1397, ptr %1398, align 8
  br label %1399

1399:                                             ; preds = %1411, %1390
  %1400 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %133, ptr noundef nonnull align 8 dereferenceable(8) %134) #8
  br i1 %1400, label %1406, label %1401

1401:                                             ; preds = %1399
  store i32 114, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %134) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %133) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %132) #8
  br label %1417

1402:                                             ; preds = %1388
  %1403 = landingpad { ptr, i32 }
          cleanup
  %1404 = extractvalue { ptr, i32 } %1403, 0
  store ptr %1404, ptr %12, align 8
  %1405 = extractvalue { ptr, i32 } %1403, 1
  store i32 %1405, ptr %13, align 4
  br label %1461

1406:                                             ; preds = %1399
  call void @llvm.lifetime.start.p0(i64 8, ptr %135) #8
  %1407 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %133) #8
  store ptr %1407, ptr %135, align 8, !tbaa !5
  %1408 = load ptr, ptr %6, align 8, !tbaa !5
  %1409 = load ptr, ptr %135, align 8, !tbaa !5
  invoke void @_ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef nonnull align 8 dereferenceable(8) %1408, ptr noundef nonnull align 8 dereferenceable(212) %1409, ptr noundef nonnull align 8 dereferenceable(8) %131)
          to label %1410 unwind label %1413

1410:                                             ; preds = %1406
  call void @llvm.lifetime.end.p0(i64 8, ptr %135) #8
  br label %1411

1411:                                             ; preds = %1410
  %1412 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %133) #8
  br label %1399

1413:                                             ; preds = %1406
  %1414 = landingpad { ptr, i32 }
          cleanup
  %1415 = extractvalue { ptr, i32 } %1414, 0
  store ptr %1415, ptr %12, align 8
  %1416 = extractvalue { ptr, i32 } %1414, 1
  store i32 %1416, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %135) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %134) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %133) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %132) #8
  br label %1460

1417:                                             ; preds = %1401
  call void @llvm.lifetime.start.p0(i64 8, ptr %137) #8
  call void @llvm.lifetime.start.p0(i64 40, ptr %138) #8
  %1418 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %139, ptr noundef nonnull align 8 dereferenceable(8) %1418)
          to label %1419 unwind label %1431

1419:                                             ; preds = %1417
  invoke void @_ZN3HIR7TypeRefC2EOS0_(ptr noundef nonnull align 8 dereferenceable(8) %140, ptr noundef nonnull align 8 dereferenceable(8) %131)
          to label %1420 unwind label %1435

1420:                                             ; preds = %1419
  %1421 = load ptr, ptr %111, align 8, !tbaa !5
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %141, ptr noundef nonnull align 8 dereferenceable(8) %1421)
          to label %1422 unwind label %1439

1422:                                             ; preds = %1420
  %1423 = load ptr, ptr %110, align 8, !tbaa !5
  %1424 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_Slice", ptr %1423, i32 0, i32 0
  %1425 = call noundef i64 @_ZNKSt6vectorIN3HIR7PatternESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1424) #8
  %1426 = trunc i64 %1425 to i32
  invoke void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN15SlicePatRevisitC2ES0_S6_S6_j(ptr noundef nonnull align 8 dereferenceable(36) %138, ptr noundef %139, ptr noundef %140, ptr noundef %141, i32 noundef %1426)
          to label %1427 unwind label %1443

1427:                                             ; preds = %1422
  invoke void @_Z15make_unique_ptrIZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS4_7TypeRefEE15SlicePatRevisitESt10unique_ptrIT_St14default_deleteISC_EEOSC_(ptr dead_on_unwind writable sret(%"class.std::unique_ptr.429") align 8 %137, ptr noundef nonnull align 8 dereferenceable(36) %138)
          to label %1428 unwind label %1447

1428:                                             ; preds = %1427
  call void @_ZNSt10unique_ptrIN7Context9RevisitorESt14default_deleteIS1_EEC2IZNS0_27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS9_7TypeRefEE15SlicePatRevisitS2_ISF_EvEEOS_IT_T0_E(ptr noundef nonnull align 8 dereferenceable(8) %136, ptr noundef nonnull align 8 dereferenceable(8) %137) #8
  invoke void @_ZN7Context15add_revisit_advESt10unique_ptrINS_9RevisitorESt14default_deleteIS1_EE(ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef %136)
          to label %1429 unwind label %1451

1429:                                             ; preds = %1428
  call void @_ZNSt10unique_ptrIN7Context9RevisitorESt14default_deleteIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %136) #8
  call void @_ZNSt10unique_ptrIZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS4_7TypeRefEE15SlicePatRevisitSt14default_deleteISA_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %137) #8
  call void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN15SlicePatRevisitD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %138) #8
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %141) #8
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %140) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %139) #8
  call void @llvm.lifetime.end.p0(i64 40, ptr %138) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %137) #8
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %131) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %131) #8
  br label %1430

1430:                                             ; preds = %1429
  store i8 0, ptr %129, align 1, !tbaa !9
  br label %1379, !llvm.loop !124

1431:                                             ; preds = %1417
  %1432 = landingpad { ptr, i32 }
          cleanup
  %1433 = extractvalue { ptr, i32 } %1432, 0
  store ptr %1433, ptr %12, align 8
  %1434 = extractvalue { ptr, i32 } %1432, 1
  store i32 %1434, ptr %13, align 4
  br label %1459

1435:                                             ; preds = %1419
  %1436 = landingpad { ptr, i32 }
          cleanup
  %1437 = extractvalue { ptr, i32 } %1436, 0
  store ptr %1437, ptr %12, align 8
  %1438 = extractvalue { ptr, i32 } %1436, 1
  store i32 %1438, ptr %13, align 4
  br label %1458

1439:                                             ; preds = %1420
  %1440 = landingpad { ptr, i32 }
          cleanup
  %1441 = extractvalue { ptr, i32 } %1440, 0
  store ptr %1441, ptr %12, align 8
  %1442 = extractvalue { ptr, i32 } %1440, 1
  store i32 %1442, ptr %13, align 4
  br label %1457

1443:                                             ; preds = %1422
  %1444 = landingpad { ptr, i32 }
          cleanup
  %1445 = extractvalue { ptr, i32 } %1444, 0
  store ptr %1445, ptr %12, align 8
  %1446 = extractvalue { ptr, i32 } %1444, 1
  store i32 %1446, ptr %13, align 4
  br label %1456

1447:                                             ; preds = %1427
  %1448 = landingpad { ptr, i32 }
          cleanup
  %1449 = extractvalue { ptr, i32 } %1448, 0
  store ptr %1449, ptr %12, align 8
  %1450 = extractvalue { ptr, i32 } %1448, 1
  store i32 %1450, ptr %13, align 4
  br label %1455

1451:                                             ; preds = %1428
  %1452 = landingpad { ptr, i32 }
          cleanup
  %1453 = extractvalue { ptr, i32 } %1452, 0
  store ptr %1453, ptr %12, align 8
  %1454 = extractvalue { ptr, i32 } %1452, 1
  store i32 %1454, ptr %13, align 4
  call void @_ZNSt10unique_ptrIN7Context9RevisitorESt14default_deleteIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %136) #8
  call void @_ZNSt10unique_ptrIZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS4_7TypeRefEE15SlicePatRevisitSt14default_deleteISA_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %137) #8
  br label %1455

1455:                                             ; preds = %1451, %1447
  call void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN15SlicePatRevisitD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %138) #8
  br label %1456

1456:                                             ; preds = %1455, %1443
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %141) #8
  br label %1457

1457:                                             ; preds = %1456, %1439
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %140) #8
  br label %1458

1458:                                             ; preds = %1457, %1435
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %139) #8
  br label %1459

1459:                                             ; preds = %1458, %1431
  call void @llvm.lifetime.end.p0(i64 40, ptr %138) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %137) #8
  br label %1460

1460:                                             ; preds = %1459, %1413
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %131) #8
  br label %1461

1461:                                             ; preds = %1460, %1402
  call void @llvm.lifetime.end.p0(i64 8, ptr %131) #8
  br label %1462

1462:                                             ; preds = %1461, %1384
  call void @llvm.lifetime.end.p0(i64 8, ptr %130) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %129) #8
  br label %1468

1463:                                             ; preds = %1383
  br label %1464

1464:                                             ; preds = %1463
  store i8 0, ptr %129, align 1, !tbaa !9
  br label %1371, !llvm.loop !125

1465:                                             ; preds = %1374
  br label %1466

1466:                                             ; preds = %1465, %1369, %1320, %1271
  br label %1467

1467:                                             ; preds = %1466
  store i8 0, ptr %112, align 1, !tbaa !9
  br label %1235, !llvm.loop !126

1468:                                             ; preds = %1462, %1366, %1317, %1266, %1265, %1239
  call void @llvm.lifetime.end.p0(i64 8, ptr %113) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %112) #8
  br label %1473

1469:                                             ; preds = %1238
  br label %1470

1470:                                             ; preds = %1469
  store i8 0, ptr %112, align 1, !tbaa !9
  br label %1223, !llvm.loop !127

1471:                                             ; preds = %1226
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #8
  br label %1472

1472:                                             ; preds = %1471
  store i8 0, ptr %109, align 1, !tbaa !9
  br label %1210, !llvm.loop !128

1473:                                             ; preds = %1468, %1227
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #8
  br label %1474

1474:                                             ; preds = %1473, %1215
  call void @llvm.lifetime.end.p0(i64 8, ptr %110) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %109) #8
  br label %2622

1475:                                             ; preds = %1214
  br label %1476

1476:                                             ; preds = %1475
  store i8 0, ptr %109, align 1, !tbaa !9
  br label %1202, !llvm.loop !129

1477:                                             ; preds = %1205
  br label %2618

1478:                                             ; preds = %305
  call void @llvm.lifetime.start.p0(i64 1, ptr %142) #8
  store i8 1, ptr %142, align 1, !tbaa !9
  br label %1479

1479:                                             ; preds = %1899, %1478
  %1480 = load i8, ptr %142, align 1, !tbaa !9, !range !11, !noundef !12
  %1481 = trunc i8 %1480 to i1
  br i1 %1481, label %1483, label %1482

1482:                                             ; preds = %1479
  store i32 116, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %142) #8
  br label %1900

1483:                                             ; preds = %1479
  call void @llvm.lifetime.start.p0(i64 8, ptr %143) #8
  %1484 = load ptr, ptr %21, align 8, !tbaa !5
  %1485 = invoke noundef nonnull align 8 dereferenceable(72) ptr @_ZN3HIR7Pattern4Data13as_SplitSliceEv(ptr noundef nonnull align 8 dereferenceable(184) %1484)
          to label %1486 unwind label %1492

1486:                                             ; preds = %1483
  store ptr %1485, ptr %143, align 8, !tbaa !5
  br label %1487

1487:                                             ; preds = %1894, %1486
  %1488 = load ptr, ptr %143, align 8, !tbaa !5
  %1489 = load i8, ptr %142, align 1, !tbaa !9, !range !11, !noundef !12
  %1490 = trunc i8 %1489 to i1
  br i1 %1490, label %1496, label %1491

1491:                                             ; preds = %1487
  store i32 119, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %143) #8
  br label %1898

1492:                                             ; preds = %1483
  %1493 = landingpad { ptr, i32 }
          cleanup
  %1494 = extractvalue { ptr, i32 } %1493, 0
  store ptr %1494, ptr %12, align 8
  %1495 = extractvalue { ptr, i32 } %1493, 1
  store i32 %1495, ptr %13, align 4
  br label %1897

1496:                                             ; preds = %1487
  call void @llvm.lifetime.start.p0(i64 8, ptr %144) #8
  invoke void @_ZN3HIR7TypeRefC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %144)
          to label %1497 unwind label %1513

1497:                                             ; preds = %1496
  call void @llvm.lifetime.start.p0(i64 4, ptr %145) #8
  %1498 = load ptr, ptr %143, align 8, !tbaa !5
  %1499 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_SplitSlice", ptr %1498, i32 0, i32 0
  %1500 = call noundef i64 @_ZNKSt6vectorIN3HIR7PatternESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1499) #8
  %1501 = load ptr, ptr %143, align 8, !tbaa !5
  %1502 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_SplitSlice", ptr %1501, i32 0, i32 2
  %1503 = call noundef i64 @_ZNKSt6vectorIN3HIR7PatternESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1502) #8
  %1504 = add i64 %1500, %1503
  %1505 = trunc i64 %1504 to i32
  store i32 %1505, ptr %145, align 4, !tbaa !107
  call void @llvm.lifetime.start.p0(i64 8, ptr %146) #8
  %1506 = load ptr, ptr %8, align 8, !tbaa !5
  %1507 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7Context8get_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef nonnull align 8 dereferenceable(8) %1506)
          to label %1508 unwind label %1517

1508:                                             ; preds = %1497
  store ptr %1507, ptr %146, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %147) #8
  store i8 1, ptr %147, align 1, !tbaa !9
  br label %1509

1509:                                             ; preds = %1846, %1508
  %1510 = load i8, ptr %147, align 1, !tbaa !9, !range !11, !noundef !12
  %1511 = trunc i8 %1510 to i1
  br i1 %1511, label %1521, label %1512

1512:                                             ; preds = %1509
  store i32 122, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %147) #8
  br label %1847

1513:                                             ; preds = %1496
  %1514 = landingpad { ptr, i32 }
          cleanup
  %1515 = extractvalue { ptr, i32 } %1514, 0
  store ptr %1515, ptr %12, align 8
  %1516 = extractvalue { ptr, i32 } %1514, 1
  store i32 %1516, ptr %13, align 4
  br label %1896

1517:                                             ; preds = %1497
  %1518 = landingpad { ptr, i32 }
          cleanup
  %1519 = extractvalue { ptr, i32 } %1518, 0
  store ptr %1519, ptr %12, align 8
  %1520 = extractvalue { ptr, i32 } %1518, 1
  store i32 %1520, ptr %13, align 4
  br label %1895

1521:                                             ; preds = %1509
  call void @llvm.lifetime.start.p0(i64 8, ptr %148) #8
  %1522 = load ptr, ptr %146, align 8, !tbaa !5
  %1523 = invoke noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %1522)
          to label %1524 unwind label %1529

1524:                                             ; preds = %1521
  store ptr %1523, ptr %148, align 8, !tbaa !5
  br label %1525

1525:                                             ; preds = %1843, %1524
  %1526 = load i8, ptr %147, align 1, !tbaa !9, !range !11, !noundef !12
  %1527 = trunc i8 %1526 to i1
  br i1 %1527, label %1533, label %1528

1528:                                             ; preds = %1525
  store i32 125, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %148) #8
  br label %1845

1529:                                             ; preds = %1546, %1533, %1521
  %1530 = landingpad { ptr, i32 }
          cleanup
  %1531 = extractvalue { ptr, i32 } %1530, 0
  store ptr %1531, ptr %12, align 8
  %1532 = extractvalue { ptr, i32 } %1530, 1
  store i32 %1532, ptr %13, align 4
  br label %1844

1533:                                             ; preds = %1525
  %1534 = load ptr, ptr %148, align 8, !tbaa !5
  %1535 = invoke noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %1534)
          to label %1536 unwind label %1529

1536:                                             ; preds = %1533
  switch i32 %1535, label %1538 [
    i32 0, label %1537
    i32 9, label %1562
    i32 8, label %1616
    i32 1, label %1722
  ]

1537:                                             ; preds = %1536
  call void @__assert_fail(ptr noundef @.str.20, ptr noundef @.str.21, i32 noundef 3476, ptr noundef @__PRETTY_FUNCTION__._ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE) #9
  unreachable

1538:                                             ; preds = %1536
  br label %1539

1539:                                             ; preds = %1538
  call void @llvm.lifetime.start.p0(i64 8, ptr %149) #8
  %1540 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %149, ptr noundef nonnull align 8 dereferenceable(8) %1540)
          to label %1541 unwind label %1547

1541:                                             ; preds = %1539
  call void @llvm.lifetime.start.p0(i64 8, ptr %151) #8
  %1542 = getelementptr inbounds %class.anon.437, ptr %151, i32 0, i32 0
  %1543 = load ptr, ptr %146, align 8, !tbaa !5
  store ptr %1543, ptr %1542, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE3$_7vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %150, ptr noundef nonnull align 8 dereferenceable(8) %151) #8
  invoke void @_ZNK4Span5errorE9ErrorTypeSt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %149, i32 noundef 0, ptr noundef %150)
          to label %1544 unwind label %1551

1544:                                             ; preds = %1541
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %150) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %151) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %149) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %149) #8
  %1545 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1545, ptr noundef @.str.19)
          to label %1546 unwind label %1556

1546:                                             ; preds = %1544
  invoke void @__cxa_throw(ptr %1545, ptr @_ZTISt13runtime_error, ptr @_ZNSt13runtime_errorD1Ev) #10
          to label %2638 unwind label %1529

1547:                                             ; preds = %1539
  %1548 = landingpad { ptr, i32 }
          cleanup
  %1549 = extractvalue { ptr, i32 } %1548, 0
  store ptr %1549, ptr %12, align 8
  %1550 = extractvalue { ptr, i32 } %1548, 1
  store i32 %1550, ptr %13, align 4
  br label %1555

1551:                                             ; preds = %1541
  %1552 = landingpad { ptr, i32 }
          cleanup
  %1553 = extractvalue { ptr, i32 } %1552, 0
  store ptr %1553, ptr %12, align 8
  %1554 = extractvalue { ptr, i32 } %1552, 1
  store i32 %1554, ptr %13, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %150) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %151) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %149) #8
  br label %1555

1555:                                             ; preds = %1551, %1547
  call void @llvm.lifetime.end.p0(i64 8, ptr %149) #8
  br label %1844

1556:                                             ; preds = %1544
  %1557 = landingpad { ptr, i32 }
          cleanup
  %1558 = extractvalue { ptr, i32 } %1557, 0
  store ptr %1558, ptr %12, align 8
  %1559 = extractvalue { ptr, i32 } %1557, 1
  store i32 %1559, ptr %13, align 4
  call void @__cxa_free_exception(ptr %1545) #8
  br label %1844

1560:                                             ; No predecessors!
  br label %1561

1561:                                             ; preds = %1560
  br label %1842

1562:                                             ; preds = %1536
  call void @llvm.lifetime.start.p0(i64 1, ptr %152) #8
  store i8 1, ptr %152, align 1, !tbaa !9
  br label %1563

1563:                                             ; preds = %1614, %1562
  %1564 = load i8, ptr %152, align 1, !tbaa !9, !range !11, !noundef !12
  %1565 = trunc i8 %1564 to i1
  br i1 %1565, label %1567, label %1566

1566:                                             ; preds = %1563
  store i32 131, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %152) #8
  br label %1615

1567:                                             ; preds = %1563
  call void @llvm.lifetime.start.p0(i64 8, ptr %153) #8
  %1568 = load ptr, ptr %148, align 8, !tbaa !5
  %1569 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_SliceEv(ptr noundef nonnull align 8 dereferenceable(184) %1568)
          to label %1570 unwind label %1576

1570:                                             ; preds = %1567
  store ptr %1569, ptr %153, align 8, !tbaa !5
  br label %1571

1571:                                             ; preds = %1611, %1570
  %1572 = load ptr, ptr %153, align 8, !tbaa !5
  %1573 = load i8, ptr %152, align 1, !tbaa !9, !range !11, !noundef !12
  %1574 = trunc i8 %1573 to i1
  br i1 %1574, label %1580, label %1575

1575:                                             ; preds = %1571
  store i32 134, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %153) #8
  br label %1613

1576:                                             ; preds = %1590, %1585, %1567
  %1577 = landingpad { ptr, i32 }
          cleanup
  %1578 = extractvalue { ptr, i32 } %1577, 0
  store ptr %1578, ptr %12, align 8
  %1579 = extractvalue { ptr, i32 } %1577, 1
  store i32 %1579, ptr %13, align 4
  br label %1612

1580:                                             ; preds = %1571
  call void @llvm.lifetime.start.p0(i64 8, ptr %154) #8
  %1581 = load ptr, ptr %153, align 8, !tbaa !5
  %1582 = getelementptr inbounds %"struct.HIR::TypeData::Data_Slice", ptr %1581, i32 0, i32 0
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %154, ptr noundef nonnull align 8 dereferenceable(8) %1582)
          to label %1583 unwind label %1597

1583:                                             ; preds = %1580
  %1584 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIR7TypeRefaSEOS0_(ptr noundef nonnull align 8 dereferenceable(8) %144, ptr noundef nonnull align 8 dereferenceable(8) %154)
          to label %1585 unwind label %1601

1585:                                             ; preds = %1583
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %154) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %154) #8
  %1586 = load ptr, ptr %143, align 8, !tbaa !5
  %1587 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_SplitSlice", ptr %1586, i32 0, i32 1
  %1588 = invoke noundef zeroext i1 @_ZNK3HIR14PatternBinding8is_validEv(ptr noundef nonnull align 8 dereferenceable(24) %1587)
          to label %1589 unwind label %1576

1589:                                             ; preds = %1585
  br i1 %1588, label %1590, label %1610

1590:                                             ; preds = %1589
  %1591 = load ptr, ptr %6, align 8, !tbaa !5
  %1592 = load ptr, ptr %143, align 8, !tbaa !5
  %1593 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_SplitSlice", ptr %1592, i32 0, i32 1
  %1594 = load ptr, ptr %146, align 8, !tbaa !5
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %155, ptr noundef nonnull align 8 dereferenceable(8) %1594)
          to label %1595 unwind label %1576

1595:                                             ; preds = %1590
  invoke void @_ZN7Context17add_binding_innerERK4SpanRKN3HIR14PatternBindingENS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef nonnull align 8 dereferenceable(8) %1591, ptr noundef nonnull align 8 dereferenceable(24) %1593, ptr noundef %155)
          to label %1596 unwind label %1606

1596:                                             ; preds = %1595
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %155) #8
  br label %1610

1597:                                             ; preds = %1580
  %1598 = landingpad { ptr, i32 }
          cleanup
  %1599 = extractvalue { ptr, i32 } %1598, 0
  store ptr %1599, ptr %12, align 8
  %1600 = extractvalue { ptr, i32 } %1598, 1
  store i32 %1600, ptr %13, align 4
  br label %1605

1601:                                             ; preds = %1583
  %1602 = landingpad { ptr, i32 }
          cleanup
  %1603 = extractvalue { ptr, i32 } %1602, 0
  store ptr %1603, ptr %12, align 8
  %1604 = extractvalue { ptr, i32 } %1602, 1
  store i32 %1604, ptr %13, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %154) #8
  br label %1605

1605:                                             ; preds = %1601, %1597
  call void @llvm.lifetime.end.p0(i64 8, ptr %154) #8
  br label %1612

1606:                                             ; preds = %1595
  %1607 = landingpad { ptr, i32 }
          cleanup
  %1608 = extractvalue { ptr, i32 } %1607, 0
  store ptr %1608, ptr %12, align 8
  %1609 = extractvalue { ptr, i32 } %1607, 1
  store i32 %1609, ptr %13, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %155) #8
  br label %1612

1610:                                             ; preds = %1596, %1589
  br label %1611

1611:                                             ; preds = %1610
  store i8 0, ptr %152, align 1, !tbaa !9
  br label %1571, !llvm.loop !130

1612:                                             ; preds = %1606, %1605, %1576
  call void @llvm.lifetime.end.p0(i64 8, ptr %153) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %152) #8
  br label %1844

1613:                                             ; preds = %1575
  br label %1614

1614:                                             ; preds = %1613
  store i8 0, ptr %152, align 1, !tbaa !9
  br label %1563, !llvm.loop !131

1615:                                             ; preds = %1566
  br label %1842

1616:                                             ; preds = %1536
  call void @llvm.lifetime.start.p0(i64 1, ptr %156) #8
  store i8 1, ptr %156, align 1, !tbaa !9
  br label %1617

1617:                                             ; preds = %1720, %1616
  %1618 = load i8, ptr %156, align 1, !tbaa !9, !range !11, !noundef !12
  %1619 = trunc i8 %1618 to i1
  br i1 %1619, label %1621, label %1620

1620:                                             ; preds = %1617
  store i32 137, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %156) #8
  br label %1721

1621:                                             ; preds = %1617
  call void @llvm.lifetime.start.p0(i64 8, ptr %157) #8
  %1622 = load ptr, ptr %148, align 8, !tbaa !5
  %1623 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR8TypeData8as_ArrayEv(ptr noundef nonnull align 8 dereferenceable(184) %1622)
          to label %1624 unwind label %1630

1624:                                             ; preds = %1621
  store ptr %1623, ptr %157, align 8, !tbaa !5
  br label %1625

1625:                                             ; preds = %1716, %1624
  %1626 = load ptr, ptr %157, align 8, !tbaa !5
  %1627 = load i8, ptr %156, align 1, !tbaa !9, !range !11, !noundef !12
  %1628 = trunc i8 %1627 to i1
  br i1 %1628, label %1634, label %1629

1629:                                             ; preds = %1625
  store i32 140, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %157) #8
  br label %1719

1630:                                             ; preds = %1654, %1639, %1621
  %1631 = landingpad { ptr, i32 }
          cleanup
  %1632 = extractvalue { ptr, i32 } %1631, 0
  store ptr %1632, ptr %12, align 8
  %1633 = extractvalue { ptr, i32 } %1631, 1
  store i32 %1633, ptr %13, align 4
  br label %1718

1634:                                             ; preds = %1625
  call void @llvm.lifetime.start.p0(i64 8, ptr %158) #8
  %1635 = load ptr, ptr %157, align 8, !tbaa !5
  %1636 = getelementptr inbounds %"struct.HIR::TypeData::Data_Array", ptr %1635, i32 0, i32 0
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %158, ptr noundef nonnull align 8 dereferenceable(8) %1636)
          to label %1637 unwind label %1655

1637:                                             ; preds = %1634
  %1638 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIR7TypeRefaSEOS0_(ptr noundef nonnull align 8 dereferenceable(8) %144, ptr noundef nonnull align 8 dereferenceable(8) %158)
          to label %1639 unwind label %1659

1639:                                             ; preds = %1637
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %158) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %158) #8
  %1640 = load ptr, ptr %157, align 8, !tbaa !5
  %1641 = getelementptr inbounds %"struct.HIR::TypeData::Data_Array", ptr %1640, i32 0, i32 1
  %1642 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR9ArraySize8as_KnownEv(ptr noundef nonnull align 8 dereferenceable(32) %1641)
          to label %1643 unwind label %1630

1643:                                             ; preds = %1639
  %1644 = load i64, ptr %1642, align 8, !tbaa !132
  %1645 = load i32, ptr %145, align 4, !tbaa !107
  %1646 = zext i32 %1645 to i64
  %1647 = icmp ult i64 %1644, %1646
  br i1 %1647, label %1648, label %1679

1648:                                             ; preds = %1643
  br label %1649

1649:                                             ; preds = %1648
  call void @llvm.lifetime.start.p0(i64 8, ptr %159) #8
  %1650 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %159, ptr noundef nonnull align 8 dereferenceable(8) %1650)
          to label %1651 unwind label %1664

1651:                                             ; preds = %1649
  call void @llvm.lifetime.start.p0(i64 1, ptr %161) #8
  call void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE3$_8vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %160, ptr noundef nonnull align 1 dereferenceable(1) %161) #8
  invoke void @_ZNK4Span5errorE9ErrorTypeSt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %159, i32 noundef 0, ptr noundef %160)
          to label %1652 unwind label %1668

1652:                                             ; preds = %1651
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %160) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %161) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %159) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %159) #8
  %1653 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1653, ptr noundef @.str.19)
          to label %1654 unwind label %1673

1654:                                             ; preds = %1652
  invoke void @__cxa_throw(ptr %1653, ptr @_ZTISt13runtime_error, ptr @_ZNSt13runtime_errorD1Ev) #10
          to label %2638 unwind label %1630

1655:                                             ; preds = %1634
  %1656 = landingpad { ptr, i32 }
          cleanup
  %1657 = extractvalue { ptr, i32 } %1656, 0
  store ptr %1657, ptr %12, align 8
  %1658 = extractvalue { ptr, i32 } %1656, 1
  store i32 %1658, ptr %13, align 4
  br label %1663

1659:                                             ; preds = %1637
  %1660 = landingpad { ptr, i32 }
          cleanup
  %1661 = extractvalue { ptr, i32 } %1660, 0
  store ptr %1661, ptr %12, align 8
  %1662 = extractvalue { ptr, i32 } %1660, 1
  store i32 %1662, ptr %13, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %158) #8
  br label %1663

1663:                                             ; preds = %1659, %1655
  call void @llvm.lifetime.end.p0(i64 8, ptr %158) #8
  br label %1718

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

1668:                                             ; preds = %1651
  %1669 = landingpad { ptr, i32 }
          cleanup
  %1670 = extractvalue { ptr, i32 } %1669, 0
  store ptr %1670, ptr %12, align 8
  %1671 = extractvalue { ptr, i32 } %1669, 1
  store i32 %1671, ptr %13, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %160) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %161) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %159) #8
  br label %1672

1672:                                             ; preds = %1668, %1664
  call void @llvm.lifetime.end.p0(i64 8, ptr %159) #8
  br label %1718

1673:                                             ; preds = %1652
  %1674 = landingpad { ptr, i32 }
          cleanup
  %1675 = extractvalue { ptr, i32 } %1674, 0
  store ptr %1675, ptr %12, align 8
  %1676 = extractvalue { ptr, i32 } %1674, 1
  store i32 %1676, ptr %13, align 4
  call void @__cxa_free_exception(ptr %1653) #8
  br label %1718

1677:                                             ; No predecessors!
  br label %1678

1678:                                             ; preds = %1677
  br label %1679

1679:                                             ; preds = %1678, %1643
  call void @llvm.lifetime.start.p0(i64 4, ptr %162) #8
  %1680 = load ptr, ptr %157, align 8, !tbaa !5
  %1681 = getelementptr inbounds %"struct.HIR::TypeData::Data_Array", ptr %1680, i32 0, i32 1
  %1682 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR9ArraySize8as_KnownEv(ptr noundef nonnull align 8 dereferenceable(32) %1681)
          to label %1683 unwind label %1702

1683:                                             ; preds = %1679
  %1684 = load i64, ptr %1682, align 8, !tbaa !132
  %1685 = load i32, ptr %145, align 4, !tbaa !107
  %1686 = zext i32 %1685 to i64
  %1687 = sub i64 %1684, %1686
  %1688 = trunc i64 %1687 to i32
  store i32 %1688, ptr %162, align 4, !tbaa !107
  %1689 = load ptr, ptr %143, align 8, !tbaa !5
  %1690 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_SplitSlice", ptr %1689, i32 0, i32 1
  %1691 = invoke noundef zeroext i1 @_ZNK3HIR14PatternBinding8is_validEv(ptr noundef nonnull align 8 dereferenceable(24) %1690)
          to label %1692 unwind label %1702

1692:                                             ; preds = %1683
  br i1 %1691, label %1693, label %1715

1693:                                             ; preds = %1692
  %1694 = load ptr, ptr %6, align 8, !tbaa !5
  %1695 = load ptr, ptr %143, align 8, !tbaa !5
  %1696 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_SplitSlice", ptr %1695, i32 0, i32 1
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %164, ptr noundef nonnull align 8 dereferenceable(8) %144)
          to label %1697 unwind label %1702

1697:                                             ; preds = %1693
  %1698 = load i32, ptr %162, align 4, !tbaa !107
  %1699 = zext i32 %1698 to i64
  invoke void @_ZN3HIR7TypeRef9new_arrayES0_m(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %163, ptr noundef %164, i64 noundef %1699)
          to label %1700 unwind label %1706

1700:                                             ; preds = %1697
  invoke void @_ZN7Context17add_binding_innerERK4SpanRKN3HIR14PatternBindingENS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef nonnull align 8 dereferenceable(8) %1694, ptr noundef nonnull align 8 dereferenceable(24) %1696, ptr noundef %163)
          to label %1701 unwind label %1710

1701:                                             ; preds = %1700
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %163) #8
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %164) #8
  br label %1715

1702:                                             ; preds = %1693, %1683, %1679
  %1703 = landingpad { ptr, i32 }
          cleanup
  %1704 = extractvalue { ptr, i32 } %1703, 0
  store ptr %1704, ptr %12, align 8
  %1705 = extractvalue { ptr, i32 } %1703, 1
  store i32 %1705, ptr %13, align 4
  br label %1717

1706:                                             ; preds = %1697
  %1707 = landingpad { ptr, i32 }
          cleanup
  %1708 = extractvalue { ptr, i32 } %1707, 0
  store ptr %1708, ptr %12, align 8
  %1709 = extractvalue { ptr, i32 } %1707, 1
  store i32 %1709, ptr %13, align 4
  br label %1714

1710:                                             ; preds = %1700
  %1711 = landingpad { ptr, i32 }
          cleanup
  %1712 = extractvalue { ptr, i32 } %1711, 0
  store ptr %1712, ptr %12, align 8
  %1713 = extractvalue { ptr, i32 } %1711, 1
  store i32 %1713, ptr %13, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %163) #8
  br label %1714

1714:                                             ; preds = %1710, %1706
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %164) #8
  br label %1717

1715:                                             ; preds = %1701, %1692
  call void @llvm.lifetime.end.p0(i64 4, ptr %162) #8
  br label %1716

1716:                                             ; preds = %1715
  store i8 0, ptr %156, align 1, !tbaa !9
  br label %1625, !llvm.loop !133

1717:                                             ; preds = %1714, %1702
  call void @llvm.lifetime.end.p0(i64 4, ptr %162) #8
  br label %1718

1718:                                             ; preds = %1717, %1673, %1672, %1663, %1630
  call void @llvm.lifetime.end.p0(i64 8, ptr %157) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %156) #8
  br label %1844

1719:                                             ; preds = %1629
  br label %1720

1720:                                             ; preds = %1719
  store i8 0, ptr %156, align 1, !tbaa !9
  br label %1617, !llvm.loop !134

1721:                                             ; preds = %1620
  br label %1842

1722:                                             ; preds = %1536
  call void @llvm.lifetime.start.p0(i64 1, ptr %165) #8
  store i8 1, ptr %165, align 1, !tbaa !9
  br label %1723

1723:                                             ; preds = %1840, %1722
  %1724 = load i8, ptr %165, align 1, !tbaa !9, !range !11, !noundef !12
  %1725 = trunc i8 %1724 to i1
  br i1 %1725, label %1727, label %1726

1726:                                             ; preds = %1723
  store i32 145, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %165) #8
  br label %1841

1727:                                             ; preds = %1723
  call void @llvm.lifetime.start.p0(i64 8, ptr %166) #8
  %1728 = load ptr, ptr %148, align 8, !tbaa !5
  %1729 = invoke noundef nonnull align 4 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_InferEv(ptr noundef nonnull align 8 dereferenceable(184) %1728)
          to label %1730 unwind label %1736

1730:                                             ; preds = %1727
  store ptr %1729, ptr %166, align 8, !tbaa !5
  br label %1731

1731:                                             ; preds = %1801, %1730
  %1732 = load ptr, ptr %166, align 8, !tbaa !5
  %1733 = load i8, ptr %165, align 1, !tbaa !9, !range !11, !noundef !12
  %1734 = trunc i8 %1733 to i1
  br i1 %1734, label %1740, label %1735

1735:                                             ; preds = %1731
  store i32 148, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %166) #8
  br label %1839

1736:                                             ; preds = %1727
  %1737 = landingpad { ptr, i32 }
          cleanup
  %1738 = extractvalue { ptr, i32 } %1737, 0
  store ptr %1738, ptr %12, align 8
  %1739 = extractvalue { ptr, i32 } %1737, 1
  store i32 %1739, ptr %13, align 4
  br label %1838

1740:                                             ; preds = %1731
  call void @llvm.lifetime.start.p0(i64 8, ptr %167) #8
  %1741 = getelementptr inbounds %struct.Context, ptr %248, i32 0, i32 2
  invoke void @_ZN16HMTypeInferrence11new_ivar_trEN3HIR10InferClassE(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %167, ptr noundef nonnull align 8 dereferenceable(49) %1741, i32 noundef 0)
          to label %1742 unwind label %1760

1742:                                             ; preds = %1740
  %1743 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIR7TypeRefaSEOS0_(ptr noundef nonnull align 8 dereferenceable(8) %144, ptr noundef nonnull align 8 dereferenceable(8) %167)
          to label %1744 unwind label %1764

1744:                                             ; preds = %1742
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %167) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %167) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %168) #8
  invoke void @_ZN3HIR7TypeRefC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %168)
          to label %1745 unwind label %1769

1745:                                             ; preds = %1744
  %1746 = load ptr, ptr %143, align 8, !tbaa !5
  %1747 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_SplitSlice", ptr %1746, i32 0, i32 1
  %1748 = invoke noundef zeroext i1 @_ZNK3HIR14PatternBinding8is_validEv(ptr noundef nonnull align 8 dereferenceable(24) %1747)
          to label %1749 unwind label %1773

1749:                                             ; preds = %1745
  br i1 %1748, label %1750, label %1790

1750:                                             ; preds = %1749
  call void @llvm.lifetime.start.p0(i64 8, ptr %169) #8
  %1751 = getelementptr inbounds %struct.Context, ptr %248, i32 0, i32 2
  invoke void @_ZN16HMTypeInferrence11new_ivar_trEN3HIR10InferClassE(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %169, ptr noundef nonnull align 8 dereferenceable(49) %1751, i32 noundef 0)
          to label %1752 unwind label %1777

1752:                                             ; preds = %1750
  %1753 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIR7TypeRefaSEOS0_(ptr noundef nonnull align 8 dereferenceable(8) %168, ptr noundef nonnull align 8 dereferenceable(8) %169)
          to label %1754 unwind label %1781

1754:                                             ; preds = %1752
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %169) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %169) #8
  %1755 = load ptr, ptr %6, align 8, !tbaa !5
  %1756 = load ptr, ptr %143, align 8, !tbaa !5
  %1757 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_SplitSlice", ptr %1756, i32 0, i32 1
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %170, ptr noundef nonnull align 8 dereferenceable(8) %168)
          to label %1758 unwind label %1773

1758:                                             ; preds = %1754
  invoke void @_ZN7Context17add_binding_innerERK4SpanRKN3HIR14PatternBindingENS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef nonnull align 8 dereferenceable(8) %1755, ptr noundef nonnull align 8 dereferenceable(24) %1757, ptr noundef %170)
          to label %1759 unwind label %1786

1759:                                             ; preds = %1758
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %170) #8
  br label %1790

1760:                                             ; preds = %1740
  %1761 = landingpad { ptr, i32 }
          cleanup
  %1762 = extractvalue { ptr, i32 } %1761, 0
  store ptr %1762, ptr %12, align 8
  %1763 = extractvalue { ptr, i32 } %1761, 1
  store i32 %1763, ptr %13, align 4
  br label %1768

1764:                                             ; preds = %1742
  %1765 = landingpad { ptr, i32 }
          cleanup
  %1766 = extractvalue { ptr, i32 } %1765, 0
  store ptr %1766, ptr %12, align 8
  %1767 = extractvalue { ptr, i32 } %1765, 1
  store i32 %1767, ptr %13, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %167) #8
  br label %1768

1768:                                             ; preds = %1764, %1760
  call void @llvm.lifetime.end.p0(i64 8, ptr %167) #8
  br label %1838

1769:                                             ; preds = %1744
  %1770 = landingpad { ptr, i32 }
          cleanup
  %1771 = extractvalue { ptr, i32 } %1770, 0
  store ptr %1771, ptr %12, align 8
  %1772 = extractvalue { ptr, i32 } %1770, 1
  store i32 %1772, ptr %13, align 4
  br label %1837

1773:                                             ; preds = %1754, %1745
  %1774 = landingpad { ptr, i32 }
          cleanup
  %1775 = extractvalue { ptr, i32 } %1774, 0
  store ptr %1775, ptr %12, align 8
  %1776 = extractvalue { ptr, i32 } %1774, 1
  store i32 %1776, ptr %13, align 4
  br label %1836

1777:                                             ; preds = %1750
  %1778 = landingpad { ptr, i32 }
          cleanup
  %1779 = extractvalue { ptr, i32 } %1778, 0
  store ptr %1779, ptr %12, align 8
  %1780 = extractvalue { ptr, i32 } %1778, 1
  store i32 %1780, ptr %13, align 4
  br label %1785

1781:                                             ; preds = %1752
  %1782 = landingpad { ptr, i32 }
          cleanup
  %1783 = extractvalue { ptr, i32 } %1782, 0
  store ptr %1783, ptr %12, align 8
  %1784 = extractvalue { ptr, i32 } %1782, 1
  store i32 %1784, ptr %13, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %169) #8
  br label %1785

1785:                                             ; preds = %1781, %1777
  call void @llvm.lifetime.end.p0(i64 8, ptr %169) #8
  br label %1836

1786:                                             ; preds = %1758
  %1787 = landingpad { ptr, i32 }
          cleanup
  %1788 = extractvalue { ptr, i32 } %1787, 0
  store ptr %1788, ptr %12, align 8
  %1789 = extractvalue { ptr, i32 } %1787, 1
  store i32 %1789, ptr %13, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %170) #8
  br label %1836

1790:                                             ; preds = %1759, %1749
  call void @llvm.lifetime.start.p0(i64 8, ptr %172) #8
  call void @llvm.lifetime.start.p0(i64 48, ptr %173) #8
  %1791 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %174, ptr noundef nonnull align 8 dereferenceable(8) %1791)
          to label %1792 unwind label %1802

1792:                                             ; preds = %1790
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %175, ptr noundef nonnull align 8 dereferenceable(8) %144)
          to label %1793 unwind label %1806

1793:                                             ; preds = %1792
  %1794 = load ptr, ptr %146, align 8, !tbaa !5
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %176, ptr noundef nonnull align 8 dereferenceable(8) %1794)
          to label %1795 unwind label %1810

1795:                                             ; preds = %1793
  invoke void @_ZN3HIR7TypeRefC2EOS0_(ptr noundef nonnull align 8 dereferenceable(8) %177, ptr noundef nonnull align 8 dereferenceable(8) %168)
          to label %1796 unwind label %1814

1796:                                             ; preds = %1795
  %1797 = load i32, ptr %145, align 4, !tbaa !107
  invoke void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN20SplitSlicePatRevisitC2ES0_S6_S6_S6_j(ptr noundef nonnull align 8 dereferenceable(44) %173, ptr noundef %174, ptr noundef %175, ptr noundef %176, ptr noundef %177, i32 noundef %1797)
          to label %1798 unwind label %1818

1798:                                             ; preds = %1796
  invoke void @_Z15make_unique_ptrIZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS4_7TypeRefEE20SplitSlicePatRevisitESt10unique_ptrIT_St14default_deleteISC_EEOSC_(ptr dead_on_unwind writable sret(%"class.std::unique_ptr.440") align 8 %172, ptr noundef nonnull align 8 dereferenceable(44) %173)
          to label %1799 unwind label %1822

1799:                                             ; preds = %1798
  call void @_ZNSt10unique_ptrIN7Context9RevisitorESt14default_deleteIS1_EEC2IZNS0_27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS9_7TypeRefEE20SplitSlicePatRevisitS2_ISF_EvEEOS_IT_T0_E(ptr noundef nonnull align 8 dereferenceable(8) %171, ptr noundef nonnull align 8 dereferenceable(8) %172) #8
  invoke void @_ZN7Context15add_revisit_advESt10unique_ptrINS_9RevisitorESt14default_deleteIS1_EE(ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef %171)
          to label %1800 unwind label %1826

1800:                                             ; preds = %1799
  call void @_ZNSt10unique_ptrIN7Context9RevisitorESt14default_deleteIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %171) #8
  call void @_ZNSt10unique_ptrIZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS4_7TypeRefEE20SplitSlicePatRevisitSt14default_deleteISA_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %172) #8
  call void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN20SplitSlicePatRevisitD2Ev(ptr noundef nonnull align 8 dereferenceable(44) %173) #8
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %177) #8
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %176) #8
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %175) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %174) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %173) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %172) #8
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %168) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %168) #8
  br label %1801

1801:                                             ; preds = %1800
  store i8 0, ptr %165, align 1, !tbaa !9
  br label %1731, !llvm.loop !135

1802:                                             ; preds = %1790
  %1803 = landingpad { ptr, i32 }
          cleanup
  %1804 = extractvalue { ptr, i32 } %1803, 0
  store ptr %1804, ptr %12, align 8
  %1805 = extractvalue { ptr, i32 } %1803, 1
  store i32 %1805, ptr %13, align 4
  br label %1835

1806:                                             ; preds = %1792
  %1807 = landingpad { ptr, i32 }
          cleanup
  %1808 = extractvalue { ptr, i32 } %1807, 0
  store ptr %1808, ptr %12, align 8
  %1809 = extractvalue { ptr, i32 } %1807, 1
  store i32 %1809, ptr %13, align 4
  br label %1834

1810:                                             ; preds = %1793
  %1811 = landingpad { ptr, i32 }
          cleanup
  %1812 = extractvalue { ptr, i32 } %1811, 0
  store ptr %1812, ptr %12, align 8
  %1813 = extractvalue { ptr, i32 } %1811, 1
  store i32 %1813, ptr %13, align 4
  br label %1833

1814:                                             ; preds = %1795
  %1815 = landingpad { ptr, i32 }
          cleanup
  %1816 = extractvalue { ptr, i32 } %1815, 0
  store ptr %1816, ptr %12, align 8
  %1817 = extractvalue { ptr, i32 } %1815, 1
  store i32 %1817, ptr %13, align 4
  br label %1832

1818:                                             ; preds = %1796
  %1819 = landingpad { ptr, i32 }
          cleanup
  %1820 = extractvalue { ptr, i32 } %1819, 0
  store ptr %1820, ptr %12, align 8
  %1821 = extractvalue { ptr, i32 } %1819, 1
  store i32 %1821, ptr %13, align 4
  br label %1831

1822:                                             ; preds = %1798
  %1823 = landingpad { ptr, i32 }
          cleanup
  %1824 = extractvalue { ptr, i32 } %1823, 0
  store ptr %1824, ptr %12, align 8
  %1825 = extractvalue { ptr, i32 } %1823, 1
  store i32 %1825, ptr %13, align 4
  br label %1830

1826:                                             ; preds = %1799
  %1827 = landingpad { ptr, i32 }
          cleanup
  %1828 = extractvalue { ptr, i32 } %1827, 0
  store ptr %1828, ptr %12, align 8
  %1829 = extractvalue { ptr, i32 } %1827, 1
  store i32 %1829, ptr %13, align 4
  call void @_ZNSt10unique_ptrIN7Context9RevisitorESt14default_deleteIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %171) #8
  call void @_ZNSt10unique_ptrIZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS4_7TypeRefEE20SplitSlicePatRevisitSt14default_deleteISA_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %172) #8
  br label %1830

1830:                                             ; preds = %1826, %1822
  call void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN20SplitSlicePatRevisitD2Ev(ptr noundef nonnull align 8 dereferenceable(44) %173) #8
  br label %1831

1831:                                             ; preds = %1830, %1818
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %177) #8
  br label %1832

1832:                                             ; preds = %1831, %1814
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %176) #8
  br label %1833

1833:                                             ; preds = %1832, %1810
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %175) #8
  br label %1834

1834:                                             ; preds = %1833, %1806
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %174) #8
  br label %1835

1835:                                             ; preds = %1834, %1802
  call void @llvm.lifetime.end.p0(i64 48, ptr %173) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %172) #8
  br label %1836

1836:                                             ; preds = %1835, %1786, %1785, %1773
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %168) #8
  br label %1837

1837:                                             ; preds = %1836, %1769
  call void @llvm.lifetime.end.p0(i64 8, ptr %168) #8
  br label %1838

1838:                                             ; preds = %1837, %1768, %1736
  call void @llvm.lifetime.end.p0(i64 8, ptr %166) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %165) #8
  br label %1844

1839:                                             ; preds = %1735
  br label %1840

1840:                                             ; preds = %1839
  store i8 0, ptr %165, align 1, !tbaa !9
  br label %1723, !llvm.loop !136

1841:                                             ; preds = %1726
  br label %1842

1842:                                             ; preds = %1841, %1721, %1615, %1561
  br label %1843

1843:                                             ; preds = %1842
  store i8 0, ptr %147, align 1, !tbaa !9
  br label %1525, !llvm.loop !137

1844:                                             ; preds = %1838, %1718, %1612, %1556, %1555, %1529
  call void @llvm.lifetime.end.p0(i64 8, ptr %148) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %147) #8
  br label %1895

1845:                                             ; preds = %1528
  br label %1846

1846:                                             ; preds = %1845
  store i8 0, ptr %147, align 1, !tbaa !9
  br label %1509, !llvm.loop !138

1847:                                             ; preds = %1512
  call void @llvm.lifetime.start.p0(i64 8, ptr %178) #8
  %1848 = load ptr, ptr %143, align 8, !tbaa !5
  %1849 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_SplitSlice", ptr %1848, i32 0, i32 0
  store ptr %1849, ptr %178, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %179) #8
  %1850 = load ptr, ptr %178, align 8, !tbaa !5
  %1851 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1850) #8
  %1852 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.417", ptr %179, i32 0, i32 0
  store ptr %1851, ptr %1852, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %180) #8
  %1853 = load ptr, ptr %178, align 8, !tbaa !5
  %1854 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1853) #8
  %1855 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.417", ptr %180, i32 0, i32 0
  store ptr %1854, ptr %1855, align 8
  br label %1856

1856:                                             ; preds = %1864, %1847
  %1857 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %179, ptr noundef nonnull align 8 dereferenceable(8) %180) #8
  br i1 %1857, label %1859, label %1858

1858:                                             ; preds = %1856
  store i32 151, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %180) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %179) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %178) #8
  br label %1870

1859:                                             ; preds = %1856
  call void @llvm.lifetime.start.p0(i64 8, ptr %181) #8
  %1860 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %179) #8
  store ptr %1860, ptr %181, align 8, !tbaa !5
  %1861 = load ptr, ptr %6, align 8, !tbaa !5
  %1862 = load ptr, ptr %181, align 8, !tbaa !5
  invoke void @_ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef nonnull align 8 dereferenceable(8) %1861, ptr noundef nonnull align 8 dereferenceable(212) %1862, ptr noundef nonnull align 8 dereferenceable(8) %144)
          to label %1863 unwind label %1866

1863:                                             ; preds = %1859
  call void @llvm.lifetime.end.p0(i64 8, ptr %181) #8
  br label %1864

1864:                                             ; preds = %1863
  %1865 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %179) #8
  br label %1856

1866:                                             ; preds = %1859
  %1867 = landingpad { ptr, i32 }
          cleanup
  %1868 = extractvalue { ptr, i32 } %1867, 0
  store ptr %1868, ptr %12, align 8
  %1869 = extractvalue { ptr, i32 } %1867, 1
  store i32 %1869, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %181) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %180) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %179) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %178) #8
  br label %1895

1870:                                             ; preds = %1858
  call void @llvm.lifetime.start.p0(i64 8, ptr %182) #8
  %1871 = load ptr, ptr %143, align 8, !tbaa !5
  %1872 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_SplitSlice", ptr %1871, i32 0, i32 2
  store ptr %1872, ptr %182, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %183) #8
  %1873 = load ptr, ptr %182, align 8, !tbaa !5
  %1874 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1873) #8
  %1875 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.417", ptr %183, i32 0, i32 0
  store ptr %1874, ptr %1875, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %184) #8
  %1876 = load ptr, ptr %182, align 8, !tbaa !5
  %1877 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1876) #8
  %1878 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.417", ptr %184, i32 0, i32 0
  store ptr %1877, ptr %1878, align 8
  br label %1879

1879:                                             ; preds = %1887, %1870
  %1880 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %183, ptr noundef nonnull align 8 dereferenceable(8) %184) #8
  br i1 %1880, label %1882, label %1881

1881:                                             ; preds = %1879
  store i32 153, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %184) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %183) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %182) #8
  br label %1893

1882:                                             ; preds = %1879
  call void @llvm.lifetime.start.p0(i64 8, ptr %185) #8
  %1883 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %183) #8
  store ptr %1883, ptr %185, align 8, !tbaa !5
  %1884 = load ptr, ptr %6, align 8, !tbaa !5
  %1885 = load ptr, ptr %185, align 8, !tbaa !5
  invoke void @_ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef nonnull align 8 dereferenceable(8) %1884, ptr noundef nonnull align 8 dereferenceable(212) %1885, ptr noundef nonnull align 8 dereferenceable(8) %144)
          to label %1886 unwind label %1889

1886:                                             ; preds = %1882
  call void @llvm.lifetime.end.p0(i64 8, ptr %185) #8
  br label %1887

1887:                                             ; preds = %1886
  %1888 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %183) #8
  br label %1879

1889:                                             ; preds = %1882
  %1890 = landingpad { ptr, i32 }
          cleanup
  %1891 = extractvalue { ptr, i32 } %1890, 0
  store ptr %1891, ptr %12, align 8
  %1892 = extractvalue { ptr, i32 } %1890, 1
  store i32 %1892, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %185) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %184) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %183) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %182) #8
  br label %1895

1893:                                             ; preds = %1881
  call void @llvm.lifetime.end.p0(i64 8, ptr %146) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %145) #8
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %144) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %144) #8
  br label %1894

1894:                                             ; preds = %1893
  store i8 0, ptr %142, align 1, !tbaa !9
  br label %1487, !llvm.loop !139

1895:                                             ; preds = %1889, %1866, %1844, %1517
  call void @llvm.lifetime.end.p0(i64 8, ptr %146) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %145) #8
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %144) #8
  br label %1896

1896:                                             ; preds = %1895, %1513
  call void @llvm.lifetime.end.p0(i64 8, ptr %144) #8
  br label %1897

1897:                                             ; preds = %1896, %1492
  call void @llvm.lifetime.end.p0(i64 8, ptr %143) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %142) #8
  br label %2622

1898:                                             ; preds = %1491
  br label %1899

1899:                                             ; preds = %1898
  store i8 0, ptr %142, align 1, !tbaa !9
  br label %1479, !llvm.loop !140

1900:                                             ; preds = %1482
  br label %2618

1901:                                             ; preds = %305
  call void @llvm.lifetime.start.p0(i64 1, ptr %186) #8
  store i8 1, ptr %186, align 1, !tbaa !9
  br label %1902

1902:                                             ; preds = %2141, %1901
  %1903 = load i8, ptr %186, align 1, !tbaa !9, !range !11, !noundef !12
  %1904 = trunc i8 %1903 to i1
  br i1 %1904, label %1906, label %1905

1905:                                             ; preds = %1902
  store i32 155, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %186) #8
  br label %2142

1906:                                             ; preds = %1902
  call void @llvm.lifetime.start.p0(i64 8, ptr %187) #8
  %1907 = load ptr, ptr %21, align 8, !tbaa !5
  %1908 = invoke noundef nonnull align 8 dereferenceable(112) ptr @_ZN3HIR7Pattern4Data12as_PathValueEv(ptr noundef nonnull align 8 dereferenceable(184) %1907)
          to label %1909 unwind label %1915

1909:                                             ; preds = %1906
  store ptr %1908, ptr %187, align 8, !tbaa !5
  br label %1910

1910:                                             ; preds = %2138, %1909
  %1911 = load ptr, ptr %187, align 8, !tbaa !5
  %1912 = load i8, ptr %186, align 1, !tbaa !9, !range !11, !noundef !12
  %1913 = trunc i8 %1912 to i1
  br i1 %1913, label %1919, label %1914

1914:                                             ; preds = %1910
  store i32 158, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %187) #8
  br label %2140

1915:                                             ; preds = %1906
  %1916 = landingpad { ptr, i32 }
          cleanup
  %1917 = extractvalue { ptr, i32 } %1916, 0
  store ptr %1917, ptr %12, align 8
  %1918 = extractvalue { ptr, i32 } %1916, 1
  store i32 %1918, ptr %13, align 4
  br label %2139

1919:                                             ; preds = %1910
  %1920 = load ptr, ptr %6, align 8, !tbaa !5
  %1921 = load ptr, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %188) #8
  %1922 = load ptr, ptr %6, align 8, !tbaa !5
  %1923 = load ptr, ptr %187, align 8, !tbaa !5
  %1924 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_PathValue", ptr %1923, i32 0, i32 0
  %1925 = load ptr, ptr %187, align 8, !tbaa !5
  %1926 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_PathValue", ptr %1925, i32 0, i32 1
  invoke void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN1H13get_path_typeERS_S2_RNS3_4PathERKNS4_11PathBindingE(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %188, ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef nonnull align 8 dereferenceable(8) %1922, ptr noundef nonnull align 8 dereferenceable(88) %1924, ptr noundef nonnull align 8 dereferenceable(24) %1926)
          to label %1927 unwind label %1933

1927:                                             ; preds = %1919
  invoke void @_ZN7Context12equate_typesERK4SpanRKN3HIR7TypeRefES6_(ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef nonnull align 8 dereferenceable(8) %1920, ptr noundef nonnull align 8 dereferenceable(8) %1921, ptr noundef nonnull align 8 dereferenceable(8) %188)
          to label %1928 unwind label %1937

1928:                                             ; preds = %1927
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %188) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %188) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr %189) #8
  store i8 1, ptr %189, align 1, !tbaa !9
  br label %1929

1929:                                             ; preds = %2136, %1928
  %1930 = load i8, ptr %189, align 1, !tbaa !9, !range !11, !noundef !12
  %1931 = trunc i8 %1930 to i1
  br i1 %1931, label %1942, label %1932

1932:                                             ; preds = %1929
  store i32 161, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %189) #8
  br label %2137

1933:                                             ; preds = %1919
  %1934 = landingpad { ptr, i32 }
          cleanup
  %1935 = extractvalue { ptr, i32 } %1934, 0
  store ptr %1935, ptr %12, align 8
  %1936 = extractvalue { ptr, i32 } %1934, 1
  store i32 %1936, ptr %13, align 4
  br label %1941

1937:                                             ; preds = %1927
  %1938 = landingpad { ptr, i32 }
          cleanup
  %1939 = extractvalue { ptr, i32 } %1938, 0
  store ptr %1939, ptr %12, align 8
  %1940 = extractvalue { ptr, i32 } %1938, 1
  store i32 %1940, ptr %13, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %188) #8
  br label %1941

1941:                                             ; preds = %1937, %1933
  call void @llvm.lifetime.end.p0(i64 8, ptr %188) #8
  br label %2139

1942:                                             ; preds = %1929
  call void @llvm.lifetime.start.p0(i64 8, ptr %190) #8
  %1943 = load ptr, ptr %187, align 8, !tbaa !5
  %1944 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_PathValue", ptr %1943, i32 0, i32 1
  store ptr %1944, ptr %190, align 8, !tbaa !5
  br label %1945

1945:                                             ; preds = %2133, %1942
  %1946 = load i8, ptr %189, align 1, !tbaa !9, !range !11, !noundef !12
  %1947 = trunc i8 %1946 to i1
  br i1 %1947, label %1949, label %1948

1948:                                             ; preds = %1945
  store i32 164, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %190) #8
  br label %2135

1949:                                             ; preds = %1945
  %1950 = load ptr, ptr %190, align 8, !tbaa !5
  %1951 = invoke noundef i32 @_ZNK3HIR7Pattern11PathBinding3tagEv(ptr noundef nonnull align 8 dereferenceable(24) %1950)
          to label %1952 unwind label %1953

1952:                                             ; preds = %1949
  switch i32 %1951, label %2132 [
    i32 0, label %1957
    i32 1, label %1958
    i32 2, label %2003
    i32 3, label %2035
  ]

1953:                                             ; preds = %1949
  %1954 = landingpad { ptr, i32 }
          cleanup
  %1955 = extractvalue { ptr, i32 } %1954, 0
  store ptr %1955, ptr %12, align 8
  %1956 = extractvalue { ptr, i32 } %1954, 1
  store i32 %1956, ptr %13, align 4
  br label %2134

1957:                                             ; preds = %1952
  call void @__assert_fail(ptr noundef @.str.20, ptr noundef @.str.21, i32 noundef 3571, ptr noundef @__PRETTY_FUNCTION__._ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE) #9
  unreachable

1958:                                             ; preds = %1952
  call void @llvm.lifetime.start.p0(i64 1, ptr %191) #8
  store i8 1, ptr %191, align 1, !tbaa !9
  br label %1959

1959:                                             ; preds = %2001, %1958
  %1960 = load i8, ptr %191, align 1, !tbaa !9, !range !11, !noundef !12
  %1961 = trunc i8 %1960 to i1
  br i1 %1961, label %1963, label %1962

1962:                                             ; preds = %1959
  store i32 168, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %191) #8
  br label %2002

1963:                                             ; preds = %1959
  call void @llvm.lifetime.start.p0(i64 8, ptr %192) #8
  %1964 = load ptr, ptr %190, align 8, !tbaa !5
  %1965 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZN3HIR7Pattern11PathBinding10as_UnboundEv(ptr noundef nonnull align 8 dereferenceable(24) %1964)
          to label %1966 unwind label %1972

1966:                                             ; preds = %1963
  store ptr %1965, ptr %192, align 8, !tbaa !5
  br label %1967

1967:                                             ; preds = %1998, %1966
  %1968 = load ptr, ptr %192, align 8, !tbaa !5
  %1969 = load i8, ptr %191, align 1, !tbaa !9, !range !11, !noundef !12
  %1970 = trunc i8 %1969 to i1
  br i1 %1970, label %1976, label %1971

1971:                                             ; preds = %1967
  store i32 171, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %192) #8
  br label %2000

1972:                                             ; preds = %1982, %1963
  %1973 = landingpad { ptr, i32 }
          cleanup
  %1974 = extractvalue { ptr, i32 } %1973, 0
  store ptr %1974, ptr %12, align 8
  %1975 = extractvalue { ptr, i32 } %1973, 1
  store i32 %1975, ptr %13, align 4
  br label %1999

1976:                                             ; preds = %1967
  br label %1977

1977:                                             ; preds = %1976
  call void @llvm.lifetime.start.p0(i64 8, ptr %193) #8
  %1978 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %193, ptr noundef nonnull align 8 dereferenceable(8) %1978)
          to label %1979 unwind label %1983

1979:                                             ; preds = %1977
  call void @llvm.lifetime.start.p0(i64 1, ptr %195) #8
  call void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE3$_9vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %194, ptr noundef nonnull align 1 dereferenceable(1) %195) #8
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %193, ptr noundef %194)
          to label %1980 unwind label %1987

1980:                                             ; preds = %1979
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %194) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %195) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %193) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %193) #8
  %1981 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1981, ptr noundef @.str.16)
          to label %1982 unwind label %1992

1982:                                             ; preds = %1980
  invoke void @__cxa_throw(ptr %1981, ptr @_ZTISt13runtime_error, ptr @_ZNSt13runtime_errorD1Ev) #10
          to label %2638 unwind label %1972

1983:                                             ; preds = %1977
  %1984 = landingpad { ptr, i32 }
          cleanup
  %1985 = extractvalue { ptr, i32 } %1984, 0
  store ptr %1985, ptr %12, align 8
  %1986 = extractvalue { ptr, i32 } %1984, 1
  store i32 %1986, ptr %13, align 4
  br label %1991

1987:                                             ; preds = %1979
  %1988 = landingpad { ptr, i32 }
          cleanup
  %1989 = extractvalue { ptr, i32 } %1988, 0
  store ptr %1989, ptr %12, align 8
  %1990 = extractvalue { ptr, i32 } %1988, 1
  store i32 %1990, ptr %13, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %194) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %195) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %193) #8
  br label %1991

1991:                                             ; preds = %1987, %1983
  call void @llvm.lifetime.end.p0(i64 8, ptr %193) #8
  br label %1999

1992:                                             ; preds = %1980
  %1993 = landingpad { ptr, i32 }
          cleanup
  %1994 = extractvalue { ptr, i32 } %1993, 0
  store ptr %1994, ptr %12, align 8
  %1995 = extractvalue { ptr, i32 } %1993, 1
  store i32 %1995, ptr %13, align 4
  call void @__cxa_free_exception(ptr %1981) #8
  br label %1999

1996:                                             ; No predecessors!
  br label %1997

1997:                                             ; preds = %1996
  br label %1998

1998:                                             ; preds = %1997
  store i8 0, ptr %191, align 1, !tbaa !9
  br label %1967, !llvm.loop !141

1999:                                             ; preds = %1992, %1991, %1972
  call void @llvm.lifetime.end.p0(i64 8, ptr %192) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %191) #8
  br label %2134

2000:                                             ; preds = %1971
  br label %2001

2001:                                             ; preds = %2000
  store i8 0, ptr %191, align 1, !tbaa !9
  br label %1959, !llvm.loop !142

2002:                                             ; preds = %1962
  br label %2132

2003:                                             ; preds = %1952
  call void @llvm.lifetime.start.p0(i64 1, ptr %196) #8
  store i8 1, ptr %196, align 1, !tbaa !9
  br label %2004

2004:                                             ; preds = %2033, %2003
  %2005 = load i8, ptr %196, align 1, !tbaa !9, !range !11, !noundef !12
  %2006 = trunc i8 %2005 to i1
  br i1 %2006, label %2008, label %2007

2007:                                             ; preds = %2004
  store i32 176, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %196) #8
  br label %2034

2008:                                             ; preds = %2004
  call void @llvm.lifetime.start.p0(i64 8, ptr %197) #8
  %2009 = load ptr, ptr %190, align 8, !tbaa !5
  %2010 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIR7Pattern11PathBinding9as_StructEv(ptr noundef nonnull align 8 dereferenceable(24) %2009)
          to label %2011 unwind label %2017

2011:                                             ; preds = %2008
  store ptr %2010, ptr %197, align 8, !tbaa !5
  br label %2012

2012:                                             ; preds = %2031, %2011
  %2013 = load ptr, ptr %197, align 8, !tbaa !5
  %2014 = load i8, ptr %196, align 1, !tbaa !9, !range !11, !noundef !12
  %2015 = trunc i8 %2014 to i1
  br i1 %2015, label %2021, label %2016

2016:                                             ; preds = %2012
  store i32 179, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %197) #8
  br label %2032

2017:                                             ; preds = %2021, %2008
  %2018 = landingpad { ptr, i32 }
          cleanup
  %2019 = extractvalue { ptr, i32 } %2018, 0
  store ptr %2019, ptr %12, align 8
  %2020 = extractvalue { ptr, i32 } %2018, 1
  store i32 %2020, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %197) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %196) #8
  br label %2134

2021:                                             ; preds = %2012
  %2022 = load ptr, ptr %197, align 8, !tbaa !5
  %2023 = load ptr, ptr %2022, align 8, !tbaa !5
  %2024 = getelementptr inbounds %"class.HIR::Struct", ptr %2023, i32 0, i32 3
  %2025 = invoke noundef zeroext i1 @_ZNK3HIR6Struct4Data7is_UnitEv(ptr noundef nonnull align 8 dereferenceable(32) %2024)
          to label %2026 unwind label %2017

2026:                                             ; preds = %2021
  br i1 %2025, label %2027, label %2028

2027:                                             ; preds = %2026
  br label %2030

2028:                                             ; preds = %2026
  call void @__assert_fail(ptr noundef @.str.31, ptr noundef @.str.21, i32 noundef 3575, ptr noundef @__PRETTY_FUNCTION__._ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE) #9
  unreachable

2029:                                             ; No predecessors!
  br label %2030

2030:                                             ; preds = %2029, %2027
  br label %2031

2031:                                             ; preds = %2030
  store i8 0, ptr %196, align 1, !tbaa !9
  br label %2012, !llvm.loop !143

2032:                                             ; preds = %2016
  br label %2033

2033:                                             ; preds = %2032
  store i8 0, ptr %196, align 1, !tbaa !9
  br label %2004, !llvm.loop !144

2034:                                             ; preds = %2007
  br label %2132

2035:                                             ; preds = %1952
  call void @llvm.lifetime.start.p0(i64 1, ptr %198) #8
  store i8 1, ptr %198, align 1, !tbaa !9
  br label %2036

2036:                                             ; preds = %2130, %2035
  %2037 = load i8, ptr %198, align 1, !tbaa !9, !range !11, !noundef !12
  %2038 = trunc i8 %2037 to i1
  br i1 %2038, label %2040, label %2039

2039:                                             ; preds = %2036
  store i32 182, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %198) #8
  br label %2131

2040:                                             ; preds = %2036
  call void @llvm.lifetime.start.p0(i64 8, ptr %199) #8
  %2041 = load ptr, ptr %190, align 8, !tbaa !5
  %2042 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZN3HIR7Pattern11PathBinding7as_EnumEv(ptr noundef nonnull align 8 dereferenceable(24) %2041)
          to label %2043 unwind label %2049

2043:                                             ; preds = %2040
  store ptr %2042, ptr %199, align 8, !tbaa !5
  br label %2044

2044:                                             ; preds = %2126, %2043
  %2045 = load ptr, ptr %199, align 8, !tbaa !5
  %2046 = load i8, ptr %198, align 1, !tbaa !9, !range !11, !noundef !12
  %2047 = trunc i8 %2046 to i1
  br i1 %2047, label %2053, label %2048

2048:                                             ; preds = %2044
  store i32 185, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %199) #8
  br label %2129

2049:                                             ; preds = %2040
  %2050 = landingpad { ptr, i32 }
          cleanup
  %2051 = extractvalue { ptr, i32 } %2050, 0
  store ptr %2051, ptr %12, align 8
  %2052 = extractvalue { ptr, i32 } %2050, 1
  store i32 %2052, ptr %13, align 4
  br label %2128

2053:                                             ; preds = %2044
  call void @llvm.lifetime.start.p0(i64 8, ptr %200) #8
  %2054 = load ptr, ptr %199, align 8, !tbaa !5
  %2055 = getelementptr inbounds %"struct.HIR::Pattern::PathBinding::Data_Enum", ptr %2054, i32 0, i32 0
  %2056 = load ptr, ptr %2055, align 8, !tbaa !145
  %2057 = getelementptr inbounds %"class.HIR::Enum", ptr %2056, i32 0, i32 3
  %2058 = invoke noundef ptr @_ZNK3HIR4Enum5Class8opt_DataEv(ptr noundef nonnull align 8 dereferenceable(40) %2057)
          to label %2059 unwind label %2077

2059:                                             ; preds = %2053
  store ptr %2058, ptr %200, align 8, !tbaa !5
  %2060 = load ptr, ptr %200, align 8, !tbaa !5
  %2061 = icmp ne ptr %2060, null
  br i1 %2061, label %2062, label %2125

2062:                                             ; preds = %2059
  br label %2063

2063:                                             ; preds = %2062
  %2064 = load ptr, ptr %199, align 8, !tbaa !5
  %2065 = getelementptr inbounds %"struct.HIR::Pattern::PathBinding::Data_Enum", ptr %2064, i32 0, i32 1
  %2066 = load i32, ptr %2065, align 8, !tbaa !147
  %2067 = zext i32 %2066 to i64
  %2068 = load ptr, ptr %200, align 8, !tbaa !5
  %2069 = call noundef i64 @_ZNKSt6vectorIN3HIR4Enum11DataVariantESaIS2_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %2068) #8
  %2070 = icmp ult i64 %2067, %2069
  br i1 %2070, label %2094, label %2071

2071:                                             ; preds = %2063
  call void @llvm.lifetime.start.p0(i64 8, ptr %201) #8
  %2072 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %201, ptr noundef nonnull align 8 dereferenceable(8) %2072)
          to label %2073 unwind label %2081

2073:                                             ; preds = %2071
  call void @llvm.lifetime.start.p0(i64 1, ptr %203) #8
  call void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE4$_10vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %202, ptr noundef nonnull align 1 dereferenceable(1) %203) #8
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %201, ptr noundef %202)
          to label %2074 unwind label %2085

2074:                                             ; preds = %2073
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %202) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %203) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %201) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %201) #8
  %2075 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %2075, ptr noundef @.str.16)
          to label %2076 unwind label %2090

2076:                                             ; preds = %2074
  invoke void @__cxa_throw(ptr %2075, ptr @_ZTISt13runtime_error, ptr @_ZNSt13runtime_errorD1Ev) #10
          to label %2638 unwind label %2077

2077:                                             ; preds = %2076, %2053
  %2078 = landingpad { ptr, i32 }
          cleanup
  %2079 = extractvalue { ptr, i32 } %2078, 0
  store ptr %2079, ptr %12, align 8
  %2080 = extractvalue { ptr, i32 } %2078, 1
  store i32 %2080, ptr %13, align 4
  br label %2127

2081:                                             ; preds = %2071
  %2082 = landingpad { ptr, i32 }
          cleanup
  %2083 = extractvalue { ptr, i32 } %2082, 0
  store ptr %2083, ptr %12, align 8
  %2084 = extractvalue { ptr, i32 } %2082, 1
  store i32 %2084, ptr %13, align 4
  br label %2089

2085:                                             ; preds = %2073
  %2086 = landingpad { ptr, i32 }
          cleanup
  %2087 = extractvalue { ptr, i32 } %2086, 0
  store ptr %2087, ptr %12, align 8
  %2088 = extractvalue { ptr, i32 } %2086, 1
  store i32 %2088, ptr %13, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %202) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %203) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %201) #8
  br label %2089

2089:                                             ; preds = %2085, %2081
  call void @llvm.lifetime.end.p0(i64 8, ptr %201) #8
  br label %2127

2090:                                             ; preds = %2074
  %2091 = landingpad { ptr, i32 }
          cleanup
  %2092 = extractvalue { ptr, i32 } %2091, 0
  store ptr %2092, ptr %12, align 8
  %2093 = extractvalue { ptr, i32 } %2091, 1
  store i32 %2093, ptr %13, align 4
  call void @__cxa_free_exception(ptr %2075) #8
  br label %2127

2094:                                             ; preds = %2063
  br label %2095

2095:                                             ; preds = %2094
  br label %2096

2096:                                             ; preds = %2095
  call void @llvm.lifetime.start.p0(i64 8, ptr %204) #8
  %2097 = load ptr, ptr %200, align 8, !tbaa !5
  %2098 = load ptr, ptr %199, align 8, !tbaa !5
  %2099 = getelementptr inbounds %"struct.HIR::Pattern::PathBinding::Data_Enum", ptr %2098, i32 0, i32 1
  %2100 = load i32, ptr %2099, align 8, !tbaa !147
  %2101 = zext i32 %2100 to i64
  %2102 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNKSt6vectorIN3HIR4Enum11DataVariantESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2097, i64 noundef %2101) #8
  store ptr %2102, ptr %204, align 8, !tbaa !5
  %2103 = load ptr, ptr %204, align 8, !tbaa !5
  %2104 = getelementptr inbounds %"struct.HIR::Enum::DataVariant", ptr %2103, i32 0, i32 2
  %2105 = invoke noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %2104)
          to label %2106 unwind label %2119

2106:                                             ; preds = %2096
  %2107 = invoke noundef zeroext i1 @_ZNK3HIR8TypeData8is_TupleEv(ptr noundef nonnull align 8 dereferenceable(184) %2105)
          to label %2108 unwind label %2119

2108:                                             ; preds = %2106
  br i1 %2107, label %2109, label %2123

2109:                                             ; preds = %2108
  %2110 = load ptr, ptr %204, align 8, !tbaa !5
  %2111 = getelementptr inbounds %"struct.HIR::Enum::DataVariant", ptr %2110, i32 0, i32 2
  %2112 = invoke noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %2111)
          to label %2113 unwind label %2119

2113:                                             ; preds = %2109
  %2114 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR8TypeData8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(184) %2112)
          to label %2115 unwind label %2119

2115:                                             ; preds = %2113
  %2116 = call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %2114) #8
  %2117 = icmp eq i64 %2116, 0
  br i1 %2117, label %2118, label %2123

2118:                                             ; preds = %2115
  br label %2124

2119:                                             ; preds = %2113, %2109, %2106, %2096
  %2120 = landingpad { ptr, i32 }
          cleanup
  %2121 = extractvalue { ptr, i32 } %2120, 0
  store ptr %2121, ptr %12, align 8
  %2122 = extractvalue { ptr, i32 } %2120, 1
  store i32 %2122, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %204) #8
  br label %2127

2123:                                             ; preds = %2115, %2108
  br label %2124

2124:                                             ; preds = %2123, %2118
  call void @llvm.lifetime.end.p0(i64 8, ptr %204) #8
  br label %2125

2125:                                             ; preds = %2124, %2059
  call void @llvm.lifetime.end.p0(i64 8, ptr %200) #8
  br label %2126

2126:                                             ; preds = %2125
  store i8 0, ptr %198, align 1, !tbaa !9
  br label %2044, !llvm.loop !148

2127:                                             ; preds = %2119, %2090, %2089, %2077
  call void @llvm.lifetime.end.p0(i64 8, ptr %200) #8
  br label %2128

2128:                                             ; preds = %2127, %2049
  call void @llvm.lifetime.end.p0(i64 8, ptr %199) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %198) #8
  br label %2134

2129:                                             ; preds = %2048
  br label %2130

2130:                                             ; preds = %2129
  store i8 0, ptr %198, align 1, !tbaa !9
  br label %2036, !llvm.loop !149

2131:                                             ; preds = %2039
  br label %2132

2132:                                             ; preds = %2131, %2034, %2002, %1952
  br label %2133

2133:                                             ; preds = %2132
  store i8 0, ptr %189, align 1, !tbaa !9
  br label %1945, !llvm.loop !150

2134:                                             ; preds = %2128, %2017, %1999, %1953
  call void @llvm.lifetime.end.p0(i64 8, ptr %190) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %189) #8
  br label %2139

2135:                                             ; preds = %1948
  br label %2136

2136:                                             ; preds = %2135
  store i8 0, ptr %189, align 1, !tbaa !9
  br label %1929, !llvm.loop !151

2137:                                             ; preds = %1932
  br label %2138

2138:                                             ; preds = %2137
  store i8 0, ptr %186, align 1, !tbaa !9
  br label %1910, !llvm.loop !152

2139:                                             ; preds = %2134, %1941, %1915
  call void @llvm.lifetime.end.p0(i64 8, ptr %187) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %186) #8
  br label %2622

2140:                                             ; preds = %1914
  br label %2141

2141:                                             ; preds = %2140
  store i8 0, ptr %186, align 1, !tbaa !9
  br label %1902, !llvm.loop !153

2142:                                             ; preds = %1905
  br label %2618

2143:                                             ; preds = %305
  call void @llvm.lifetime.start.p0(i64 1, ptr %205) #8
  store i8 1, ptr %205, align 1, !tbaa !9
  br label %2144

2144:                                             ; preds = %2377, %2143
  %2145 = load i8, ptr %205, align 1, !tbaa !9, !range !11, !noundef !12
  %2146 = trunc i8 %2145 to i1
  br i1 %2146, label %2148, label %2147

2147:                                             ; preds = %2144
  store i32 190, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %205) #8
  br label %2378

2148:                                             ; preds = %2144
  call void @llvm.lifetime.start.p0(i64 8, ptr %206) #8
  %2149 = load ptr, ptr %21, align 8, !tbaa !5
  %2150 = invoke noundef nonnull align 8 dereferenceable(172) ptr @_ZN3HIR7Pattern4Data12as_PathTupleEv(ptr noundef nonnull align 8 dereferenceable(184) %2149)
          to label %2151 unwind label %2157

2151:                                             ; preds = %2148
  store ptr %2150, ptr %206, align 8, !tbaa !5
  br label %2152

2152:                                             ; preds = %2370, %2151
  %2153 = load ptr, ptr %206, align 8, !tbaa !5
  %2154 = load i8, ptr %205, align 1, !tbaa !9, !range !11, !noundef !12
  %2155 = trunc i8 %2154 to i1
  br i1 %2155, label %2161, label %2156

2156:                                             ; preds = %2152
  store i32 193, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %206) #8
  br label %2376

2157:                                             ; preds = %2148
  %2158 = landingpad { ptr, i32 }
          cleanup
  %2159 = extractvalue { ptr, i32 } %2158, 0
  store ptr %2159, ptr %12, align 8
  %2160 = extractvalue { ptr, i32 } %2158, 1
  store i32 %2160, ptr %13, align 4
  br label %2375

2161:                                             ; preds = %2152
  %2162 = load ptr, ptr %6, align 8, !tbaa !5
  %2163 = load ptr, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %207) #8
  %2164 = load ptr, ptr %6, align 8, !tbaa !5
  %2165 = load ptr, ptr %206, align 8, !tbaa !5
  %2166 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_PathTuple", ptr %2165, i32 0, i32 0
  %2167 = load ptr, ptr %206, align 8, !tbaa !5
  %2168 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_PathTuple", ptr %2167, i32 0, i32 1
  invoke void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN1H13get_path_typeERS_S2_RNS3_4PathERKNS4_11PathBindingE(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %207, ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef nonnull align 8 dereferenceable(8) %2164, ptr noundef nonnull align 8 dereferenceable(88) %2166, ptr noundef nonnull align 8 dereferenceable(24) %2168)
          to label %2169 unwind label %2216

2169:                                             ; preds = %2161
  invoke void @_ZN7Context12equate_typesERK4SpanRKN3HIR7TypeRefES6_(ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef nonnull align 8 dereferenceable(8) %2162, ptr noundef nonnull align 8 dereferenceable(8) %2163, ptr noundef nonnull align 8 dereferenceable(8) %207)
          to label %2170 unwind label %2220

2170:                                             ; preds = %2169
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %207) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %207) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %208) #8
  %2171 = load ptr, ptr %6, align 8, !tbaa !5
  %2172 = load ptr, ptr %206, align 8, !tbaa !5
  %2173 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_PathTuple", ptr %2172, i32 0, i32 0
  %2174 = load ptr, ptr %206, align 8, !tbaa !5
  %2175 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_PathTuple", ptr %2174, i32 0, i32 1
  %2176 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3HIR17pattern_get_tupleERK4SpanRKNS_4PathERKNS_7Pattern11PathBindingE(ptr noundef nonnull align 8 dereferenceable(8) %2171, ptr noundef nonnull align 8 dereferenceable(88) %2173, ptr noundef nonnull align 8 dereferenceable(24) %2175)
          to label %2177 unwind label %2225

2177:                                             ; preds = %2170
  store ptr %2176, ptr %208, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 128, ptr %209) #8
  %2178 = load ptr, ptr %206, align 8, !tbaa !5
  %2179 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_PathTuple", ptr %2178, i32 0, i32 0
  %2180 = getelementptr inbounds %"class.HIR::Path", ptr %2179, i32 0, i32 0
  %2181 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZN3HIR4Path4Data10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(88) %2180)
          to label %2182 unwind label %2229

2182:                                             ; preds = %2177
  %2183 = getelementptr inbounds %"class.HIR::GenericPath", ptr %2181, i32 0, i32 1
  invoke void @_ZN17MonomorphStatePtrC2EPKN3HIR7TypeRefEPKNS0_10PathParamsES6_S6_S6_(ptr noundef nonnull align 8 dereferenceable(128) %209, ptr noundef null, ptr noundef %2183, ptr noundef null, ptr noundef null, ptr noundef null)
          to label %2184 unwind label %2229

2184:                                             ; preds = %2182
  call void @llvm.lifetime.start.p0(i64 8, ptr %210) #8
  invoke void @_ZN3HIR7TypeRefC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %210)
          to label %2185 unwind label %2233

2185:                                             ; preds = %2184
  call void @llvm.lifetime.start.p0(i64 24, ptr %211) #8
  %2186 = getelementptr inbounds %class.anon.462, ptr %211, i32 0, i32 0
  store ptr %210, ptr %2186, align 8, !tbaa !5
  %2187 = getelementptr inbounds %class.anon.462, ptr %211, i32 0, i32 1
  store ptr %209, ptr %2187, align 8, !tbaa !5
  %2188 = getelementptr inbounds %class.anon.462, ptr %211, i32 0, i32 2
  %2189 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %2189, ptr %2188, align 8, !tbaa !5
  %2190 = load ptr, ptr %206, align 8, !tbaa !5
  %2191 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_PathTuple", ptr %2190, i32 0, i32 3
  %2192 = load i8, ptr %2191, align 8, !tbaa !154, !range !11, !noundef !12
  %2193 = trunc i8 %2192 to i1
  br i1 %2193, label %2194, label %2257

2194:                                             ; preds = %2185
  br label %2195

2195:                                             ; preds = %2194
  %2196 = load ptr, ptr %206, align 8, !tbaa !5
  %2197 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_PathTuple", ptr %2196, i32 0, i32 2
  %2198 = call noundef i64 @_ZNKSt6vectorIN3HIR7PatternESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %2197) #8
  %2199 = load ptr, ptr %206, align 8, !tbaa !5
  %2200 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_PathTuple", ptr %2199, i32 0, i32 5
  %2201 = call noundef i64 @_ZNKSt6vectorIN3HIR7PatternESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %2200) #8
  %2202 = add i64 %2198, %2201
  %2203 = load ptr, ptr %208, align 8, !tbaa !5
  %2204 = call noundef i64 @_ZNKSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %2203) #8
  %2205 = icmp ule i64 %2202, %2204
  br i1 %2205, label %2254, label %2206

2206:                                             ; preds = %2195
  call void @llvm.lifetime.start.p0(i64 8, ptr %212) #8
  %2207 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %212, ptr noundef nonnull align 8 dereferenceable(8) %2207)
          to label %2208 unwind label %2237

2208:                                             ; preds = %2206
  call void @llvm.lifetime.start.p0(i64 16, ptr %214) #8
  %2209 = getelementptr inbounds %class.anon.463, ptr %214, i32 0, i32 0
  %2210 = load ptr, ptr %208, align 8, !tbaa !5
  store ptr %2210, ptr %2209, align 8, !tbaa !5
  %2211 = getelementptr inbounds %class.anon.463, ptr %214, i32 0, i32 1
  %2212 = load ptr, ptr %206, align 8, !tbaa !5
  store ptr %2212, ptr %2211, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE4$_11vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %213, ptr noundef nonnull align 8 dereferenceable(16) %214) #8
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %212, ptr noundef %213)
          to label %2213 unwind label %2241

2213:                                             ; preds = %2208
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %213) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %214) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %212) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %212) #8
  %2214 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %2214, ptr noundef @.str.16)
          to label %2215 unwind label %2246

2215:                                             ; preds = %2213
  invoke void @__cxa_throw(ptr %2214, ptr @_ZTISt13runtime_error, ptr @_ZNSt13runtime_errorD1Ev) #10
          to label %2638 unwind label %2250

2216:                                             ; preds = %2161
  %2217 = landingpad { ptr, i32 }
          cleanup
  %2218 = extractvalue { ptr, i32 } %2217, 0
  store ptr %2218, ptr %12, align 8
  %2219 = extractvalue { ptr, i32 } %2217, 1
  store i32 %2219, ptr %13, align 4
  br label %2224

2220:                                             ; preds = %2169
  %2221 = landingpad { ptr, i32 }
          cleanup
  %2222 = extractvalue { ptr, i32 } %2221, 0
  store ptr %2222, ptr %12, align 8
  %2223 = extractvalue { ptr, i32 } %2221, 1
  store i32 %2223, ptr %13, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %207) #8
  br label %2224

2224:                                             ; preds = %2220, %2216
  call void @llvm.lifetime.end.p0(i64 8, ptr %207) #8
  br label %2375

2225:                                             ; preds = %2170
  %2226 = landingpad { ptr, i32 }
          cleanup
  %2227 = extractvalue { ptr, i32 } %2226, 0
  store ptr %2227, ptr %12, align 8
  %2228 = extractvalue { ptr, i32 } %2226, 1
  store i32 %2228, ptr %13, align 4
  br label %2374

2229:                                             ; preds = %2182, %2177
  %2230 = landingpad { ptr, i32 }
          cleanup
  %2231 = extractvalue { ptr, i32 } %2230, 0
  store ptr %2231, ptr %12, align 8
  %2232 = extractvalue { ptr, i32 } %2230, 1
  store i32 %2232, ptr %13, align 4
  br label %2373

2233:                                             ; preds = %2184
  %2234 = landingpad { ptr, i32 }
          cleanup
  %2235 = extractvalue { ptr, i32 } %2234, 0
  store ptr %2235, ptr %12, align 8
  %2236 = extractvalue { ptr, i32 } %2234, 1
  store i32 %2236, ptr %13, align 4
  br label %2372

2237:                                             ; preds = %2206
  %2238 = landingpad { ptr, i32 }
          cleanup
  %2239 = extractvalue { ptr, i32 } %2238, 0
  store ptr %2239, ptr %12, align 8
  %2240 = extractvalue { ptr, i32 } %2238, 1
  store i32 %2240, ptr %13, align 4
  br label %2245

2241:                                             ; preds = %2208
  %2242 = landingpad { ptr, i32 }
          cleanup
  %2243 = extractvalue { ptr, i32 } %2242, 0
  store ptr %2243, ptr %12, align 8
  %2244 = extractvalue { ptr, i32 } %2242, 1
  store i32 %2244, ptr %13, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %213) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %214) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %212) #8
  br label %2245

2245:                                             ; preds = %2241, %2237
  call void @llvm.lifetime.end.p0(i64 8, ptr %212) #8
  br label %2371

2246:                                             ; preds = %2213
  %2247 = landingpad { ptr, i32 }
          cleanup
  %2248 = extractvalue { ptr, i32 } %2247, 0
  store ptr %2248, ptr %12, align 8
  %2249 = extractvalue { ptr, i32 } %2247, 1
  store i32 %2249, ptr %13, align 4
  call void @__cxa_free_exception(ptr %2214) #8
  br label %2371

2250:                                             ; preds = %2274, %2215
  %2251 = landingpad { ptr, i32 }
          cleanup
  %2252 = extractvalue { ptr, i32 } %2251, 0
  store ptr %2252, ptr %12, align 8
  %2253 = extractvalue { ptr, i32 } %2251, 1
  store i32 %2253, ptr %13, align 4
  br label %2371

2254:                                             ; preds = %2195
  br label %2255

2255:                                             ; preds = %2254
  br label %2256

2256:                                             ; preds = %2255
  br label %2299

2257:                                             ; preds = %2185
  br label %2258

2258:                                             ; preds = %2257
  %2259 = load ptr, ptr %206, align 8, !tbaa !5
  %2260 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_PathTuple", ptr %2259, i32 0, i32 2
  %2261 = call noundef i64 @_ZNKSt6vectorIN3HIR7PatternESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %2260) #8
  %2262 = load ptr, ptr %208, align 8, !tbaa !5
  %2263 = call noundef i64 @_ZNKSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %2262) #8
  %2264 = icmp eq i64 %2261, %2263
  br i1 %2264, label %2288, label %2265

2265:                                             ; preds = %2258
  call void @llvm.lifetime.start.p0(i64 8, ptr %215) #8
  %2266 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %215, ptr noundef nonnull align 8 dereferenceable(8) %2266)
          to label %2267 unwind label %2275

2267:                                             ; preds = %2265
  call void @llvm.lifetime.start.p0(i64 16, ptr %217) #8
  %2268 = getelementptr inbounds %class.anon.464, ptr %217, i32 0, i32 0
  %2269 = load ptr, ptr %208, align 8, !tbaa !5
  store ptr %2269, ptr %2268, align 8, !tbaa !5
  %2270 = getelementptr inbounds %class.anon.464, ptr %217, i32 0, i32 1
  %2271 = load ptr, ptr %206, align 8, !tbaa !5
  store ptr %2271, ptr %2270, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE4$_12vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %216, ptr noundef nonnull align 8 dereferenceable(16) %217) #8
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %215, ptr noundef %216)
          to label %2272 unwind label %2279

2272:                                             ; preds = %2267
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %216) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %217) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %215) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %215) #8
  %2273 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %2273, ptr noundef @.str.16)
          to label %2274 unwind label %2284

2274:                                             ; preds = %2272
  invoke void @__cxa_throw(ptr %2273, ptr @_ZTISt13runtime_error, ptr @_ZNSt13runtime_errorD1Ev) #10
          to label %2638 unwind label %2250

2275:                                             ; preds = %2265
  %2276 = landingpad { ptr, i32 }
          cleanup
  %2277 = extractvalue { ptr, i32 } %2276, 0
  store ptr %2277, ptr %12, align 8
  %2278 = extractvalue { ptr, i32 } %2276, 1
  store i32 %2278, ptr %13, align 4
  br label %2283

2279:                                             ; preds = %2267
  %2280 = landingpad { ptr, i32 }
          cleanup
  %2281 = extractvalue { ptr, i32 } %2280, 0
  store ptr %2281, ptr %12, align 8
  %2282 = extractvalue { ptr, i32 } %2280, 1
  store i32 %2282, ptr %13, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %216) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %217) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %215) #8
  br label %2283

2283:                                             ; preds = %2279, %2275
  call void @llvm.lifetime.end.p0(i64 8, ptr %215) #8
  br label %2371

2284:                                             ; preds = %2272
  %2285 = landingpad { ptr, i32 }
          cleanup
  %2286 = extractvalue { ptr, i32 } %2285, 0
  store ptr %2286, ptr %12, align 8
  %2287 = extractvalue { ptr, i32 } %2285, 1
  store i32 %2287, ptr %13, align 4
  call void @__cxa_free_exception(ptr %2273) #8
  br label %2371

2288:                                             ; preds = %2258
  br label %2289

2289:                                             ; preds = %2288
  br label %2290

2290:                                             ; preds = %2289
  %2291 = load ptr, ptr %206, align 8, !tbaa !5
  %2292 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_PathTuple", ptr %2291, i32 0, i32 5
  %2293 = call noundef i64 @_ZNKSt6vectorIN3HIR7PatternESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %2292) #8
  %2294 = icmp eq i64 %2293, 0
  br i1 %2294, label %2295, label %2296

2295:                                             ; preds = %2290
  br label %2298

2296:                                             ; preds = %2290
  call void @__assert_fail(ptr noundef @.str.32, ptr noundef @.str.21, i32 noundef 3613, ptr noundef @__PRETTY_FUNCTION__._ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE) #9
  unreachable

2297:                                             ; No predecessors!
  br label %2298

2298:                                             ; preds = %2297, %2295
  br label %2299

2299:                                             ; preds = %2298, %2256
  %2300 = load ptr, ptr %208, align 8, !tbaa !5
  %2301 = call noundef i64 @_ZNKSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %2300) #8
  %2302 = trunc i64 %2301 to i32
  %2303 = load ptr, ptr %206, align 8, !tbaa !5
  %2304 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_PathTuple", ptr %2303, i32 0, i32 6
  store i32 %2302, ptr %2304, align 8, !tbaa !161
  call void @llvm.lifetime.start.p0(i64 8, ptr %218) #8
  store i64 0, ptr %218, align 8, !tbaa !132
  br label %2305

2305:                                             ; preds = %2326, %2299
  %2306 = load i64, ptr %218, align 8, !tbaa !132
  %2307 = load ptr, ptr %206, align 8, !tbaa !5
  %2308 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_PathTuple", ptr %2307, i32 0, i32 2
  %2309 = call noundef i64 @_ZNKSt6vectorIN3HIR7PatternESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %2308) #8
  %2310 = icmp ult i64 %2306, %2309
  br i1 %2310, label %2312, label %2311

2311:                                             ; preds = %2305
  store i32 200, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %218) #8
  br label %2333

2312:                                             ; preds = %2305
  call void @llvm.lifetime.start.p0(i64 8, ptr %219) #8
  %2313 = load ptr, ptr %206, align 8, !tbaa !5
  %2314 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_PathTuple", ptr %2313, i32 0, i32 2
  %2315 = load i64, ptr %218, align 8, !tbaa !132
  %2316 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2314, i64 noundef %2315) #8
  store ptr %2316, ptr %219, align 8, !tbaa !5
  %2317 = load ptr, ptr %6, align 8, !tbaa !5
  %2318 = load ptr, ptr %219, align 8, !tbaa !5
  %2319 = load ptr, ptr %208, align 8, !tbaa !5
  %2320 = load i64, ptr %218, align 8, !tbaa !132
  %2321 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNKSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2319, i64 noundef %2320) #8
  %2322 = getelementptr inbounds %"struct.HIR::VisEnt", ptr %2321, i32 0, i32 1
  %2323 = invoke noundef nonnull align 8 dereferenceable(8) ptr @"_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEENK4$_14clES8_"(ptr noundef nonnull align 8 dereferenceable(24) %211, ptr noundef nonnull align 8 dereferenceable(8) %2322)
          to label %2324 unwind label %2329

2324:                                             ; preds = %2312
  invoke void @_ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef nonnull align 8 dereferenceable(8) %2317, ptr noundef nonnull align 8 dereferenceable(212) %2318, ptr noundef nonnull align 8 dereferenceable(8) %2323)
          to label %2325 unwind label %2329

2325:                                             ; preds = %2324
  call void @llvm.lifetime.end.p0(i64 8, ptr %219) #8
  br label %2326

2326:                                             ; preds = %2325
  %2327 = load i64, ptr %218, align 8, !tbaa !132
  %2328 = add i64 %2327, 1
  store i64 %2328, ptr %218, align 8, !tbaa !132
  br label %2305, !llvm.loop !162

2329:                                             ; preds = %2324, %2312
  %2330 = landingpad { ptr, i32 }
          cleanup
  %2331 = extractvalue { ptr, i32 } %2330, 0
  store ptr %2331, ptr %12, align 8
  %2332 = extractvalue { ptr, i32 } %2330, 1
  store i32 %2332, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %219) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %218) #8
  br label %2371

2333:                                             ; preds = %2311
  call void @llvm.lifetime.start.p0(i64 8, ptr %220) #8
  store i64 0, ptr %220, align 8, !tbaa !132
  br label %2334

2334:                                             ; preds = %2362, %2333
  %2335 = load i64, ptr %220, align 8, !tbaa !132
  %2336 = load ptr, ptr %206, align 8, !tbaa !5
  %2337 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_PathTuple", ptr %2336, i32 0, i32 5
  %2338 = call noundef i64 @_ZNKSt6vectorIN3HIR7PatternESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %2337) #8
  %2339 = icmp ult i64 %2335, %2338
  br i1 %2339, label %2341, label %2340

2340:                                             ; preds = %2334
  store i32 203, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %220) #8
  br label %2369

2341:                                             ; preds = %2334
  call void @llvm.lifetime.start.p0(i64 8, ptr %221) #8
  %2342 = load ptr, ptr %206, align 8, !tbaa !5
  %2343 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_PathTuple", ptr %2342, i32 0, i32 5
  %2344 = load i64, ptr %220, align 8, !tbaa !132
  %2345 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2343, i64 noundef %2344) #8
  store ptr %2345, ptr %221, align 8, !tbaa !5
  %2346 = load ptr, ptr %6, align 8, !tbaa !5
  %2347 = load ptr, ptr %221, align 8, !tbaa !5
  %2348 = load ptr, ptr %208, align 8, !tbaa !5
  %2349 = load ptr, ptr %208, align 8, !tbaa !5
  %2350 = call noundef i64 @_ZNKSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %2349) #8
  %2351 = load ptr, ptr %206, align 8, !tbaa !5
  %2352 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_PathTuple", ptr %2351, i32 0, i32 5
  %2353 = call noundef i64 @_ZNKSt6vectorIN3HIR7PatternESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %2352) #8
  %2354 = sub i64 %2350, %2353
  %2355 = load i64, ptr %220, align 8, !tbaa !132
  %2356 = add i64 %2354, %2355
  %2357 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNKSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2348, i64 noundef %2356) #8
  %2358 = getelementptr inbounds %"struct.HIR::VisEnt", ptr %2357, i32 0, i32 1
  %2359 = invoke noundef nonnull align 8 dereferenceable(8) ptr @"_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEENK4$_14clES8_"(ptr noundef nonnull align 8 dereferenceable(24) %211, ptr noundef nonnull align 8 dereferenceable(8) %2358)
          to label %2360 unwind label %2365

2360:                                             ; preds = %2341
  invoke void @_ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef nonnull align 8 dereferenceable(8) %2346, ptr noundef nonnull align 8 dereferenceable(212) %2347, ptr noundef nonnull align 8 dereferenceable(8) %2359)
          to label %2361 unwind label %2365

2361:                                             ; preds = %2360
  call void @llvm.lifetime.end.p0(i64 8, ptr %221) #8
  br label %2362

2362:                                             ; preds = %2361
  %2363 = load i64, ptr %220, align 8, !tbaa !132
  %2364 = add i64 %2363, 1
  store i64 %2364, ptr %220, align 8, !tbaa !132
  br label %2334, !llvm.loop !163

2365:                                             ; preds = %2360, %2341
  %2366 = landingpad { ptr, i32 }
          cleanup
  %2367 = extractvalue { ptr, i32 } %2366, 0
  store ptr %2367, ptr %12, align 8
  %2368 = extractvalue { ptr, i32 } %2366, 1
  store i32 %2368, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %221) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %220) #8
  br label %2371

2369:                                             ; preds = %2340
  call void @llvm.lifetime.end.p0(i64 24, ptr %211) #8
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %210) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %210) #8
  call void @_ZN13MonomorphiserD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %209) #8
  call void @llvm.lifetime.end.p0(i64 128, ptr %209) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %208) #8
  br label %2370

2370:                                             ; preds = %2369
  store i8 0, ptr %205, align 1, !tbaa !9
  br label %2152, !llvm.loop !164

2371:                                             ; preds = %2365, %2329, %2284, %2283, %2250, %2246, %2245
  call void @llvm.lifetime.end.p0(i64 24, ptr %211) #8
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %210) #8
  br label %2372

2372:                                             ; preds = %2371, %2233
  call void @llvm.lifetime.end.p0(i64 8, ptr %210) #8
  call void @_ZN13MonomorphiserD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %209) #8
  br label %2373

2373:                                             ; preds = %2372, %2229
  call void @llvm.lifetime.end.p0(i64 128, ptr %209) #8
  br label %2374

2374:                                             ; preds = %2373, %2225
  call void @llvm.lifetime.end.p0(i64 8, ptr %208) #8
  br label %2375

2375:                                             ; preds = %2374, %2224, %2157
  call void @llvm.lifetime.end.p0(i64 8, ptr %206) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %205) #8
  br label %2622

2376:                                             ; preds = %2156
  br label %2377

2377:                                             ; preds = %2376
  store i8 0, ptr %205, align 1, !tbaa !9
  br label %2144, !llvm.loop !165

2378:                                             ; preds = %2147
  br label %2618

2379:                                             ; preds = %305
  call void @llvm.lifetime.start.p0(i64 1, ptr %222) #8
  store i8 1, ptr %222, align 1, !tbaa !9
  br label %2380

2380:                                             ; preds = %2567, %2379
  %2381 = load i8, ptr %222, align 1, !tbaa !9, !range !11, !noundef !12
  %2382 = trunc i8 %2381 to i1
  br i1 %2382, label %2384, label %2383

2383:                                             ; preds = %2380
  store i32 206, ptr %20, align 4
  br label %2568

2384:                                             ; preds = %2380
  call void @llvm.lifetime.start.p0(i64 8, ptr %223) #8
  %2385 = load ptr, ptr %21, align 8, !tbaa !5
  %2386 = invoke noundef nonnull align 8 dereferenceable(137) ptr @_ZN3HIR7Pattern4Data12as_PathNamedEv(ptr noundef nonnull align 8 dereferenceable(184) %2385)
          to label %2387 unwind label %2393

2387:                                             ; preds = %2384
  store ptr %2386, ptr %223, align 8, !tbaa !5
  br label %2388

2388:                                             ; preds = %2560, %2387
  %2389 = load ptr, ptr %223, align 8, !tbaa !5
  %2390 = load i8, ptr %222, align 1, !tbaa !9, !range !11, !noundef !12
  %2391 = trunc i8 %2390 to i1
  br i1 %2391, label %2397, label %2392

2392:                                             ; preds = %2388
  store i32 209, ptr %20, align 4
  br label %2563

2393:                                             ; preds = %2406, %2384
  %2394 = landingpad { ptr, i32 }
          cleanup
  %2395 = extractvalue { ptr, i32 } %2394, 0
  store ptr %2395, ptr %12, align 8
  %2396 = extractvalue { ptr, i32 } %2394, 1
  store i32 %2396, ptr %13, align 4
  br label %2565

2397:                                             ; preds = %2388
  %2398 = load ptr, ptr %6, align 8, !tbaa !5
  %2399 = load ptr, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %224) #8
  %2400 = load ptr, ptr %6, align 8, !tbaa !5
  %2401 = load ptr, ptr %223, align 8, !tbaa !5
  %2402 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_PathNamed", ptr %2401, i32 0, i32 0
  %2403 = load ptr, ptr %223, align 8, !tbaa !5
  %2404 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_PathNamed", ptr %2403, i32 0, i32 1
  invoke void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN1H13get_path_typeERS_S2_RNS3_4PathERKNS4_11PathBindingE(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %224, ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef nonnull align 8 dereferenceable(8) %2400, ptr noundef nonnull align 8 dereferenceable(88) %2402, ptr noundef nonnull align 8 dereferenceable(24) %2404)
          to label %2405 unwind label %2411

2405:                                             ; preds = %2397
  invoke void @_ZN7Context12equate_typesERK4SpanRKN3HIR7TypeRefES6_(ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef nonnull align 8 dereferenceable(8) %2398, ptr noundef nonnull align 8 dereferenceable(8) %2399, ptr noundef nonnull align 8 dereferenceable(8) %224)
          to label %2406 unwind label %2415

2406:                                             ; preds = %2405
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %224) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %224) #8
  %2407 = load ptr, ptr %223, align 8, !tbaa !5
  %2408 = invoke noundef zeroext i1 @_ZNK3HIR7Pattern4Data14Data_PathNamed11is_wildcardEv(ptr noundef nonnull align 8 dereferenceable(137) %2407)
          to label %2409 unwind label %2393

2409:                                             ; preds = %2406
  br i1 %2408, label %2410, label %2420

2410:                                             ; preds = %2409
  store i32 1, ptr %20, align 4
  br label %2563

2411:                                             ; preds = %2397
  %2412 = landingpad { ptr, i32 }
          cleanup
  %2413 = extractvalue { ptr, i32 } %2412, 0
  store ptr %2413, ptr %12, align 8
  %2414 = extractvalue { ptr, i32 } %2412, 1
  store i32 %2414, ptr %13, align 4
  br label %2419

2415:                                             ; preds = %2405
  %2416 = landingpad { ptr, i32 }
          cleanup
  %2417 = extractvalue { ptr, i32 } %2416, 0
  store ptr %2417, ptr %12, align 8
  %2418 = extractvalue { ptr, i32 } %2416, 1
  store i32 %2418, ptr %13, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %224) #8
  br label %2419

2419:                                             ; preds = %2415, %2411
  call void @llvm.lifetime.end.p0(i64 8, ptr %224) #8
  br label %2565

2420:                                             ; preds = %2409
  call void @llvm.lifetime.start.p0(i64 8, ptr %225) #8
  %2421 = load ptr, ptr %6, align 8, !tbaa !5
  %2422 = load ptr, ptr %223, align 8, !tbaa !5
  %2423 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_PathNamed", ptr %2422, i32 0, i32 0
  %2424 = load ptr, ptr %223, align 8, !tbaa !5
  %2425 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_PathNamed", ptr %2424, i32 0, i32 1
  %2426 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3HIR17pattern_get_namedERK4SpanRKNS_4PathERKNS_7Pattern11PathBindingE(ptr noundef nonnull align 8 dereferenceable(8) %2421, ptr noundef nonnull align 8 dereferenceable(88) %2423, ptr noundef nonnull align 8 dereferenceable(24) %2425)
          to label %2427 unwind label %2446

2427:                                             ; preds = %2420
  store ptr %2426, ptr %225, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 128, ptr %226) #8
  %2428 = load ptr, ptr %223, align 8, !tbaa !5
  %2429 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_PathNamed", ptr %2428, i32 0, i32 0
  %2430 = getelementptr inbounds %"class.HIR::Path", ptr %2429, i32 0, i32 0
  %2431 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZN3HIR4Path4Data10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(88) %2430)
          to label %2432 unwind label %2450

2432:                                             ; preds = %2427
  %2433 = getelementptr inbounds %"class.HIR::GenericPath", ptr %2431, i32 0, i32 1
  invoke void @_ZN17MonomorphStatePtrC2EPKN3HIR7TypeRefEPKNS0_10PathParamsES6_S6_S6_(ptr noundef nonnull align 8 dereferenceable(128) %226, ptr noundef null, ptr noundef %2433, ptr noundef null, ptr noundef null, ptr noundef null)
          to label %2434 unwind label %2450

2434:                                             ; preds = %2432
  call void @llvm.lifetime.start.p0(i64 8, ptr %227) #8
  %2435 = load ptr, ptr %223, align 8, !tbaa !5
  %2436 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_PathNamed", ptr %2435, i32 0, i32 2
  store ptr %2436, ptr %227, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %228) #8
  %2437 = load ptr, ptr %227, align 8, !tbaa !5
  %2438 = call ptr @_ZNSt6vectorISt4pairI8RcStringN3HIR7PatternEESaIS4_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %2437) #8
  %2439 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.468", ptr %228, i32 0, i32 0
  store ptr %2438, ptr %2439, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %229) #8
  %2440 = load ptr, ptr %227, align 8, !tbaa !5
  %2441 = call ptr @_ZNSt6vectorISt4pairI8RcStringN3HIR7PatternEESaIS4_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %2440) #8
  %2442 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.468", ptr %229, i32 0, i32 0
  store ptr %2441, ptr %2442, align 8
  br label %2443

2443:                                             ; preds = %2555, %2434
  %2444 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPSt4pairI8RcStringN3HIR7PatternEESt6vectorIS5_SaIS5_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_(ptr noundef nonnull align 8 dereferenceable(8) %228, ptr noundef nonnull align 8 dereferenceable(8) %229) #8
  br i1 %2444, label %2454, label %2445

2445:                                             ; preds = %2443
  store i32 212, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %229) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %228) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %227) #8
  br label %2559

2446:                                             ; preds = %2420
  %2447 = landingpad { ptr, i32 }
          cleanup
  %2448 = extractvalue { ptr, i32 } %2447, 0
  store ptr %2448, ptr %12, align 8
  %2449 = extractvalue { ptr, i32 } %2447, 1
  store i32 %2449, ptr %13, align 4
  br label %2562

2450:                                             ; preds = %2432, %2427
  %2451 = landingpad { ptr, i32 }
          cleanup
  %2452 = extractvalue { ptr, i32 } %2451, 0
  store ptr %2452, ptr %12, align 8
  %2453 = extractvalue { ptr, i32 } %2451, 1
  store i32 %2453, ptr %13, align 4
  br label %2561

2454:                                             ; preds = %2443
  call void @llvm.lifetime.start.p0(i64 8, ptr %230) #8
  %2455 = call noundef nonnull align 8 dereferenceable(224) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairI8RcStringN3HIR7PatternEESt6vectorIS5_SaIS5_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %228) #8
  store ptr %2455, ptr %230, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %231) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %232) #8
  %2456 = load ptr, ptr %225, align 8, !tbaa !5
  %2457 = call ptr @_ZNKSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %2456) #8
  %2458 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.471", ptr %233, i32 0, i32 0
  store ptr %2457, ptr %2458, align 8
  %2459 = load ptr, ptr %225, align 8, !tbaa !5
  %2460 = call ptr @_ZNKSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %2459) #8
  %2461 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.471", ptr %234, i32 0, i32 0
  store ptr %2460, ptr %2461, align 8
  %2462 = getelementptr inbounds %class.anon.472, ptr %235, i32 0, i32 0
  %2463 = load ptr, ptr %230, align 8, !tbaa !5
  store ptr %2463, ptr %2462, align 8, !tbaa !5
  %2464 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.471", ptr %233, i32 0, i32 0
  %2465 = load ptr, ptr %2464, align 8
  %2466 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.471", ptr %234, i32 0, i32 0
  %2467 = load ptr, ptr %2466, align 8
  %2468 = getelementptr inbounds %class.anon.472, ptr %235, i32 0, i32 0
  %2469 = load ptr, ptr %2468, align 8
  %2470 = invoke ptr @"_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKSt4pairI8RcStringN3HIR6VisEntINS4_7TypeRefEEEESt6vectorIS8_SaIS8_EEEEZN7Context27handle_pattern_direct_innerERK4SpanRNS4_7PatternERKS6_E4$_15ET_SO_SO_T0_"(ptr %2465, ptr %2467, ptr %2469)
          to label %2471 unwind label %2494

2471:                                             ; preds = %2454
  %2472 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.471", ptr %232, i32 0, i32 0
  store ptr %2470, ptr %2472, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %236) #8
  %2473 = load ptr, ptr %225, align 8, !tbaa !5
  %2474 = call ptr @_ZNKSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %2473) #8
  %2475 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.471", ptr %236, i32 0, i32 0
  store ptr %2474, ptr %2475, align 8
  %2476 = call noundef i64 @_ZN9__gnu_cxxmiIPKSt4pairI8RcStringN3HIR6VisEntINS3_7TypeRefEEEESt6vectorIS7_SaIS7_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSG_SJ_(ptr noundef nonnull align 8 dereferenceable(8) %232, ptr noundef nonnull align 8 dereferenceable(8) %236) #8
  %2477 = trunc i64 %2476 to i32
  call void @llvm.lifetime.end.p0(i64 8, ptr %236) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %232) #8
  store i32 %2477, ptr %231, align 4, !tbaa !107
  %2478 = load i32, ptr %231, align 4, !tbaa !107
  %2479 = zext i32 %2478 to i64
  %2480 = load ptr, ptr %225, align 8, !tbaa !5
  %2481 = call noundef i64 @_ZNKSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %2480) #8
  %2482 = icmp eq i64 %2479, %2481
  br i1 %2482, label %2483, label %2517

2483:                                             ; preds = %2471
  br label %2484

2484:                                             ; preds = %2483
  call void @llvm.lifetime.start.p0(i64 8, ptr %237) #8
  %2485 = load ptr, ptr %6, align 8, !tbaa !5
  invoke void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %237, ptr noundef nonnull align 8 dereferenceable(8) %2485)
          to label %2486 unwind label %2498

2486:                                             ; preds = %2484
  call void @llvm.lifetime.start.p0(i64 16, ptr %239) #8
  %2487 = getelementptr inbounds %class.anon.473, ptr %239, i32 0, i32 0
  %2488 = load ptr, ptr %223, align 8, !tbaa !5
  store ptr %2488, ptr %2487, align 8, !tbaa !5
  %2489 = getelementptr inbounds %class.anon.473, ptr %239, i32 0, i32 1
  %2490 = load ptr, ptr %230, align 8, !tbaa !5
  store ptr %2490, ptr %2489, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE4$_13vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %238, ptr noundef nonnull align 8 dereferenceable(16) %239) #8
  invoke void @_ZNK4Span5errorE9ErrorTypeSt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %237, i32 noundef 0, ptr noundef %238)
          to label %2491 unwind label %2502

2491:                                             ; preds = %2486
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %238) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %239) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %237) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %237) #8
  %2492 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %2492, ptr noundef @.str.19)
          to label %2493 unwind label %2507

2493:                                             ; preds = %2491
  invoke void @__cxa_throw(ptr %2492, ptr @_ZTISt13runtime_error, ptr @_ZNSt13runtime_errorD1Ev) #10
          to label %2638 unwind label %2511

2494:                                             ; preds = %2454
  %2495 = landingpad { ptr, i32 }
          cleanup
  %2496 = extractvalue { ptr, i32 } %2495, 0
  store ptr %2496, ptr %12, align 8
  %2497 = extractvalue { ptr, i32 } %2495, 1
  store i32 %2497, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %232) #8
  br label %2558

2498:                                             ; preds = %2484
  %2499 = landingpad { ptr, i32 }
          cleanup
  %2500 = extractvalue { ptr, i32 } %2499, 0
  store ptr %2500, ptr %12, align 8
  %2501 = extractvalue { ptr, i32 } %2499, 1
  store i32 %2501, ptr %13, align 4
  br label %2506

2502:                                             ; preds = %2486
  %2503 = landingpad { ptr, i32 }
          cleanup
  %2504 = extractvalue { ptr, i32 } %2503, 0
  store ptr %2504, ptr %12, align 8
  %2505 = extractvalue { ptr, i32 } %2503, 1
  store i32 %2505, ptr %13, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %238) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %239) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %237) #8
  br label %2506

2506:                                             ; preds = %2502, %2498
  call void @llvm.lifetime.end.p0(i64 8, ptr %237) #8
  br label %2558

2507:                                             ; preds = %2491
  %2508 = landingpad { ptr, i32 }
          cleanup
  %2509 = extractvalue { ptr, i32 } %2508, 0
  store ptr %2509, ptr %12, align 8
  %2510 = extractvalue { ptr, i32 } %2508, 1
  store i32 %2510, ptr %13, align 4
  call void @__cxa_free_exception(ptr %2492) #8
  br label %2558

2511:                                             ; preds = %2493
  %2512 = landingpad { ptr, i32 }
          cleanup
  %2513 = extractvalue { ptr, i32 } %2512, 0
  store ptr %2513, ptr %12, align 8
  %2514 = extractvalue { ptr, i32 } %2512, 1
  store i32 %2514, ptr %13, align 4
  br label %2558

2515:                                             ; No predecessors!
  br label %2516

2516:                                             ; preds = %2515
  br label %2517

2517:                                             ; preds = %2516, %2471
  call void @llvm.lifetime.start.p0(i64 8, ptr %240) #8
  %2518 = load ptr, ptr %225, align 8, !tbaa !5
  %2519 = load i32, ptr %231, align 4, !tbaa !107
  %2520 = zext i32 %2519 to i64
  %2521 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNKSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2518, i64 noundef %2520) #8
  %2522 = getelementptr inbounds %"struct.std::pair.474", ptr %2521, i32 0, i32 1
  %2523 = getelementptr inbounds %"struct.HIR::VisEnt", ptr %2522, i32 0, i32 1
  store ptr %2523, ptr %240, align 8, !tbaa !5
  %2524 = load ptr, ptr %240, align 8, !tbaa !5
  %2525 = invoke noundef zeroext i1 @_Z24monomorphise_type_neededRKN3HIR7TypeRefEb(ptr noundef nonnull align 8 dereferenceable(8) %2524, i1 noundef zeroext false)
          to label %2526 unwind label %2535

2526:                                             ; preds = %2517
  br i1 %2525, label %2527, label %2548

2527:                                             ; preds = %2526
  call void @llvm.lifetime.start.p0(i64 8, ptr %241) #8
  %2528 = load ptr, ptr %6, align 8, !tbaa !5
  %2529 = load ptr, ptr %240, align 8, !tbaa !5
  invoke void @_ZNK13Monomorphiser14monomorph_typeERK4SpanRKN3HIR7TypeRefEb(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %241, ptr noundef nonnull align 8 dereferenceable(96) %226, ptr noundef nonnull align 8 dereferenceable(8) %2528, ptr noundef nonnull align 8 dereferenceable(8) %2529, i1 noundef zeroext true)
          to label %2530 unwind label %2539

2530:                                             ; preds = %2527
  %2531 = load ptr, ptr %6, align 8, !tbaa !5
  %2532 = load ptr, ptr %230, align 8, !tbaa !5
  %2533 = getelementptr inbounds %"struct.std::pair.469", ptr %2532, i32 0, i32 1
  invoke void @_ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef nonnull align 8 dereferenceable(8) %2531, ptr noundef nonnull align 8 dereferenceable(212) %2533, ptr noundef nonnull align 8 dereferenceable(8) %241)
          to label %2534 unwind label %2543

2534:                                             ; preds = %2530
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %241) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %241) #8
  br label %2554

2535:                                             ; preds = %2548, %2517
  %2536 = landingpad { ptr, i32 }
          cleanup
  %2537 = extractvalue { ptr, i32 } %2536, 0
  store ptr %2537, ptr %12, align 8
  %2538 = extractvalue { ptr, i32 } %2536, 1
  store i32 %2538, ptr %13, align 4
  br label %2557

2539:                                             ; preds = %2527
  %2540 = landingpad { ptr, i32 }
          cleanup
  %2541 = extractvalue { ptr, i32 } %2540, 0
  store ptr %2541, ptr %12, align 8
  %2542 = extractvalue { ptr, i32 } %2540, 1
  store i32 %2542, ptr %13, align 4
  br label %2547

2543:                                             ; preds = %2530
  %2544 = landingpad { ptr, i32 }
          cleanup
  %2545 = extractvalue { ptr, i32 } %2544, 0
  store ptr %2545, ptr %12, align 8
  %2546 = extractvalue { ptr, i32 } %2544, 1
  store i32 %2546, ptr %13, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %241) #8
  br label %2547

2547:                                             ; preds = %2543, %2539
  call void @llvm.lifetime.end.p0(i64 8, ptr %241) #8
  br label %2557

2548:                                             ; preds = %2526
  %2549 = load ptr, ptr %6, align 8, !tbaa !5
  %2550 = load ptr, ptr %230, align 8, !tbaa !5
  %2551 = getelementptr inbounds %"struct.std::pair.469", ptr %2550, i32 0, i32 1
  %2552 = load ptr, ptr %240, align 8, !tbaa !5
  invoke void @_ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef nonnull align 8 dereferenceable(8) %2549, ptr noundef nonnull align 8 dereferenceable(212) %2551, ptr noundef nonnull align 8 dereferenceable(8) %2552)
          to label %2553 unwind label %2535

2553:                                             ; preds = %2548
  br label %2554

2554:                                             ; preds = %2553, %2534
  call void @llvm.lifetime.end.p0(i64 8, ptr %240) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %231) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %230) #8
  br label %2555

2555:                                             ; preds = %2554
  %2556 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPSt4pairI8RcStringN3HIR7PatternEESt6vectorIS5_SaIS5_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %228) #8
  br label %2443

2557:                                             ; preds = %2547, %2535
  call void @llvm.lifetime.end.p0(i64 8, ptr %240) #8
  br label %2558

2558:                                             ; preds = %2557, %2511, %2507, %2506, %2494
  call void @llvm.lifetime.end.p0(i64 4, ptr %231) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %230) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %229) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %228) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %227) #8
  call void @_ZN13MonomorphiserD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %226) #8
  br label %2561

2559:                                             ; preds = %2445
  call void @_ZN13MonomorphiserD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %226) #8
  call void @llvm.lifetime.end.p0(i64 128, ptr %226) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %225) #8
  br label %2560

2560:                                             ; preds = %2559
  store i8 0, ptr %222, align 1, !tbaa !9
  br label %2388, !llvm.loop !166

2561:                                             ; preds = %2558, %2450
  call void @llvm.lifetime.end.p0(i64 128, ptr %226) #8
  br label %2562

2562:                                             ; preds = %2561, %2446
  call void @llvm.lifetime.end.p0(i64 8, ptr %225) #8
  br label %2565

2563:                                             ; preds = %2410, %2392
  call void @llvm.lifetime.end.p0(i64 8, ptr %223) #8
  %2564 = load i32, ptr %20, align 4
  switch i32 %2564, label %2568 [
    i32 209, label %2566
  ]

2565:                                             ; preds = %2562, %2419, %2393
  call void @llvm.lifetime.end.p0(i64 8, ptr %223) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %222) #8
  br label %2622

2566:                                             ; preds = %2563
  br label %2567

2567:                                             ; preds = %2566
  store i8 0, ptr %222, align 1, !tbaa !9
  br label %2380, !llvm.loop !167

2568:                                             ; preds = %2563, %2383
  call void @llvm.lifetime.end.p0(i64 1, ptr %222) #8
  %2569 = load i32, ptr %20, align 4
  switch i32 %2569, label %2620 [
    i32 206, label %2570
  ]

2570:                                             ; preds = %2568
  br label %2618

2571:                                             ; preds = %305
  call void @llvm.lifetime.start.p0(i64 1, ptr %242) #8
  store i8 1, ptr %242, align 1, !tbaa !9
  br label %2572

2572:                                             ; preds = %2616, %2571
  %2573 = load i8, ptr %242, align 1, !tbaa !9, !range !11, !noundef !12
  %2574 = trunc i8 %2573 to i1
  br i1 %2574, label %2576, label %2575

2575:                                             ; preds = %2572
  store i32 216, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %242) #8
  br label %2617

2576:                                             ; preds = %2572
  call void @llvm.lifetime.start.p0(i64 8, ptr %243) #8
  %2577 = load ptr, ptr %21, align 8, !tbaa !5
  %2578 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3HIR7Pattern4Data5as_OrEv(ptr noundef nonnull align 8 dereferenceable(184) %2577)
          to label %2579 unwind label %2585

2579:                                             ; preds = %2576
  store ptr %2578, ptr %243, align 8, !tbaa !5
  br label %2580

2580:                                             ; preds = %2613, %2579
  %2581 = load ptr, ptr %243, align 8, !tbaa !5
  %2582 = load i8, ptr %242, align 1, !tbaa !9, !range !11, !noundef !12
  %2583 = trunc i8 %2582 to i1
  br i1 %2583, label %2589, label %2584

2584:                                             ; preds = %2580
  store i32 219, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %243) #8
  br label %2615

2585:                                             ; preds = %2576
  %2586 = landingpad { ptr, i32 }
          cleanup
  %2587 = extractvalue { ptr, i32 } %2586, 0
  store ptr %2587, ptr %12, align 8
  %2588 = extractvalue { ptr, i32 } %2586, 1
  store i32 %2588, ptr %13, align 4
  br label %2614

2589:                                             ; preds = %2580
  call void @llvm.lifetime.start.p0(i64 8, ptr %244) #8
  %2590 = load ptr, ptr %243, align 8, !tbaa !5
  store ptr %2590, ptr %244, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %245) #8
  %2591 = load ptr, ptr %244, align 8, !tbaa !5
  %2592 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %2591) #8
  %2593 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.417", ptr %245, i32 0, i32 0
  store ptr %2592, ptr %2593, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %246) #8
  %2594 = load ptr, ptr %244, align 8, !tbaa !5
  %2595 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %2594) #8
  %2596 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.417", ptr %246, i32 0, i32 0
  store ptr %2595, ptr %2596, align 8
  br label %2597

2597:                                             ; preds = %2606, %2589
  %2598 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %245, ptr noundef nonnull align 8 dereferenceable(8) %246) #8
  br i1 %2598, label %2600, label %2599

2599:                                             ; preds = %2597
  store i32 222, ptr %20, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %246) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %245) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %244) #8
  br label %2612

2600:                                             ; preds = %2597
  call void @llvm.lifetime.start.p0(i64 8, ptr %247) #8
  %2601 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %245) #8
  store ptr %2601, ptr %247, align 8, !tbaa !5
  %2602 = load ptr, ptr %6, align 8, !tbaa !5
  %2603 = load ptr, ptr %247, align 8, !tbaa !5
  %2604 = load ptr, ptr %8, align 8, !tbaa !5
  invoke void @_ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %248, ptr noundef nonnull align 8 dereferenceable(8) %2602, ptr noundef nonnull align 8 dereferenceable(212) %2603, ptr noundef nonnull align 8 dereferenceable(8) %2604)
          to label %2605 unwind label %2608

2605:                                             ; preds = %2600
  call void @llvm.lifetime.end.p0(i64 8, ptr %247) #8
  br label %2606

2606:                                             ; preds = %2605
  %2607 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %245) #8
  br label %2597

2608:                                             ; preds = %2600
  %2609 = landingpad { ptr, i32 }
          cleanup
  %2610 = extractvalue { ptr, i32 } %2609, 0
  store ptr %2610, ptr %12, align 8
  %2611 = extractvalue { ptr, i32 } %2609, 1
  store i32 %2611, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %247) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %246) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %245) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %244) #8
  br label %2614

2612:                                             ; preds = %2599
  br label %2613

2613:                                             ; preds = %2612
  store i8 0, ptr %242, align 1, !tbaa !9
  br label %2580, !llvm.loop !168

2614:                                             ; preds = %2608, %2585
  call void @llvm.lifetime.end.p0(i64 8, ptr %243) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %242) #8
  br label %2622

2615:                                             ; preds = %2584
  br label %2616

2616:                                             ; preds = %2615
  store i8 0, ptr %242, align 1, !tbaa !9
  br label %2572, !llvm.loop !169

2617:                                             ; preds = %2575
  br label %2618

2618:                                             ; preds = %2617, %2570, %2378, %2142, %1900, %1477, %1200, %900, %732, %609, %406, %361, %333, %305
  br label %2619

2619:                                             ; preds = %2618
  store i8 0, ptr %19, align 1, !tbaa !9
  br label %298, !llvm.loop !170

2620:                                             ; preds = %2568, %301
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #8
  %2621 = load i32, ptr %20, align 4
  switch i32 %2621, label %2625 [
    i32 7, label %2623
  ]

2622:                                             ; preds = %2614, %2565, %2375, %2139, %1897, %1474, %1197, %897, %729, %606, %376, %348, %325, %306
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #8
  br label %2631

2623:                                             ; preds = %2620
  br label %2624

2624:                                             ; preds = %2623
  store i8 0, ptr %19, align 1, !tbaa !9
  br label %291, !llvm.loop !171

2625:                                             ; preds = %2620, %294
  call void @llvm.lifetime.end.p0(i64 1, ptr %19) #8
  %2626 = load i32, ptr %20, align 4
  switch i32 %2626, label %2628 [
    i32 4, label %2627
  ]

2627:                                             ; preds = %2625
  store i32 0, ptr %20, align 4
  br label %2628

2628:                                             ; preds = %2627, %2625
  call void @_ZN8TraceLogD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %9) #8
  call void @llvm.lifetime.end.p0(i64 40, ptr %9) #8
  %2629 = load i32, ptr %20, align 4
  switch i32 %2629, label %2638 [
    i32 0, label %2630
    i32 1, label %2630
  ]

2630:                                             ; preds = %2628, %2628
  ret void

2631:                                             ; preds = %2622, %289
  call void @_ZN8TraceLogD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %9) #8
  br label %2632

2632:                                             ; preds = %2631, %268
  call void @llvm.lifetime.end.p0(i64 40, ptr %9) #8
  br label %2633

2633:                                             ; preds = %2632
  %2634 = load ptr, ptr %12, align 8
  %2635 = load i32, ptr %13, align 4
  %2636 = insertvalue { ptr, i32 } poison, ptr %2634, 0
  %2637 = insertvalue { ptr, i32 } %2636, i32 %2635, 1
  resume { ptr, i32 } %2637

2638:                                             ; preds = %2628, %2493, %2274, %2215, %2076, %1982, %1654, %1546, %1256, %1059, %948, %780, %653, %436
  unreachable
}

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3HIR7Pattern4Data3tagEv(ptr noundef nonnull align 8 dereferenceable(184)) #6 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(104) ptr @_ZN3HIR7Pattern4Data8as_ValueEv(ptr noundef nonnull align 8 dereferenceable(184)) #6 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN1H12handle_valueERS_S2_S8_RKNS4_5ValueE(ptr noundef nonnull align 8 dereferenceable(592), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(104)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(17) ptr @_ZN3HIR7Pattern4Data8as_RangeEv(ptr noundef nonnull align 8 dereferenceable(184)) #6 align 2

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #6 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(32) ptr @_ZNK3HIR4Path4Data10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(88)) #6 align 2

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

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

declare void @_ZN16HMTypeInferrence11new_ivar_trEN3HIR10InferClassE(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8, ptr noundef nonnull align 8 dereferenceable(49), i32 noundef) #0

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

declare void @_ZN3HIR10PathParamsC1ENS_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef) unnamed_addr #0

declare void @_ZN3HIR11GenericPathC1ENS_10SimplePathENS_10PathParamsE(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, ptr noundef) unnamed_addr #0

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3HIR7TypeRef8new_pathENS_4PathENS_15TypePathBindingE(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeRef") align 8, ptr noundef, ptr noundef) #4 align 2

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

declare void @_ZN3HIR4PathC1ENS_11GenericPathE(ptr noundef nonnull align 8 dereferenceable(88), ptr noundef) unnamed_addr #0

declare noundef nonnull align 8 dereferenceable(252) ptr @_ZNK3HIR5Crate18get_struct_by_pathERK4SpanRKNS_10SimplePathE(ptr noundef nonnull align 8 dereferenceable(944), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #0

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZN3HIR7Pattern4Data8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(184)) #6 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIN3HIR7PatternESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE3$_3vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(212) ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #6 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EEC2EOS3_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #6 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(52) ptr @_ZN3HIR7Pattern4Data13as_SplitTupleEv(ptr noundef nonnull align 8 dereferenceable(184)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE3$_4vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #6 align 2

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE3$_5vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #2 align 2

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

; Function Attrs: mustprogress uwtable
declare hidden void @_Z15make_unique_ptrIZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS4_7TypeRefEE20SplitTuplePatRevisitESt10unique_ptrIT_St14default_deleteISC_EEOSC_(ptr dead_on_unwind noalias writable sret(%"class.std::unique_ptr.420") align 8, ptr noundef nonnull align 8 dereferenceable(80)) #2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN20SplitTuplePatRevisitC2ES0_S6_St6vectorIS6_SaIS6_EESC_Rj(ptr noundef nonnull align 8 dereferenceable(80), ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef nonnull align 4 dereferenceable(4)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZNSt10unique_ptrIN7Context9RevisitorESt14default_deleteIS1_EEC2IZNS0_27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS9_7TypeRefEE20SplitTuplePatRevisitS2_ISF_EvEEOS_IT_T0_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZNSt10unique_ptrIZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS4_7TypeRefEE20SplitTuplePatRevisitSt14default_deleteISA_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #6 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN20SplitTuplePatRevisitD2Ev(ptr noundef nonnull align 8 dereferenceable(80)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZN3HIR7Pattern4Data8as_SliceEv(ptr noundef nonnull align 8 dereferenceable(184)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE3$_6vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @_Z15make_unique_ptrIZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS4_7TypeRefEE15SlicePatRevisitESt10unique_ptrIT_St14default_deleteISC_EEOSC_(ptr dead_on_unwind noalias writable sret(%"class.std::unique_ptr.429") align 8, ptr noundef nonnull align 8 dereferenceable(36)) #2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN15SlicePatRevisitC2ES0_S6_S6_j(ptr noundef nonnull align 8 dereferenceable(36), ptr noundef, ptr noundef, ptr noundef, i32 noundef) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZNSt10unique_ptrIN7Context9RevisitorESt14default_deleteIS1_EEC2IZNS0_27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS9_7TypeRefEE15SlicePatRevisitS2_ISF_EvEEOS_IT_T0_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZNSt10unique_ptrIZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS4_7TypeRefEE15SlicePatRevisitSt14default_deleteISA_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #6 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN15SlicePatRevisitD2Ev(ptr noundef nonnull align 8 dereferenceable(36)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(72) ptr @_ZN3HIR7Pattern4Data13as_SplitSliceEv(ptr noundef nonnull align 8 dereferenceable(184)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE3$_7vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #6 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE3$_8vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #6 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3HIR7TypeRef9new_arrayES0_m(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeRef") align 8, ptr noundef, i64 noundef) #4 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @_Z15make_unique_ptrIZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS4_7TypeRefEE20SplitSlicePatRevisitESt10unique_ptrIT_St14default_deleteISC_EEOSC_(ptr dead_on_unwind noalias writable sret(%"class.std::unique_ptr.440") align 8, ptr noundef nonnull align 8 dereferenceable(44)) #2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN20SplitSlicePatRevisitC2ES0_S6_S6_S6_j(ptr noundef nonnull align 8 dereferenceable(44), ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZNSt10unique_ptrIN7Context9RevisitorESt14default_deleteIS1_EEC2IZNS0_27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS9_7TypeRefEE20SplitSlicePatRevisitS2_ISF_EvEEOS_IT_T0_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZNSt10unique_ptrIZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS4_7TypeRefEE20SplitSlicePatRevisitSt14default_deleteISA_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #6 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN20SplitSlicePatRevisitD2Ev(ptr noundef nonnull align 8 dereferenceable(44)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(112) ptr @_ZN3HIR7Pattern4Data12as_PathValueEv(ptr noundef nonnull align 8 dereferenceable(184)) #6 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN1H13get_path_typeERS_S2_RNS3_4PathERKNS4_11PathBindingE(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeRef") align 8, ptr noundef nonnull align 8 dereferenceable(592), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(88), ptr noundef nonnull align 8 dereferenceable(24)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3HIR7Pattern11PathBinding3tagEv(ptr noundef nonnull align 8 dereferenceable(24)) #6 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE3$_9vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #6 align 2

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIN3HIR4Enum11DataVariantESaIS2_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE4$_10vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZNKSt6vectorIN3HIR4Enum11DataVariantESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #6 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(172) ptr @_ZN3HIR7Pattern4Data12as_PathTupleEv(ptr noundef nonnull align 8 dereferenceable(184)) #6 align 2

declare noundef nonnull align 8 dereferenceable(24) ptr @_ZN3HIR17pattern_get_tupleERK4SpanRKNS_4PathERKNS_7Pattern11PathBindingE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(88), ptr noundef nonnull align 8 dereferenceable(24)) #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(32) ptr @_ZN3HIR4Path4Data10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(88)) #6 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE4$_11vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE4$_12vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #6 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef nonnull align 8 dereferenceable(8) ptr @"_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEENK4$_14clES8_"(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8)) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZNKSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(137) ptr @_ZN3HIR7Pattern4Data12as_PathNamedEv(ptr noundef nonnull align 8 dereferenceable(184)) #6 align 2

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

declare noundef nonnull align 8 dereferenceable(24) ptr @_ZN3HIR17pattern_get_namedERK4SpanRKNS_4PathERKNS_7Pattern11PathBindingE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(88), ptr noundef nonnull align 8 dereferenceable(24)) #0

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZN9__gnu_cxxmiIPKSt4pairI8RcStringN3HIR6VisEntINS3_7TypeRefEEEESt6vectorIS7_SaIS7_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSG_SJ_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #5

; Function Attrs: inlinehint mustprogress uwtable
declare hidden ptr @"_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKSt4pairI8RcStringN3HIR6VisEntINS4_7TypeRefEEEESt6vectorIS8_SaIS8_EEEEZN7Context27handle_pattern_direct_innerERK4SpanRNS4_7PatternERKS6_E4$_15ET_SO_SO_T0_"(ptr, ptr, ptr) #4

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE4$_13vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(32) ptr @_ZNKSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #6 align 2

declare noundef zeroext i1 @_Z24monomorphise_type_neededRKN3HIR7TypeRefEb(ptr noundef nonnull align 8 dereferenceable(8), i1 noundef zeroext) #0

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZN3HIR7Pattern4Data5as_OrEv(ptr noundef nonnull align 8 dereferenceable(184)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN13MonomorphiserD2Ev(ptr noundef nonnull align 8 dereferenceable(96)) unnamed_addr #6 align 2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"bool", !7, i64 0}
!11 = !{i8 0, i8 2}
!12 = !{}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}
!16 = distinct !{!16, !14}
!17 = distinct !{!17, !14}
!18 = distinct !{!18, !14}
!19 = distinct !{!19, !14}
!20 = !{!21, !6, i64 0}
!21 = !{!"_ZTS7Context", !6, i64 0, !22, i64 8, !26, i64 32, !35, i64 88, !58, i64 368, !59, i64 376, !63, i64 400, !67, i64 424, !71, i64 448, !75, i64 472, !81, i64 512, !85, i64 536, !52, i64 584}
!22 = !{!"_ZTSSt6vectorIN7Context7BindingESaIS1_EE", !23, i64 0}
!23 = !{!"_ZTSSt12_Vector_baseIN7Context7BindingESaIS1_EE", !24, i64 0}
!24 = !{!"_ZTSNSt12_Vector_baseIN7Context7BindingESaIS1_EE12_Vector_implE", !25, i64 0}
!25 = !{!"_ZTSNSt12_Vector_baseIN7Context7BindingESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!26 = !{!"_ZTS16HMTypeInferrence", !27, i64 0, !31, i64 24, !10, i64 48}
!27 = !{!"_ZTSSt6vectorIN16HMTypeInferrence4IVarESaIS1_EE", !28, i64 0}
!28 = !{!"_ZTSSt12_Vector_baseIN16HMTypeInferrence4IVarESaIS1_EE", !29, i64 0}
!29 = !{!"_ZTSNSt12_Vector_baseIN16HMTypeInferrence4IVarESaIS1_EE12_Vector_implE", !30, i64 0}
!30 = !{!"_ZTSNSt12_Vector_baseIN16HMTypeInferrence4IVarESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!31 = !{!"_ZTSSt6vectorIN16HMTypeInferrence9IVarValueESaIS1_EE", !32, i64 0}
!32 = !{!"_ZTSSt12_Vector_baseIN16HMTypeInferrence9IVarValueESaIS1_EE", !33, i64 0}
!33 = !{!"_ZTSNSt12_Vector_baseIN16HMTypeInferrence9IVarValueESaIS1_EE12_Vector_implE", !34, i64 0}
!34 = !{!"_ZTSNSt12_Vector_baseIN16HMTypeInferrence9IVarValueESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!35 = !{!"_ZTS15TraitResolution", !36, i64 0, !6, i64 216, !6, i64 224, !6, i64 232, !6, i64 240, !6, i64 248, !54, i64 256}
!36 = !{!"_ZTS18TraitResolveCommon", !6, i64 0, !6, i64 8, !6, i64 16, !37, i64 24, !46, i64 72, !52, i64 104, !52, i64 112, !52, i64 120, !52, i64 128, !52, i64 136, !52, i64 144, !52, i64 152, !52, i64 160, !52, i64 168, !52, i64 176, !52, i64 184, !52, i64 192, !52, i64 200, !52, i64 208}
!37 = !{!"_ZTSSt3mapIN3HIR7TypeRefEN18TraitResolveCommon14CachedEqualityESt4lessIS1_ESaISt4pairIKS1_S3_EEE", !38, i64 0}
!38 = !{!"_ZTSSt8_Rb_treeIN3HIR7TypeRefESt4pairIKS1_N18TraitResolveCommon14CachedEqualityEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE", !39, i64 0}
!39 = !{!"_ZTSNSt8_Rb_treeIN3HIR7TypeRefESt4pairIKS1_N18TraitResolveCommon14CachedEqualityEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE13_Rb_tree_implISA_Lb1EEE", !40, i64 0, !42, i64 8}
!40 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIN3HIR7TypeRefEEE", !41, i64 0}
!41 = !{!"_ZTSSt4lessIN3HIR7TypeRefEE"}
!42 = !{!"_ZTSSt15_Rb_tree_header", !43, i64 0, !45, i64 32}
!43 = !{!"_ZTSSt18_Rb_tree_node_base", !44, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!44 = !{!"_ZTSSt14_Rb_tree_color", !7, i64 0}
!45 = !{!"long", !7, i64 0}
!46 = !{!"_ZTS11RangeVecMapISt4pairIN3HIR7TypeRefENS1_11GenericPathEEN18TraitResolveCommon11CachedBoundENS5_14CachedBoundCmpEE", !47, i64 0, !51, i64 24}
!47 = !{!"_ZTSSt6vectorISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE", !48, i64 0}
!48 = !{!"_ZTSSt12_Vector_baseISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE", !49, i64 0}
!49 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE12_Vector_implE", !50, i64 0}
!50 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!51 = !{!"_ZTSN18TraitResolveCommon14CachedBoundCmpE"}
!52 = !{!"_ZTSN3HIR10SimplePathE", !53, i64 0}
!53 = !{!"_ZTS10ThinVectorI8RcStringE", !6, i64 0}
!54 = !{!"_ZTSSt6vectorISt10unique_ptrIN3HIR7TypeRefESt14default_deleteIS2_EESaIS5_EE", !55, i64 0}
!55 = !{!"_ZTSSt12_Vector_baseISt10unique_ptrIN3HIR7TypeRefESt14default_deleteIS2_EESaIS5_EE", !56, i64 0}
!56 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrIN3HIR7TypeRefESt14default_deleteIS2_EESaIS5_EE12_Vector_implE", !57, i64 0}
!57 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrIN3HIR7TypeRefESt14default_deleteIS2_EESaIS5_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!58 = !{!"int", !7, i64 0}
!59 = !{!"_ZTSSt6vectorISt10unique_ptrIN7Context8CoercionESt14default_deleteIS2_EESaIS5_EE", !60, i64 0}
!60 = !{!"_ZTSSt12_Vector_baseISt10unique_ptrIN7Context8CoercionESt14default_deleteIS2_EESaIS5_EE", !61, i64 0}
!61 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrIN7Context8CoercionESt14default_deleteIS2_EESaIS5_EE12_Vector_implE", !62, i64 0}
!62 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrIN7Context8CoercionESt14default_deleteIS2_EESaIS5_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!63 = !{!"_ZTSSt6vectorIN7Context10AssociatedESaIS1_EE", !64, i64 0}
!64 = !{!"_ZTSSt12_Vector_baseIN7Context10AssociatedESaIS1_EE", !65, i64 0}
!65 = !{!"_ZTSNSt12_Vector_baseIN7Context10AssociatedESaIS1_EE12_Vector_implE", !66, i64 0}
!66 = !{!"_ZTSNSt12_Vector_baseIN7Context10AssociatedESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!67 = !{!"_ZTSSt6vectorIPN3HIR8ExprNodeESaIS2_EE", !68, i64 0}
!68 = !{!"_ZTSSt12_Vector_baseIPN3HIR8ExprNodeESaIS2_EE", !69, i64 0}
!69 = !{!"_ZTSNSt12_Vector_baseIPN3HIR8ExprNodeESaIS2_EE12_Vector_implE", !70, i64 0}
!70 = !{!"_ZTSNSt12_Vector_baseIPN3HIR8ExprNodeESaIS2_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!71 = !{!"_ZTSSt6vectorISt10unique_ptrIN7Context9RevisitorESt14default_deleteIS2_EESaIS5_EE", !72, i64 0}
!72 = !{!"_ZTSSt12_Vector_baseISt10unique_ptrIN7Context9RevisitorESt14default_deleteIS2_EESaIS5_EE", !73, i64 0}
!73 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrIN7Context9RevisitorESt14default_deleteIS2_EESaIS5_EE12_Vector_implE", !74, i64 0}
!74 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrIN7Context9RevisitorESt14default_deleteIS2_EESaIS5_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!75 = !{!"_ZTSSt6vectorIbSaIbEE", !76, i64 0}
!76 = !{!"_ZTSSt13_Bvector_baseISaIbEE", !77, i64 0}
!77 = !{!"_ZTSNSt13_Bvector_baseISaIbEE13_Bvector_implE", !78, i64 0}
!78 = !{!"_ZTSNSt13_Bvector_baseISaIbEE18_Bvector_impl_dataE", !79, i64 0, !79, i64 16, !6, i64 32}
!79 = !{!"_ZTSSt13_Bit_iterator", !80, i64 0}
!80 = !{!"_ZTSSt18_Bit_iterator_base", !6, i64 0, !58, i64 8}
!81 = !{!"_ZTSSt6vectorIN7Context12IVarPossibleESaIS1_EE", !82, i64 0}
!82 = !{!"_ZTSSt12_Vector_baseIN7Context12IVarPossibleESaIS1_EE", !83, i64 0}
!83 = !{!"_ZTSNSt12_Vector_baseIN7Context12IVarPossibleESaIS1_EE12_Vector_implE", !84, i64 0}
!84 = !{!"_ZTSNSt12_Vector_baseIN7Context12IVarPossibleESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!85 = !{!"_ZTSSt3mapIPN3HIR30TypeData_ErasedType_AliasInnerEN7Context9TaitEntryESt4lessIS2_ESaISt4pairIKS2_S4_EEE", !86, i64 0}
!86 = !{!"_ZTSSt8_Rb_treeIPN3HIR30TypeData_ErasedType_AliasInnerESt4pairIKS2_N7Context9TaitEntryEESt10_Select1stIS7_ESt4lessIS2_ESaIS7_EE", !87, i64 0}
!87 = !{!"_ZTSNSt8_Rb_treeIPN3HIR30TypeData_ErasedType_AliasInnerESt4pairIKS2_N7Context9TaitEntryEESt10_Select1stIS7_ESt4lessIS2_ESaIS7_EE13_Rb_tree_implISB_Lb1EEE", !88, i64 0, !42, i64 8}
!88 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIPN3HIR30TypeData_ErasedType_AliasInnerEEE", !89, i64 0}
!89 = !{!"_ZTSSt4lessIPN3HIR30TypeData_ErasedType_AliasInnerEE"}
!90 = distinct !{!90, !14}
!91 = distinct !{!91, !14}
!92 = !{!93, !95, i64 4}
!93 = !{!"_ZTSN3HIR8TypeData11Data_BorrowE", !94, i64 0, !95, i64 4, !96, i64 8}
!94 = !{!"_ZTSN3HIR11LifetimeRefE", !58, i64 0}
!95 = !{!"_ZTSN3HIR10BorrowTypeE", !7, i64 0}
!96 = !{!"_ZTSN3HIR7TypeRefE", !6, i64 0}
!97 = !{!98, !95, i64 0}
!98 = !{!"_ZTSN3HIR7Pattern4Data8Data_RefE", !95, i64 0, !99, i64 8}
!99 = !{!"_ZTSSt10unique_ptrIN3HIR7PatternESt14default_deleteIS1_EE", !100, i64 0}
!100 = !{!"_ZTSSt15__uniq_ptr_dataIN3HIR7PatternESt14default_deleteIS1_ELb1ELb1EE", !101, i64 0}
!101 = !{!"_ZTSSt15__uniq_ptr_implIN3HIR7PatternESt14default_deleteIS1_EE", !102, i64 0}
!102 = !{!"_ZTSSt5tupleIJPN3HIR7PatternESt14default_deleteIS1_EEE", !103, i64 0}
!103 = !{!"_ZTSSt11_Tuple_implILm0EJPN3HIR7PatternESt14default_deleteIS1_EEE", !104, i64 0}
!104 = !{!"_ZTSSt10_Head_baseILm0EPN3HIR7PatternELb0EE", !6, i64 0}
!105 = distinct !{!105, !14}
!106 = distinct !{!106, !14}
!107 = !{!58, !58, i64 0}
!108 = distinct !{!108, !14}
!109 = distinct !{!109, !14}
!110 = distinct !{!110, !14}
!111 = distinct !{!111, !14}
!112 = !{!113, !58, i64 48}
!113 = !{!"_ZTSN3HIR7Pattern4Data15Data_SplitTupleE", !114, i64 0, !114, i64 24, !58, i64 48}
!114 = !{!"_ZTSSt6vectorIN3HIR7PatternESaIS1_EE", !115, i64 0}
!115 = !{!"_ZTSSt12_Vector_baseIN3HIR7PatternESaIS1_EE", !116, i64 0}
!116 = !{!"_ZTSNSt12_Vector_baseIN3HIR7PatternESaIS1_EE12_Vector_implE", !117, i64 0}
!117 = !{!"_ZTSNSt12_Vector_baseIN3HIR7PatternESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!118 = distinct !{!118, !14}
!119 = distinct !{!119, !14}
!120 = distinct !{!120, !14}
!121 = distinct !{!121, !14}
!122 = distinct !{!122, !14}
!123 = distinct !{!123, !14}
!124 = distinct !{!124, !14}
!125 = distinct !{!125, !14}
!126 = distinct !{!126, !14}
!127 = distinct !{!127, !14}
!128 = distinct !{!128, !14}
!129 = distinct !{!129, !14}
!130 = distinct !{!130, !14}
!131 = distinct !{!131, !14}
!132 = !{!45, !45, i64 0}
!133 = distinct !{!133, !14}
!134 = distinct !{!134, !14}
!135 = distinct !{!135, !14}
!136 = distinct !{!136, !14}
!137 = distinct !{!137, !14}
!138 = distinct !{!138, !14}
!139 = distinct !{!139, !14}
!140 = distinct !{!140, !14}
!141 = distinct !{!141, !14}
!142 = distinct !{!142, !14}
!143 = distinct !{!143, !14}
!144 = distinct !{!144, !14}
!145 = !{!146, !6, i64 0}
!146 = !{!"_ZTSN3HIR7Pattern11PathBinding9Data_EnumE", !6, i64 0, !58, i64 8}
!147 = !{!146, !58, i64 8}
!148 = distinct !{!148, !14}
!149 = distinct !{!149, !14}
!150 = distinct !{!150, !14}
!151 = distinct !{!151, !14}
!152 = distinct !{!152, !14}
!153 = distinct !{!153, !14}
!154 = !{!155, !10, i64 136}
!155 = !{!"_ZTSN3HIR7Pattern4Data14Data_PathTupleE", !156, i64 0, !159, i64 88, !114, i64 112, !10, i64 136, !114, i64 144, !58, i64 168}
!156 = !{!"_ZTSN3HIR4PathE", !157, i64 0}
!157 = !{!"_ZTSN3HIR4Path4DataE", !158, i64 0, !7, i64 8}
!158 = !{!"_ZTSN3HIR4Path4Data3TagE", !7, i64 0}
!159 = !{!"_ZTSN3HIR7Pattern11PathBindingE", !160, i64 0, !7, i64 8}
!160 = !{!"_ZTSN3HIR7Pattern11PathBinding3TagE", !7, i64 0}
!161 = !{!155, !58, i64 168}
!162 = distinct !{!162, !14}
!163 = distinct !{!163, !14}
!164 = distinct !{!164, !14}
!165 = distinct !{!165, !14}
!166 = distinct !{!166, !14}
!167 = distinct !{!167, !14}
!168 = distinct !{!168, !14}
!169 = distinct !{!169, !14}
!170 = distinct !{!170, !14}
!171 = distinct !{!171, !14}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"class.HIR::TypeRef" = type { ptr }
%class.TraceLog = type { ptr, %"class.std::function" }
%"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.anon.242 = type { ptr, ptr }
%"class.__gnu_cxx::__normal_iterator.233" = type { ptr }
%"struct.HIR::SimplePath" = type { %class.ThinVector }
%class.ThinVector = type { ptr }
%struct.Span = type { ptr }
%class.anon.243 = type { i8 }
%"class.HIR::GenericPath" = type { %"struct.HIR::SimplePath", %"struct.HIR::PathParams" }
%"struct.HIR::PathParams" = type { %class.ThinVector.69, %class.ThinVector.70, %class.ThinVector.71 }
%class.ThinVector.69 = type { ptr }
%class.ThinVector.70 = type { ptr }
%class.ThinVector.71 = type { ptr }
%"class.HIR::Path" = type { %"class.HIR::Path::Data" }
%"class.HIR::Path::Data" = type { i32, %"union.HIR::Path::Data::DataUnion" }
%"union.HIR::Path::Data::DataUnion" = type { %"struct.HIR::Path::Data::Data_UfcsKnown" }
%"struct.HIR::Path::Data::Data_UfcsKnown" = type { %"class.HIR::TypeRef", %"class.HIR::GenericPath", %class.RcString, %"struct.HIR::PathParams", %"class.std::unique_ptr.91" }
%class.RcString = type { ptr }
%"class.std::unique_ptr.91" = type { %"struct.std::__uniq_ptr_data.92" }
%"struct.std::__uniq_ptr_data.92" = type { %"class.std::__uniq_ptr_impl.93" }
%"class.std::__uniq_ptr_impl.93" = type { %"class.std::tuple.94" }
%"class.std::tuple.94" = type { %"struct.std::_Tuple_impl.95" }
%"struct.std::_Tuple_impl.95" = type { %"struct.std::_Head_base.98" }
%"struct.std::_Head_base.98" = type { ptr }
%"class.HIR::TypePathBinding" = type { i32, %"union.HIR::TypePathBinding::DataUnion" }
%"union.HIR::TypePathBinding::DataUnion" = type { ptr }
%class.anon.412 = type { i8 }
%class.anon.414 = type { ptr, ptr }
%"class.std::vector.133" = type { %"struct.std::_Vector_base.134" }
%"struct.std::_Vector_base.134" = type { %"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.anon.415 = type { i8 }
%"class.__gnu_cxx::__normal_iterator.417" = type { ptr }
%class.anon.418 = type { i8 }
%"class.std::unique_ptr.74" = type { %"struct.std::__uniq_ptr_data.75" }
%"struct.std::__uniq_ptr_data.75" = type { %"class.std::__uniq_ptr_impl.76" }
%"class.std::__uniq_ptr_impl.76" = type { %"class.std::tuple.77" }
%"class.std::tuple.77" = type { %"struct.std::_Tuple_impl.78" }
%"struct.std::_Tuple_impl.78" = type { %"struct.std::_Head_base.81" }
%"struct.std::_Head_base.81" = type { ptr }
%"class.std::unique_ptr.420" = type { %"struct.std::__uniq_ptr_data.421" }
%"struct.std::__uniq_ptr_data.421" = type { %"class.std::__uniq_ptr_impl.422" }
%"class.std::__uniq_ptr_impl.422" = type { %"class.std::tuple.423" }
%"class.std::tuple.423" = type { %"struct.std::_Tuple_impl.424" }
%"struct.std::_Tuple_impl.424" = type { %"struct.std::_Head_base.427" }
%"struct.std::_Head_base.427" = type { ptr }
%struct.SplitTuplePatRevisit = type { %"class.Context::Revisitor", %struct.Span, %"class.HIR::TypeRef", %"class.std::vector.133", %"class.std::vector.133", ptr }
%"class.Context::Revisitor" = type { ptr }
%class.anon.428 = type { ptr }
%"class.std::unique_ptr.429" = type { %"struct.std::__uniq_ptr_data.430" }
%"struct.std::__uniq_ptr_data.430" = type { %"class.std::__uniq_ptr_impl.431" }
%"class.std::__uniq_ptr_impl.431" = type { %"class.std::tuple.432" }
%"class.std::tuple.432" = type { %"struct.std::_Tuple_impl.433" }
%"struct.std::_Tuple_impl.433" = type { %"struct.std::_Head_base.436" }
%"struct.std::_Head_base.436" = type { ptr }
%struct.SlicePatRevisit = type <{ %"class.Context::Revisitor", %struct.Span, %"class.HIR::TypeRef", %"class.HIR::TypeRef", i32, [4 x i8] }>
%class.anon.437 = type { ptr }
%class.anon.438 = type { i8 }
%"class.std::unique_ptr.440" = type { %"struct.std::__uniq_ptr_data.441" }
%"struct.std::__uniq_ptr_data.441" = type { %"class.std::__uniq_ptr_impl.442" }
%"class.std::__uniq_ptr_impl.442" = type { %"class.std::tuple.443" }
%"class.std::tuple.443" = type { %"struct.std::_Tuple_impl.444" }
%"struct.std::_Tuple_impl.444" = type { %"struct.std::_Head_base.447" }
%"struct.std::_Head_base.447" = type { ptr }
%struct.SplitSlicePatRevisit = type <{ %"class.Context::Revisitor", %struct.Span, %"class.HIR::TypeRef", %"class.HIR::TypeRef", %"class.HIR::TypeRef", i32, [4 x i8] }>
%class.anon.448 = type { i8 }
%class.anon.460 = type { i8 }
%struct.MonomorphStatePtr = type { %class.MonomorphiserPP, ptr, ptr, ptr, ptr }
%class.MonomorphiserPP = type { %class.Monomorphiser }
%class.Monomorphiser = type { ptr, ptr, %"class.HIR::ItemPath", %"class.std::vector.86" }
%"class.HIR::ItemPath" = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%"class.std::vector.86" = type { %"struct.std::_Vector_base.87" }
%"struct.std::_Vector_base.87" = type { %"struct.std::_Vector_base<const HIR::GenericParams *, std::allocator<const HIR::GenericParams *>>::_Vector_impl" }
%"struct.std::_Vector_base<const HIR::GenericParams *, std::allocator<const HIR::GenericParams *>>::_Vector_impl" = type { %"struct.std::_Vector_base<const HIR::GenericParams *, std::allocator<const HIR::GenericParams *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<const HIR::GenericParams *, std::allocator<const HIR::GenericParams *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.anon.462 = type { ptr, ptr, ptr }
%class.anon.463 = type { ptr, ptr }
%class.anon.464 = type { ptr, ptr }
%"class.__gnu_cxx::__normal_iterator.468" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.471" = type { ptr }
%class.anon.473 = type { ptr, ptr }

@.str.16 = external hidden unnamed_addr constant [17 x i8], align 1
@_ZTISt13runtime_error = external constant ptr
@.str.19 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [81 x i8], align 1
@__func__._ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE = external hidden unnamed_addr constant [28 x i8], align 1
@__PRETTY_FUNCTION__._ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE = external hidden unnamed_addr constant [98 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [23 x i8], align 1

declare noundef zeroext i1 @_Z13debug_enabledv() local_unnamed_addr #0

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

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

declare i32 @__gxx_personality_v0(...)

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

declare void @_ZN8TraceLogC1EPKcSt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef, ptr noundef) unnamed_addr #0

declare void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #0

declare void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #0

; Function Attrs: nounwind
declare void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #3

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

declare void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) unnamed_addr #0

declare void @__cxa_free_exception(ptr) local_unnamed_addr

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

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

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

declare void @_ZNK13Monomorphiser14monomorph_typeERK4SpanRKN3HIR7TypeRefEb(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8, ptr noundef nonnull align 8 dereferenceable(96), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), i1 noundef zeroext) unnamed_addr #0

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3HIR8TypeData8is_InferEv(ptr noundef nonnull align 8 dereferenceable(184)) local_unnamed_addr #6 align 2

; Function Attrs: nounwind
declare void @_ZN8TraceLogD1Ev(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #3

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

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

declare void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8, ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184)) local_unnamed_addr #6 align 2

declare void @_ZNK4Span5errorE9ErrorTypeSt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8), i32 noundef, ptr noundef) local_unnamed_addr #0

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR8TypeData8as_ArrayEv(ptr noundef nonnull align 8 dereferenceable(184)) local_unnamed_addr #6 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR8TypeData8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(184)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7Context17add_binding_innerERK4SpanRKN3HIR14PatternBindingENS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef) local_unnamed_addr #2 align 2

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3HIR7TypeRef10new_borrowENS_10BorrowTypeES0_(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeRef") align 8, i32 noundef, ptr noundef) local_unnamed_addr #4 align 2

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(212) %2, ptr noundef nonnull align 8 dereferenceable(8) %3) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %5 = alloca %class.TraceLog, align 8
  %6 = alloca %"class.std::function", align 8
  %7 = alloca %class.anon.242, align 8
  %8 = alloca %"class.__gnu_cxx::__normal_iterator.233", align 8
  %9 = alloca %"class.__gnu_cxx::__normal_iterator.233", align 8
  %10 = alloca %"class.HIR::TypeRef", align 8
  %11 = alloca %"struct.HIR::SimplePath", align 8
  %12 = alloca %struct.Span, align 8
  %13 = alloca %"class.std::function", align 8
  %14 = alloca %class.anon.243, align 1
  %15 = alloca %"class.HIR::TypeRef", align 8
  %16 = alloca %"class.HIR::GenericPath", align 8
  %17 = alloca %"struct.HIR::SimplePath", align 8
  %18 = alloca %"struct.HIR::PathParams", align 8
  %19 = alloca %"class.HIR::TypeRef", align 8
  %20 = alloca %"class.HIR::TypeRef", align 8
  %21 = alloca %"class.HIR::Path", align 8
  %22 = alloca %"class.HIR::GenericPath", align 8
  %23 = alloca %"class.HIR::TypePathBinding", align 8
  %24 = alloca %struct.Span, align 8
  %25 = alloca %"class.std::function", align 8
  %26 = alloca %class.anon.412, align 1
  %27 = alloca %"class.HIR::TypeRef", align 8
  %28 = alloca %"class.HIR::TypeRef", align 8
  %29 = alloca %"class.HIR::TypeRef", align 8
  %30 = alloca %struct.Span, align 8
  %31 = alloca %"class.std::function", align 8
  %32 = alloca %class.anon.414, align 8
  %33 = alloca %"class.std::vector.133", align 8
  %34 = alloca %"class.HIR::TypeRef", align 8
  %35 = alloca %"class.HIR::TypeRef", align 8
  %36 = alloca %"class.std::vector.133", align 8
  %37 = alloca %struct.Span, align 8
  %38 = alloca %"class.std::function", align 8
  %39 = alloca %class.anon.415, align 1
  %40 = alloca %"class.__gnu_cxx::__normal_iterator.417", align 8
  %41 = alloca %"class.__gnu_cxx::__normal_iterator.417", align 8
  %42 = alloca %"class.__gnu_cxx::__normal_iterator.417", align 8
  %43 = alloca %"class.__gnu_cxx::__normal_iterator.417", align 8
  %44 = alloca %struct.Span, align 8
  %45 = alloca %"class.std::function", align 8
  %46 = alloca %class.anon.418, align 1
  %47 = alloca %"class.std::vector.133", align 8
  %48 = alloca %"class.__gnu_cxx::__normal_iterator.417", align 8
  %49 = alloca %"class.__gnu_cxx::__normal_iterator.417", align 8
  %50 = alloca %"class.HIR::TypeRef", align 8
  %51 = alloca %"class.std::vector.133", align 8
  %52 = alloca %"class.__gnu_cxx::__normal_iterator.417", align 8
  %53 = alloca %"class.__gnu_cxx::__normal_iterator.417", align 8
  %54 = alloca %"class.HIR::TypeRef", align 8
  %55 = alloca %"class.std::unique_ptr.74", align 8
  %56 = alloca %"class.std::unique_ptr.420", align 8
  %57 = alloca %struct.SplitTuplePatRevisit, align 8
  %58 = alloca %struct.Span, align 8
  %59 = alloca %"class.HIR::TypeRef", align 8
  %60 = alloca %"class.std::vector.133", align 8
  %61 = alloca %"class.std::vector.133", align 8
  %62 = alloca %struct.Span, align 8
  %63 = alloca %"class.std::function", align 8
  %64 = alloca %class.anon.428, align 8
  %65 = alloca %"class.__gnu_cxx::__normal_iterator.417", align 8
  %66 = alloca %"class.__gnu_cxx::__normal_iterator.417", align 8
  %67 = alloca %"class.__gnu_cxx::__normal_iterator.417", align 8
  %68 = alloca %"class.__gnu_cxx::__normal_iterator.417", align 8
  %69 = alloca %"class.HIR::TypeRef", align 8
  %70 = alloca %"class.__gnu_cxx::__normal_iterator.417", align 8
  %71 = alloca %"class.__gnu_cxx::__normal_iterator.417", align 8
  %72 = alloca %"class.std::unique_ptr.74", align 8
  %73 = alloca %"class.std::unique_ptr.429", align 8
  %74 = alloca %struct.SlicePatRevisit, align 8
  %75 = alloca %struct.Span, align 8
  %76 = alloca %"class.HIR::TypeRef", align 8
  %77 = alloca %"class.HIR::TypeRef", align 8
  %78 = alloca %"class.HIR::TypeRef", align 8
  %79 = alloca %struct.Span, align 8
  %80 = alloca %"class.std::function", align 8
  %81 = alloca %class.anon.437, align 8
  %82 = alloca %"class.HIR::TypeRef", align 8
  %83 = alloca %"class.HIR::TypeRef", align 8
  %84 = alloca %"class.HIR::TypeRef", align 8
  %85 = alloca %struct.Span, align 8
  %86 = alloca %"class.std::function", align 8
  %87 = alloca %class.anon.438, align 1
  %88 = alloca %"class.HIR::TypeRef", align 8
  %89 = alloca %"class.HIR::TypeRef", align 8
  %90 = alloca %"class.HIR::TypeRef", align 8
  %91 = alloca %"class.HIR::TypeRef", align 8
  %92 = alloca %"class.HIR::TypeRef", align 8
  %93 = alloca %"class.HIR::TypeRef", align 8
  %94 = alloca %"class.std::unique_ptr.74", align 8
  %95 = alloca %"class.std::unique_ptr.440", align 8
  %96 = alloca %struct.SplitSlicePatRevisit, align 8
  %97 = alloca %struct.Span, align 8
  %98 = alloca %"class.HIR::TypeRef", align 8
  %99 = alloca %"class.HIR::TypeRef", align 8
  %100 = alloca %"class.HIR::TypeRef", align 8
  %101 = alloca %"class.__gnu_cxx::__normal_iterator.417", align 8
  %102 = alloca %"class.__gnu_cxx::__normal_iterator.417", align 8
  %103 = alloca %"class.__gnu_cxx::__normal_iterator.417", align 8
  %104 = alloca %"class.__gnu_cxx::__normal_iterator.417", align 8
  %105 = alloca %"class.HIR::TypeRef", align 8
  %106 = alloca %struct.Span, align 8
  %107 = alloca %"class.std::function", align 8
  %108 = alloca %class.anon.448, align 1
  %109 = alloca %struct.Span, align 8
  %110 = alloca %"class.std::function", align 8
  %111 = alloca %class.anon.460, align 1
  %112 = alloca %"class.HIR::TypeRef", align 8
  %113 = alloca %struct.MonomorphStatePtr, align 8
  %114 = alloca %"class.HIR::TypeRef", align 8
  %115 = alloca %class.anon.462, align 8
  %116 = alloca %struct.Span, align 8
  %117 = alloca %"class.std::function", align 8
  %118 = alloca %class.anon.463, align 8
  %119 = alloca %struct.Span, align 8
  %120 = alloca %"class.std::function", align 8
  %121 = alloca %class.anon.464, align 8
  %122 = alloca %"class.HIR::TypeRef", align 8
  %123 = alloca %struct.MonomorphStatePtr, align 8
  %124 = alloca %"class.__gnu_cxx::__normal_iterator.468", align 8
  %125 = alloca %"class.__gnu_cxx::__normal_iterator.468", align 8
  %126 = alloca %"class.__gnu_cxx::__normal_iterator.471", align 8
  %127 = alloca %"class.__gnu_cxx::__normal_iterator.471", align 8
  %128 = alloca %struct.Span, align 8
  %129 = alloca %"class.std::function", align 8
  %130 = alloca %class.anon.473, align 8
  %131 = alloca %"class.HIR::TypeRef", align 8
  %132 = alloca %"class.__gnu_cxx::__normal_iterator.417", align 8
  %133 = alloca %"class.__gnu_cxx::__normal_iterator.417", align 8
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %5) #8
  %134 = tail call noundef zeroext i1 @_Z13debug_enabledv()
  %135 = select i1 %134, ptr @__func__._ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE, ptr null
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %7) #8
  store ptr %2, ptr %7, align 8, !tbaa !5
  %136 = getelementptr inbounds i8, ptr %7, i64 8
  store ptr %3, ptr %136, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 8 dereferenceable(16) %7) #8
  invoke void @_ZN8TraceLogC1EPKcSt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(40) %5, ptr noundef %135, ptr noundef nonnull %6)
          to label %137 unwind label %141

137:                                              ; preds = %4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #8
  %138 = call ptr @_ZNSt6vectorIN3HIR14PatternBindingESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %2) #8
  store ptr %138, ptr %8, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #8
  %139 = call ptr @_ZNSt6vectorIN3HIR14PatternBindingESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %2) #8
  store ptr %139, ptr %9, align 8
  %140 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR14PatternBindingESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %9) #8
  br i1 %140, label %.lr.ph, label %.lr.ph1925

141:                                              ; preds = %4
  %142 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %7) #8
  br label %970

.lr.ph:                                           ; preds = %137, %145
  %143 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR14PatternBindingESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %8) #8
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %10, ptr noundef nonnull align 8 dereferenceable(8) %3)
          to label %144 unwind label %148

144:                                              ; preds = %.lr.ph
  invoke void @_ZN7Context17add_binding_innerERK4SpanRKN3HIR14PatternBindingENS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(24) %143, ptr noundef nonnull %10)
          to label %145 unwind label %150

145:                                              ; preds = %144
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %10) #8
  %146 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR14PatternBindingESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %8) #8
  %147 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR14PatternBindingESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %9) #8
  br i1 %147, label %.lr.ph, label %.lr.ph1925

148:                                              ; preds = %.lr.ph
  %149 = landingpad { ptr, i32 }
          cleanup
  br label %152

150:                                              ; preds = %144
  %151 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %10) #8
  br label %152

152:                                              ; preds = %150, %148
  %.pn708 = phi { ptr, i32 } [ %151, %150 ], [ %149, %148 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #8
  br label %969

.lr.ph1925:                                       ; preds = %145, %137
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #8
  %153 = getelementptr inbounds i8, ptr %2, i64 24
  %154 = getelementptr inbounds i8, ptr %115, i64 8
  %155 = getelementptr inbounds i8, ptr %115, i64 16
  %156 = getelementptr inbounds i8, ptr %0, i64 32
  %157 = getelementptr inbounds i8, ptr %0, i64 584
  %158 = call noundef i32 @_ZNK3HIR7Pattern4Data3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %153)
  switch i32 %158, label %.loopexit765 [
    i32 0, label %168
    i32 1, label %.preheader767.split
    i32 10, label %.preheader768.split
    i32 11, label %.preheader770.split.split
    i32 2, label %.lr.ph1506
    i32 3, label %.lr.ph1503
    i32 4, label %.lr.ph1500
    i32 5, label %.lr.ph1491
    i32 12, label %.lr.ph1474
    i32 13, label %.lr.ph1344
    i32 6, label %.lr.ph1089
    i32 7, label %.lr.ph1025
    i32 8, label %.lr.ph1016
    i32 9, label %.preheader789.split.split
  ]

.preheader789.split.split:                        ; preds = %.lr.ph1925
  %159 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN3HIR7Pattern4Data5as_OrEv(ptr noundef nonnull align 8 dereferenceable(184) %153)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %132) #8
  %160 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %159) #8
  store ptr %160, ptr %132, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %133) #8
  %161 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %159) #8
  store ptr %161, ptr %133, align 8
  %162 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %132, ptr noundef nonnull align 8 dereferenceable(8) %133) #8
  br i1 %162, label %.lr.ph885, label %..loopexit766_crit_edge

.preheader770.split.split:                        ; preds = %.lr.ph1925
  %163 = call noundef nonnull align 8 dereferenceable(17) ptr @_ZN3HIR7Pattern4Data8as_RangeEv(ptr noundef nonnull align 8 dereferenceable(184) %153)
  %164 = getelementptr inbounds i8, ptr %163, i64 8
  %165 = call noundef zeroext i1 @_ZNKSt10unique_ptrIN3HIR7Pattern5ValueESt14default_deleteIS2_EEcvbEv(ptr noundef nonnull align 8 dereferenceable(8) %163) #8
  br i1 %165, label %171, label %173

.preheader768.split:                              ; preds = %.lr.ph1925
  %166 = call noundef nonnull align 8 dereferenceable(104) ptr @_ZN3HIR7Pattern4Data8as_ValueEv(ptr noundef nonnull align 8 dereferenceable(184) %153)
  invoke void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN1H12handle_valueERS_S2_S8_RKNS4_5ValueE(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef nonnull align 8 dereferenceable(104) %166)
          to label %.loopexit765 unwind label %.split1654, !llvm.loop !9

.preheader767.split:                              ; preds = %.lr.ph1925
  %167 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZN3HIR7Pattern4Data6as_AnyEv(ptr noundef nonnull align 8 dereferenceable(184) %153)
  br label %.loopexit765

168:                                              ; preds = %.lr.ph1925
  call void @__assert_fail(ptr noundef nonnull @.str.20, ptr noundef nonnull @.str.21, i32 noundef 3253, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE) #9
  unreachable

.split1654:                                       ; preds = %.preheader768.split
  %169 = landingpad { ptr, i32 }
          cleanup
  br label %969

.split1511.split:                                 ; preds = %175, %171
  %170 = landingpad { ptr, i32 }
          cleanup
  br label %969

171:                                              ; preds = %.preheader770.split.split
  %172 = call noundef nonnull align 8 dereferenceable(104) ptr @_ZNKSt10unique_ptrIN3HIR7Pattern5ValueESt14default_deleteIS2_EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %163) #8
  invoke void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN1H12handle_valueERS_S2_S8_RKNS4_5ValueE(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef nonnull align 8 dereferenceable(104) %172)
          to label %173 unwind label %.split1511.split

173:                                              ; preds = %171, %.preheader770.split.split
  %174 = call noundef zeroext i1 @_ZNKSt10unique_ptrIN3HIR7Pattern5ValueESt14default_deleteIS2_EEcvbEv(ptr noundef nonnull align 8 dereferenceable(8) %164) #8
  br i1 %174, label %175, label %.loopexit765

175:                                              ; preds = %173
  %176 = call noundef nonnull align 8 dereferenceable(104) ptr @_ZNKSt10unique_ptrIN3HIR7Pattern5ValueESt14default_deleteIS2_EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %164) #8
  invoke void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN1H12handle_valueERS_S2_S8_RKNS4_5ValueE(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef nonnull align 8 dereferenceable(104) %176)
          to label %.loopexit765 unwind label %.split1511.split

177:                                              ; preds = %187
  %178 = landingpad { ptr, i32 }
          cleanup
  br label %969

.lr.ph1506:                                       ; preds = %.lr.ph1925
  %179 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIR7Pattern4Data6as_BoxEv(ptr noundef nonnull align 8 dereferenceable(184) %153)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #8
  invoke void @_ZN3HIR10SimplePathC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %11)
          to label %180 unwind label %188

180:                                              ; preds = %.lr.ph1506
  %181 = invoke noundef zeroext i1 @_ZNK3HIR10SimplePatheqERKS0_(ptr noundef nonnull align 8 dereferenceable(8) %157, ptr noundef nonnull align 8 dereferenceable(8) %11)
          to label %182 unwind label %190

182:                                              ; preds = %180
  call void @_ZN3HIR10SimplePathD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %11) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #8
  br i1 %181, label %183, label %200

183:                                              ; preds = %182
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #8
  invoke void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef nonnull align 8 dereferenceable(8) %1)
          to label %184 unwind label %193

184:                                              ; preds = %183
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %14) #8
  call void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef nonnull align 1 dereferenceable(1) %14) #8
  invoke void @_ZNK4Span5errorE9ErrorTypeSt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %12, i32 noundef 0, ptr noundef nonnull %13)
          to label %185 unwind label %195

185:                                              ; preds = %184
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %12) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #8
  %186 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %186, ptr noundef nonnull @.str.19)
          to label %187 unwind label %198

187:                                              ; preds = %185
  invoke void @__cxa_throw(ptr nonnull %186, ptr nonnull @_ZTISt13runtime_error, ptr nonnull @_ZNSt13runtime_errorD1Ev) #10
          to label %971 unwind label %177

188:                                              ; preds = %.lr.ph1506
  %189 = landingpad { ptr, i32 }
          cleanup
  br label %192

190:                                              ; preds = %180
  %191 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR10SimplePathD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %11) #8
  br label %192

192:                                              ; preds = %190, %188
  %.pn686 = phi { ptr, i32 } [ %191, %190 ], [ %189, %188 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #8
  br label %969

193:                                              ; preds = %183
  %194 = landingpad { ptr, i32 }
          cleanup
  br label %197

195:                                              ; preds = %184
  %196 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %12) #8
  br label %197

197:                                              ; preds = %195, %193
  %.pn702 = phi { ptr, i32 } [ %196, %195 ], [ %194, %193 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #8
  br label %969

198:                                              ; preds = %185
  %199 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %186) #8
  br label %969

200:                                              ; preds = %182
  %201 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7Context8get_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %3)
          to label %202 unwind label %217

202:                                              ; preds = %200
  %203 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %201)
  %204 = call noundef ptr @_ZNK3HIR8TypeData8opt_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %203)
  %.not688 = icmp eq ptr %204, null
  br i1 %.not688, label %223, label %205

205:                                              ; preds = %202
  %206 = call noundef zeroext i1 @_ZNK3HIR4Path4Data10is_GenericEv(ptr noundef nonnull align 8 dereferenceable(88) %204)
  br i1 %206, label %207, label %223

207:                                              ; preds = %205
  %208 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK3HIR4Path4Data10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(88) %204)
  %209 = invoke noundef zeroext i1 @_ZNK3HIR10SimplePatheqERKS0_(ptr noundef nonnull align 8 dereferenceable(8) %208, ptr noundef nonnull align 8 dereferenceable(8) %157)
          to label %210 unwind label %219

210:                                              ; preds = %207
  br i1 %209, label %211, label %223

211:                                              ; preds = %210
  %212 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK3HIR4Path4Data10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(88) %204)
  %213 = getelementptr inbounds i8, ptr %212, i64 16
  %214 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK10ThinVectorIN3HIR7TypeRefEE2atEm(ptr noundef nonnull align 8 dereferenceable(8) %213, i64 noundef 0)
          to label %215 unwind label %221

215:                                              ; preds = %211
  %216 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNKSt10unique_ptrIN3HIR7PatternESt14default_deleteIS1_EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %179) #8
  invoke void @_ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(212) %216, ptr noundef nonnull align 8 dereferenceable(8) %214)
          to label %.loopexit765 unwind label %221

217:                                              ; preds = %200
  %218 = landingpad { ptr, i32 }
          cleanup
  br label %969

219:                                              ; preds = %207
  %220 = landingpad { ptr, i32 }
          cleanup
  br label %969

221:                                              ; preds = %215, %211
  %222 = landingpad { ptr, i32 }
          cleanup
  br label %969

223:                                              ; preds = %205, %210, %202
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #8
  invoke void @_ZN16HMTypeInferrence11new_ivar_trEN3HIR10InferClassE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %15, ptr noundef nonnull align 8 dereferenceable(49) %156, i32 noundef 0)
          to label %224 unwind label %237

224:                                              ; preds = %223
  %225 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNKSt10unique_ptrIN3HIR7PatternESt14default_deleteIS1_EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %179) #8
  invoke void @_ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(212) %225, ptr noundef nonnull align 8 dereferenceable(8) %15)
          to label %226 unwind label %239

226:                                              ; preds = %224
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %16) #8
  invoke void @_ZN3HIR10SimplePathC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef nonnull align 8 dereferenceable(8) %157)
          to label %227 unwind label %241

227:                                              ; preds = %226
  call void @_ZN3HIR7TypeRefC2EOS0_(ptr noundef nonnull align 8 dereferenceable(8) %19, ptr noundef nonnull align 8 dereferenceable(8) %15)
  invoke void @_ZN3HIR10PathParamsC1ENS_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(24) %18, ptr noundef nonnull %19)
          to label %228 unwind label %243

228:                                              ; preds = %227
  invoke void @_ZN3HIR11GenericPathC1ENS_10SimplePathENS_10PathParamsE(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull %17, ptr noundef nonnull %18)
          to label %229 unwind label %245

229:                                              ; preds = %228
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %18) #8
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %19) #8
  call void @_ZN3HIR10SimplePathD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %17) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #8
  invoke void @_ZN3HIR11GenericPathC2EOS0_(ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef nonnull align 8 dereferenceable(32) %16)
          to label %230 unwind label %248

230:                                              ; preds = %229
  invoke void @_ZN3HIR4PathC1ENS_11GenericPathE(ptr noundef nonnull align 8 dereferenceable(88) %21, ptr noundef nonnull %22)
          to label %231 unwind label %250

231:                                              ; preds = %230
  %232 = load ptr, ptr %0, align 8, !tbaa !11
  %233 = invoke noundef nonnull align 8 dereferenceable(252) ptr @_ZNK3HIR5Crate18get_struct_by_pathERK4SpanRKNS_10SimplePathE(ptr noundef nonnull align 8 dereferenceable(944) %232, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %157)
          to label %234 unwind label %252

234:                                              ; preds = %231
  invoke void @_ZN3HIR15TypePathBindingC2EPKNS_6StructE(ptr noundef nonnull align 8 dereferenceable(16) %23, ptr noundef nonnull %233)
          to label %235 unwind label %252

235:                                              ; preds = %234
  invoke void @_ZN3HIR7TypeRef8new_pathENS_4PathENS_15TypePathBindingE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %20, ptr noundef nonnull %21, ptr noundef nonnull %23)
          to label %236 unwind label %254

236:                                              ; preds = %235
  invoke void @_ZN7Context12equate_typesERK4SpanRKN3HIR7TypeRefES6_(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef nonnull align 8 dereferenceable(8) %20)
          to label %..thread718.loopexit_crit_edge unwind label %256

..thread718.loopexit_crit_edge:                   ; preds = %236
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %20) #8
  call void @_ZN3HIR15TypePathBindingD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %23) #8
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %21) #8
  call void @_ZN3HIR11GenericPathD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #8
  call void @_ZN3HIR11GenericPathD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #8
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %15) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #8
  br label %.loopexit765

237:                                              ; preds = %223
  %238 = landingpad { ptr, i32 }
          cleanup
  br label %264

239:                                              ; preds = %224
  %240 = landingpad { ptr, i32 }
          cleanup
  br label %263

241:                                              ; preds = %226
  %242 = landingpad { ptr, i32 }
          cleanup
  br label %262

243:                                              ; preds = %227
  %244 = landingpad { ptr, i32 }
          cleanup
  br label %247

245:                                              ; preds = %228
  %246 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %18) #8
  br label %247

247:                                              ; preds = %245, %243
  %.pn691 = phi { ptr, i32 } [ %246, %245 ], [ %244, %243 ]
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %19) #8
  call void @_ZN3HIR10SimplePathD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %17) #8
  br label %262

248:                                              ; preds = %229
  %249 = landingpad { ptr, i32 }
          cleanup
  br label %261

250:                                              ; preds = %230
  %251 = landingpad { ptr, i32 }
          cleanup
  br label %260

252:                                              ; preds = %234, %231
  %253 = landingpad { ptr, i32 }
          cleanup
  br label %259

254:                                              ; preds = %235
  %255 = landingpad { ptr, i32 }
          cleanup
  br label %258

256:                                              ; preds = %236
  %257 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %20) #8
  br label %258

258:                                              ; preds = %256, %254
  %.pn693 = phi { ptr, i32 } [ %257, %256 ], [ %255, %254 ]
  call void @_ZN3HIR15TypePathBindingD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %23) #8
  br label %259

259:                                              ; preds = %258, %252
  %.pn693.pn = phi { ptr, i32 } [ %.pn693, %258 ], [ %253, %252 ]
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %21) #8
  br label %260

260:                                              ; preds = %259, %250
  %.pn693.pn.pn = phi { ptr, i32 } [ %.pn693.pn, %259 ], [ %251, %250 ]
  call void @_ZN3HIR11GenericPathD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #8
  br label %261

261:                                              ; preds = %260, %248
  %.pn693.pn.pn.pn = phi { ptr, i32 } [ %.pn693.pn.pn, %260 ], [ %249, %248 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #8
  call void @_ZN3HIR11GenericPathD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #8
  br label %262

262:                                              ; preds = %261, %247, %241
  %.pn693.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn693.pn.pn.pn, %261 ], [ %.pn691, %247 ], [ %242, %241 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #8
  br label %263

263:                                              ; preds = %262, %239
  %.pn693.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn693.pn.pn.pn.pn, %262 ], [ %240, %239 ]
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %15) #8
  br label %264

264:                                              ; preds = %263, %237
  %.pn693.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn693.pn.pn.pn.pn.pn, %263 ], [ %238, %237 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #8
  br label %969

.lr.ph1503:                                       ; preds = %.lr.ph1925
  %265 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN3HIR7Pattern4Data6as_RefEv(ptr noundef nonnull align 8 dereferenceable(184) %153)
  %266 = getelementptr inbounds i8, ptr %265, i64 8
  %267 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7Context8get_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %3)
          to label %268 unwind label %280

268:                                              ; preds = %.lr.ph1503
  %269 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %267)
  %270 = call noundef ptr @_ZNK3HIR8TypeData10opt_BorrowEv(ptr noundef nonnull align 8 dereferenceable(184) %269)
  %.not675 = icmp eq ptr %270, null
  br i1 %.not675, label %292, label %271

271:                                              ; preds = %268
  %272 = getelementptr inbounds i8, ptr %270, i64 4
  %273 = load i32, ptr %272, align 4, !tbaa !82
  %274 = load i32, ptr %265, align 8, !tbaa !87
  %.not680 = icmp eq i32 %273, %274
  br i1 %.not680, label %289, label %275

275:                                              ; preds = %271
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %24) #8
  invoke void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %24, ptr noundef nonnull align 8 dereferenceable(8) %1)
          to label %276 unwind label %282

276:                                              ; preds = %275
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %26) #8
  call void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %25, ptr noundef nonnull align 1 dereferenceable(1) %26) #8
  invoke void @_ZNK4Span5errorE9ErrorTypeSt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %24, i32 noundef 0, ptr noundef nonnull %25)
          to label %277 unwind label %284

277:                                              ; preds = %276
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %26) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %24) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #8
  %278 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %278, ptr noundef nonnull @.str.19)
          to label %279 unwind label %287

279:                                              ; preds = %277
  invoke void @__cxa_throw(ptr nonnull %278, ptr nonnull @_ZTISt13runtime_error, ptr nonnull @_ZNSt13runtime_errorD1Ev) #10
          to label %971 unwind label %.loopexit.split-lp

280:                                              ; preds = %.lr.ph1503
  %281 = landingpad { ptr, i32 }
          cleanup
  br label %969

.loopexit758:                                     ; preds = %289
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %969

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

282:                                              ; preds = %275
  %283 = landingpad { ptr, i32 }
          cleanup
  br label %286

284:                                              ; preds = %276
  %285 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %26) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %24) #8
  br label %286

286:                                              ; preds = %284, %282
  %.pn681 = phi { ptr, i32 } [ %285, %284 ], [ %283, %282 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %24) #8
  br label %969

287:                                              ; preds = %277
  %288 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %278) #8
  br label %969

289:                                              ; preds = %271
  %290 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNKSt10unique_ptrIN3HIR7PatternESt14default_deleteIS1_EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %266) #8
  %291 = getelementptr inbounds i8, ptr %270, i64 8
  invoke void @_ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(212) %290, ptr noundef nonnull align 8 dereferenceable(8) %291)
          to label %.loopexit765 unwind label %.loopexit758

292:                                              ; preds = %268
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #8
  invoke void @_ZN16HMTypeInferrence11new_ivar_trEN3HIR10InferClassE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %27, ptr noundef nonnull align 8 dereferenceable(49) %156, i32 noundef 0)
          to label %293 unwind label %299

293:                                              ; preds = %292
  %294 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNKSt10unique_ptrIN3HIR7PatternESt14default_deleteIS1_EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %266) #8
  invoke void @_ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(212) %294, ptr noundef nonnull align 8 dereferenceable(8) %27)
          to label %295 unwind label %301

295:                                              ; preds = %293
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %28) #8
  %296 = load i32, ptr %265, align 8, !tbaa !87
  call void @_ZN3HIR7TypeRefC2EOS0_(ptr noundef nonnull align 8 dereferenceable(8) %29, ptr noundef nonnull align 8 dereferenceable(8) %27)
  invoke void @_ZN3HIR7TypeRef10new_borrowENS_10BorrowTypeES0_(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %28, i32 noundef %296, ptr noundef nonnull %29)
          to label %297 unwind label %303

297:                                              ; preds = %295
  invoke void @_ZN7Context12equate_typesERK4SpanRKN3HIR7TypeRefES6_(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef nonnull align 8 dereferenceable(8) %28)
          to label %298 unwind label %305

298:                                              ; preds = %297
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %28) #8
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %29) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #8
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %27) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #8
  br label %.loopexit765

299:                                              ; preds = %292
  %300 = landingpad { ptr, i32 }
          cleanup
  br label %309

301:                                              ; preds = %293
  %302 = landingpad { ptr, i32 }
          cleanup
  br label %308

303:                                              ; preds = %295
  %304 = landingpad { ptr, i32 }
          cleanup
  br label %307

305:                                              ; preds = %297
  %306 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %28) #8
  br label %307

307:                                              ; preds = %305, %303
  %.pn676 = phi { ptr, i32 } [ %306, %305 ], [ %304, %303 ]
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %29) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #8
  br label %308

308:                                              ; preds = %307, %301
  %.pn676.pn = phi { ptr, i32 } [ %.pn676, %307 ], [ %302, %301 ]
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %27) #8
  br label %309

309:                                              ; preds = %308, %299
  %.pn676.pn.pn = phi { ptr, i32 } [ %.pn676.pn, %308 ], [ %300, %299 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #8
  br label %969

.lr.ph1500:                                       ; preds = %.lr.ph1925
  %310 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN3HIR7Pattern4Data8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(184) %153)
  %311 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7Context8get_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %3)
          to label %312 unwind label %325

312:                                              ; preds = %.lr.ph1500
  %313 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %311)
  %314 = call noundef ptr @_ZNK3HIR8TypeData9opt_TupleEv(ptr noundef nonnull align 8 dereferenceable(184) %313)
  %.not660 = icmp eq ptr %314, null
  br i1 %.not660, label %346, label %315

315:                                              ; preds = %312
  %316 = call noundef i64 @_ZNKSt6vectorIN3HIR7PatternESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %310) #8
  %317 = call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %314) #8
  %.not668 = icmp eq i64 %316, %317
  br i1 %.not668, label %.preheader747, label %319

.preheader747:                                    ; preds = %315
  %318 = call noundef i64 @_ZNKSt6vectorIN3HIR7PatternESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %310) #8
  %.not1929 = icmp eq i64 %318, 0
  br i1 %.not1929, label %.loopexit765, label %.lr.ph1494

319:                                              ; preds = %315
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %30) #8
  invoke void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %30, ptr noundef nonnull align 8 dereferenceable(8) %1)
          to label %320 unwind label %327

320:                                              ; preds = %319
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %32) #8
  store ptr %310, ptr %32, align 8, !tbaa !5
  %321 = getelementptr inbounds i8, ptr %32, i64 8
  store ptr %311, ptr %321, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE3$_3vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %31, ptr noundef nonnull align 8 dereferenceable(16) %32) #8
  invoke void @_ZNK4Span5errorE9ErrorTypeSt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %30, i32 noundef 0, ptr noundef nonnull %31)
          to label %322 unwind label %329

322:                                              ; preds = %320
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %32) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %30) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #8
  %323 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %323, ptr noundef nonnull @.str.19)
          to label %324 unwind label %332

324:                                              ; preds = %322
  invoke void @__cxa_throw(ptr nonnull %323, ptr nonnull @_ZTISt13runtime_error, ptr nonnull @_ZNSt13runtime_errorD1Ev) #10
          to label %971 unwind label %334

325:                                              ; preds = %.lr.ph1500
  %326 = landingpad { ptr, i32 }
          cleanup
  br label %969

327:                                              ; preds = %319
  %328 = landingpad { ptr, i32 }
          cleanup
  br label %331

329:                                              ; preds = %320
  %330 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %32) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %30) #8
  br label %331

331:                                              ; preds = %329, %327
  %.pn669 = phi { ptr, i32 } [ %330, %329 ], [ %328, %327 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #8
  br label %969

332:                                              ; preds = %322
  %333 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %323) #8
  br label %969

334:                                              ; preds = %324
  %335 = landingpad { ptr, i32 }
          cleanup
  br label %969

.lr.ph1494:                                       ; preds = %.preheader747, %339
  %336 = phi i64 [ %341, %339 ], [ 0, %.preheader747 ]
  %.05111493 = phi i32 [ %340, %339 ], [ 0, %.preheader747 ]
  %337 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %310, i64 noundef %336) #8
  %338 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %314, i64 noundef %336) #8
  invoke void @_ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(212) %337, ptr noundef nonnull align 8 dereferenceable(8) %338)
          to label %339 unwind label %344

339:                                              ; preds = %.lr.ph1494
  %340 = add i32 %.05111493, 1
  %341 = zext i32 %340 to i64
  %342 = call noundef i64 @_ZNKSt6vectorIN3HIR7PatternESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %310) #8
  %343 = icmp ugt i64 %342, %341
  br i1 %343, label %.lr.ph1494, label %.loopexit765, !llvm.loop !95

344:                                              ; preds = %.lr.ph1494
  %345 = landingpad { ptr, i32 }
          cleanup
  br label %969

346:                                              ; preds = %312
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %33) #8
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %33) #8
  %347 = call noundef i64 @_ZNKSt6vectorIN3HIR7PatternESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %310) #8
  %.not1930 = icmp eq i64 %347, 0
  br i1 %.not1930, label %._crit_edge1498, label %.lr.ph1497

._crit_edge1498:                                  ; preds = %353, %346
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %35) #8
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EEC2EOS3_(ptr noundef nonnull align 8 dereferenceable(24) %36, ptr noundef nonnull align 8 dereferenceable(24) %33) #8
  invoke void @_ZN3HIR7TypeRefC2ESt6vectorIS0_SaIS0_EE(ptr noundef nonnull align 8 dereferenceable(8) %35, ptr noundef nonnull %36)
          to label %365 unwind label %367

.lr.ph1497:                                       ; preds = %346, %353
  %348 = phi i64 [ %355, %353 ], [ 0, %346 ]
  %.05121495 = phi i32 [ %354, %353 ], [ 0, %346 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %34) #8
  invoke void @_ZN16HMTypeInferrence11new_ivar_trEN3HIR10InferClassE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %34, ptr noundef nonnull align 8 dereferenceable(49) %156, i32 noundef 0)
          to label %349 unwind label %358

349:                                              ; preds = %.lr.ph1497
  invoke void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %33, ptr noundef nonnull align 8 dereferenceable(8) %34)
          to label %350 unwind label %360

350:                                              ; preds = %349
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %34) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #8
  %351 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %310, i64 noundef %348) #8
  %352 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %33, i64 noundef %348) #8
  invoke void @_ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(212) %351, ptr noundef nonnull align 8 dereferenceable(8) %352)
          to label %353 unwind label %363

353:                                              ; preds = %350
  %354 = add i32 %.05121495, 1
  %355 = zext i32 %354 to i64
  %356 = call noundef i64 @_ZNKSt6vectorIN3HIR7PatternESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %310) #8
  %357 = icmp ugt i64 %356, %355
  br i1 %357, label %.lr.ph1497, label %._crit_edge1498, !llvm.loop !96

358:                                              ; preds = %.lr.ph1497
  %359 = landingpad { ptr, i32 }
          cleanup
  br label %362

360:                                              ; preds = %349
  %361 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %34) #8
  br label %362

362:                                              ; preds = %360, %358
  %.pn663 = phi { ptr, i32 } [ %361, %360 ], [ %359, %358 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #8
  br label %372

363:                                              ; preds = %350
  %364 = landingpad { ptr, i32 }
          cleanup
  br label %372

365:                                              ; preds = %._crit_edge1498
  invoke void @_ZN7Context12equate_typesERK4SpanRKN3HIR7TypeRefES6_(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %311, ptr noundef nonnull align 8 dereferenceable(8) %35)
          to label %366 unwind label %369

366:                                              ; preds = %365
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %35) #8
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %36) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #8
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %33) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %33) #8
  br label %.loopexit765

367:                                              ; preds = %._crit_edge1498
  %368 = landingpad { ptr, i32 }
          cleanup
  br label %371

369:                                              ; preds = %365
  %370 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %35) #8
  br label %371

371:                                              ; preds = %369, %367
  %.pn661 = phi { ptr, i32 } [ %370, %369 ], [ %368, %367 ]
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %36) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #8
  br label %372

372:                                              ; preds = %362, %363, %371
  %.pn665.pn = phi { ptr, i32 } [ %.pn661, %371 ], [ %364, %363 ], [ %.pn663, %362 ]
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %33) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %33) #8
  br label %969

.lr.ph1491:                                       ; preds = %.lr.ph1925
  %373 = call noundef nonnull align 8 dereferenceable(52) ptr @_ZN3HIR7Pattern4Data13as_SplitTupleEv(ptr noundef nonnull align 8 dereferenceable(184) %153)
  %374 = getelementptr inbounds i8, ptr %373, i64 24
  %375 = getelementptr inbounds i8, ptr %373, i64 48
  %376 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7Context8get_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %3)
          to label %377 unwind label %390

377:                                              ; preds = %.lr.ph1491
  %378 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %376)
  %379 = call noundef ptr @_ZNK3HIR8TypeData9opt_TupleEv(ptr noundef nonnull align 8 dereferenceable(184) %378)
  %.not634 = icmp eq ptr %379, null
  br i1 %.not634, label %434, label %380

380:                                              ; preds = %377
  %381 = call noundef i64 @_ZNKSt6vectorIN3HIR7PatternESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %373) #8
  %382 = call noundef i64 @_ZNKSt6vectorIN3HIR7PatternESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %374) #8
  %383 = add i64 %382, %381
  %384 = call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %379) #8
  %.not652 = icmp ugt i64 %383, %384
  br i1 %.not652, label %385, label %403

385:                                              ; preds = %380
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %37) #8
  invoke void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %37, ptr noundef nonnull align 8 dereferenceable(8) %1)
          to label %386 unwind label %394

386:                                              ; preds = %385
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %39) #8
  call void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE3$_4vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %38, ptr noundef nonnull align 1 dereferenceable(1) %39) #8
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %37, ptr noundef nonnull %38)
          to label %387 unwind label %396

387:                                              ; preds = %386
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %39) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %37) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #8
  %388 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %388, ptr noundef nonnull @.str.16)
          to label %389 unwind label %399

389:                                              ; preds = %387
  invoke void @__cxa_throw(ptr nonnull %388, ptr nonnull @_ZTISt13runtime_error, ptr nonnull @_ZNSt13runtime_errorD1Ev) #10
          to label %971 unwind label %401

390:                                              ; preds = %.lr.ph1491
  %391 = landingpad { ptr, i32 }
          cleanup
  br label %969

392:                                              ; preds = %441
  %393 = landingpad { ptr, i32 }
          cleanup
  br label %969

394:                                              ; preds = %385
  %395 = landingpad { ptr, i32 }
          cleanup
  br label %398

396:                                              ; preds = %386
  %397 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %39) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %37) #8
  br label %398

398:                                              ; preds = %396, %394
  %.pn653 = phi { ptr, i32 } [ %397, %396 ], [ %395, %394 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #8
  br label %969

399:                                              ; preds = %387
  %400 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %388) #8
  br label %969

401:                                              ; preds = %389
  %402 = landingpad { ptr, i32 }
          cleanup
  br label %969

403:                                              ; preds = %380
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %40) #8
  %404 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %373) #8
  store ptr %404, ptr %40, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %41) #8
  %405 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %373) #8
  store ptr %405, ptr %41, align 8
  %406 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %40, ptr noundef nonnull align 8 dereferenceable(8) %41) #8
  br i1 %406, label %.lr.ph1478, label %._crit_edge1479

._crit_edge1479:                                  ; preds = %417, %403
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %40) #8
  %407 = call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %379) #8
  %408 = call noundef i64 @_ZNKSt6vectorIN3HIR7PatternESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %374) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %42) #8
  %409 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %374) #8
  store ptr %409, ptr %42, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %43) #8
  %410 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %374) #8
  store ptr %410, ptr %43, align 8
  %411 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %42, ptr noundef nonnull align 8 dereferenceable(8) %43) #8
  br i1 %411, label %.lr.ph1482.preheader, label %._crit_edge1483

.lr.ph1482.preheader:                             ; preds = %._crit_edge1479
  %412 = sub i64 %407, %408
  %413 = trunc i64 %412 to i32
  br label %.lr.ph1482

.lr.ph1478:                                       ; preds = %403, %417
  %.05181476 = phi i32 [ %418, %417 ], [ 0, %403 ]
  %414 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %40) #8
  %415 = zext i32 %.05181476 to i64
  %416 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %379, i64 noundef %415) #8
  invoke void @_ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(212) %414, ptr noundef nonnull align 8 dereferenceable(8) %416)
          to label %417 unwind label %421

417:                                              ; preds = %.lr.ph1478
  %418 = add i32 %.05181476, 1
  %419 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %40) #8
  %420 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %40, ptr noundef nonnull align 8 dereferenceable(8) %41) #8
  br i1 %420, label %.lr.ph1478, label %._crit_edge1479

421:                                              ; preds = %.lr.ph1478
  %422 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %40) #8
  br label %969

._crit_edge1483:                                  ; preds = %428, %._crit_edge1479
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %43) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %42) #8
  %423 = call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %379) #8
  %424 = trunc i64 %423 to i32
  store i32 %424, ptr %375, align 8, !tbaa !97
  br label %.loopexit765

.lr.ph1482:                                       ; preds = %.lr.ph1482.preheader, %428
  %.15191480 = phi i32 [ %429, %428 ], [ %413, %.lr.ph1482.preheader ]
  %425 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %42) #8
  %426 = zext i32 %.15191480 to i64
  %427 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %379, i64 noundef %426) #8
  invoke void @_ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(212) %425, ptr noundef nonnull align 8 dereferenceable(8) %427)
          to label %428 unwind label %432

428:                                              ; preds = %.lr.ph1482
  %429 = add i32 %.15191480, 1
  %430 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %42) #8
  %431 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %42, ptr noundef nonnull align 8 dereferenceable(8) %43) #8
  br i1 %431, label %.lr.ph1482, label %._crit_edge1483

432:                                              ; preds = %.lr.ph1482
  %433 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %43) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %42) #8
  br label %969

434:                                              ; preds = %377
  %435 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %376)
  %436 = call noundef zeroext i1 @_ZNK3HIR8TypeData8is_InferEv(ptr noundef nonnull align 8 dereferenceable(184) %435)
  br i1 %436, label %449, label %437

437:                                              ; preds = %434
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %44) #8
  invoke void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %44, ptr noundef nonnull align 8 dereferenceable(8) %1)
          to label %438 unwind label %442

438:                                              ; preds = %437
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %46) #8
  call void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE3$_5vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %45, ptr noundef nonnull align 1 dereferenceable(1) %46) #8
  invoke void @_ZNK4Span5errorE9ErrorTypeSt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %44, i32 noundef 0, ptr noundef nonnull %45)
          to label %439 unwind label %444

439:                                              ; preds = %438
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %46) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %44) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %44) #8
  %440 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %440, ptr noundef nonnull @.str.19)
          to label %441 unwind label %447

441:                                              ; preds = %439
  invoke void @__cxa_throw(ptr nonnull %440, ptr nonnull @_ZTISt13runtime_error, ptr nonnull @_ZNSt13runtime_errorD1Ev) #10
          to label %971 unwind label %392

442:                                              ; preds = %437
  %443 = landingpad { ptr, i32 }
          cleanup
  br label %446

444:                                              ; preds = %438
  %445 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %46) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %44) #8
  br label %446

446:                                              ; preds = %444, %442
  %.pn635 = phi { ptr, i32 } [ %445, %444 ], [ %443, %442 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %44) #8
  br label %969

447:                                              ; preds = %439
  %448 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %440) #8
  br label %969

449:                                              ; preds = %434
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %47) #8
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %47) #8
  %450 = call noundef i64 @_ZNKSt6vectorIN3HIR7PatternESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %373) #8
  invoke void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24) %47, i64 noundef %450)
          to label %451 unwind label %458

451:                                              ; preds = %449
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %48) #8
  %452 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %373) #8
  store ptr %452, ptr %48, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %49) #8
  %453 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %373) #8
  store ptr %453, ptr %49, align 8
  %454 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %48, ptr noundef nonnull align 8 dereferenceable(8) %49) #8
  br i1 %454, label %.lr.ph1485, label %._crit_edge1486

._crit_edge1486:                                  ; preds = %464, %451
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %49) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %48) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %51) #8
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %51) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %52) #8
  %455 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %374) #8
  store ptr %455, ptr %52, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %53) #8
  %456 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %374) #8
  store ptr %456, ptr %53, align 8
  %457 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %52, ptr noundef nonnull align 8 dereferenceable(8) %53) #8
  br i1 %457, label %.lr.ph1488, label %._crit_edge1489

458:                                              ; preds = %449
  %459 = landingpad { ptr, i32 }
          cleanup
  br label %510

.lr.ph1485:                                       ; preds = %451, %464
  %460 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %48) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %50) #8
  invoke void @_ZN16HMTypeInferrence11new_ivar_trEN3HIR10InferClassE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %50, ptr noundef nonnull align 8 dereferenceable(49) %156, i32 noundef 0)
          to label %461 unwind label %467

461:                                              ; preds = %.lr.ph1485
  invoke void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %47, ptr noundef nonnull align 8 dereferenceable(8) %50)
          to label %462 unwind label %469

462:                                              ; preds = %461
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %50) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %50) #8
  %463 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %47) #8
  invoke void @_ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(212) %460, ptr noundef nonnull align 8 dereferenceable(8) %463)
          to label %464 unwind label %472

464:                                              ; preds = %462
  %465 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %48) #8
  %466 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %48, ptr noundef nonnull align 8 dereferenceable(8) %49) #8
  br i1 %466, label %.lr.ph1485, label %._crit_edge1486

467:                                              ; preds = %.lr.ph1485
  %468 = landingpad { ptr, i32 }
          cleanup
  br label %471

469:                                              ; preds = %461
  %470 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %50) #8
  br label %471

471:                                              ; preds = %469, %467
  %.pn647 = phi { ptr, i32 } [ %470, %469 ], [ %468, %467 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %50) #8
  br label %474

472:                                              ; preds = %462
  %473 = landingpad { ptr, i32 }
          cleanup
  br label %474

474:                                              ; preds = %472, %471
  %.pn649 = phi { ptr, i32 } [ %473, %472 ], [ %.pn647, %471 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %49) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %48) #8
  br label %510

._crit_edge1489:                                  ; preds = %479, %._crit_edge1486
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %53) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %52) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %56) #8
  call void @llvm.lifetime.start.p0(i64 80, ptr nonnull %57) #8
  invoke void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %58, ptr noundef nonnull align 8 dereferenceable(8) %1)
          to label %490 unwind label %495

.lr.ph1488:                                       ; preds = %._crit_edge1486, %479
  %475 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %52) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %54) #8
  invoke void @_ZN16HMTypeInferrence11new_ivar_trEN3HIR10InferClassE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %54, ptr noundef nonnull align 8 dereferenceable(49) %156, i32 noundef 0)
          to label %476 unwind label %482

476:                                              ; preds = %.lr.ph1488
  invoke void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %51, ptr noundef nonnull align 8 dereferenceable(8) %54)
          to label %477 unwind label %484

477:                                              ; preds = %476
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %54) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %54) #8
  %478 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %51) #8
  invoke void @_ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(212) %475, ptr noundef nonnull align 8 dereferenceable(8) %478)
          to label %479 unwind label %487

479:                                              ; preds = %477
  %480 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %52) #8
  %481 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %52, ptr noundef nonnull align 8 dereferenceable(8) %53) #8
  br i1 %481, label %.lr.ph1488, label %._crit_edge1489

482:                                              ; preds = %.lr.ph1488
  %483 = landingpad { ptr, i32 }
          cleanup
  br label %486

484:                                              ; preds = %476
  %485 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %54) #8
  br label %486

486:                                              ; preds = %484, %482
  %.pn642 = phi { ptr, i32 } [ %485, %484 ], [ %483, %482 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %54) #8
  br label %489

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

489:                                              ; preds = %487, %486
  %.pn644 = phi { ptr, i32 } [ %488, %487 ], [ %.pn642, %486 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %53) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %52) #8
  br label %509

490:                                              ; preds = %._crit_edge1489
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %59, ptr noundef nonnull align 8 dereferenceable(8) %376)
          to label %491 unwind label %497

491:                                              ; preds = %490
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EEC2EOS3_(ptr noundef nonnull align 8 dereferenceable(24) %60, ptr noundef nonnull align 8 dereferenceable(24) %47) #8
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EEC2EOS3_(ptr noundef nonnull align 8 dereferenceable(24) %61, ptr noundef nonnull align 8 dereferenceable(24) %51) #8
  invoke void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN20SplitTuplePatRevisitC2ES0_S6_St6vectorIS6_SaIS6_EESC_Rj(ptr noundef nonnull align 8 dereferenceable(80) %57, ptr noundef nonnull %58, ptr noundef nonnull %59, ptr noundef nonnull %60, ptr noundef nonnull %61, ptr noundef nonnull align 4 dereferenceable(4) %375)
          to label %492 unwind label %499

492:                                              ; preds = %491
  invoke void @_Z15make_unique_ptrIZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS4_7TypeRefEE20SplitTuplePatRevisitESt10unique_ptrIT_St14default_deleteISC_EEOSC_(ptr dead_on_unwind nonnull writable sret(%"class.std::unique_ptr.420") align 8 %56, ptr noundef nonnull align 8 dereferenceable(80) %57)
          to label %493 unwind label %501

493:                                              ; preds = %492
  call void @_ZNSt10unique_ptrIN7Context9RevisitorESt14default_deleteIS1_EEC2IZNS0_27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS9_7TypeRefEE20SplitTuplePatRevisitS2_ISF_EvEEOS_IT_T0_E(ptr noundef nonnull align 8 dereferenceable(8) %55, ptr noundef nonnull align 8 dereferenceable(8) %56) #8
  invoke void @_ZN7Context15add_revisit_advESt10unique_ptrINS_9RevisitorESt14default_deleteIS1_EE(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull %55)
          to label %494 unwind label %503

494:                                              ; preds = %493
  call void @_ZNSt10unique_ptrIN7Context9RevisitorESt14default_deleteIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %55) #8
  call void @_ZNSt10unique_ptrIZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS4_7TypeRefEE20SplitTuplePatRevisitSt14default_deleteISA_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %56) #8
  call void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN20SplitTuplePatRevisitD2Ev(ptr noundef nonnull align 8 dereferenceable(80) %57) #8
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %61) #8
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %60) #8
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %59) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %58) #8
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %57) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %56) #8
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %51) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %51) #8
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %47) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %47) #8
  br label %.loopexit765

495:                                              ; preds = %._crit_edge1489
  %496 = landingpad { ptr, i32 }
          cleanup
  br label %508

497:                                              ; preds = %490
  %498 = landingpad { ptr, i32 }
          cleanup
  br label %507

499:                                              ; preds = %491
  %500 = landingpad { ptr, i32 }
          cleanup
  br label %506

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

503:                                              ; preds = %493
  %504 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt10unique_ptrIN7Context9RevisitorESt14default_deleteIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %55) #8
  call void @_ZNSt10unique_ptrIZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS4_7TypeRefEE20SplitTuplePatRevisitSt14default_deleteISA_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %56) #8
  br label %505

505:                                              ; preds = %503, %501
  %.pn637 = phi { ptr, i32 } [ %504, %503 ], [ %502, %501 ]
  call void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN20SplitTuplePatRevisitD2Ev(ptr noundef nonnull align 8 dereferenceable(80) %57) #8
  br label %506

506:                                              ; preds = %505, %499
  %.pn637.pn = phi { ptr, i32 } [ %.pn637, %505 ], [ %500, %499 ]
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %61) #8
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %60) #8
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %59) #8
  br label %507

507:                                              ; preds = %506, %497
  %.pn637.pn.pn = phi { ptr, i32 } [ %.pn637.pn, %506 ], [ %498, %497 ]
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %58) #8
  br label %508

508:                                              ; preds = %507, %495
  %.pn637.pn.pn.pn = phi { ptr, i32 } [ %.pn637.pn.pn, %507 ], [ %496, %495 ]
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %57) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %56) #8
  br label %509

509:                                              ; preds = %508, %489
  %.pn644.pn = phi { ptr, i32 } [ %.pn644, %489 ], [ %.pn637.pn.pn.pn, %508 ]
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %51) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %51) #8
  br label %510

510:                                              ; preds = %509, %474, %458
  %.pn649.pn = phi { ptr, i32 } [ %.pn649, %474 ], [ %.pn644.pn, %509 ], [ %459, %458 ]
  call void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %47) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %47) #8
  br label %969

.lr.ph1474:                                       ; preds = %.lr.ph1925
  %511 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN3HIR7Pattern4Data8as_SliceEv(ptr noundef nonnull align 8 dereferenceable(184) %153)
  %512 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7Context8get_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %3)
          to label %.lr.ph1471 unwind label %513

513:                                              ; preds = %.lr.ph1474
  %514 = landingpad { ptr, i32 }
          cleanup
  br label %969

515:                                              ; preds = %532
  %516 = landingpad { ptr, i32 }
          cleanup
  br label %969

.lr.ph1471:                                       ; preds = %.lr.ph1474
  %517 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %512)
  %518 = call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %517)
  switch i32 %518, label %528 [
    i32 0, label %527
    i32 9, label %.preheader
    i32 8, label %.preheader729
    i32 1, label %.lr.ph1350
  ]

.preheader729:                                    ; preds = %.lr.ph1471
  %519 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR8TypeData8as_ArrayEv(ptr noundef nonnull align 8 dereferenceable(184) %517)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %67) #8
  %520 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %511) #8
  store ptr %520, ptr %67, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %68) #8
  %521 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %511) #8
  store ptr %521, ptr %68, align 8
  %522 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %67, ptr noundef nonnull align 8 dereferenceable(8) %68) #8
  br i1 %522, label %.lr.ph1353, label %..loopexit721_crit_edge

.preheader:                                       ; preds = %.lr.ph1471
  %523 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_SliceEv(ptr noundef nonnull align 8 dereferenceable(184) %517)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %65) #8
  %524 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %511) #8
  store ptr %524, ptr %65, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %66) #8
  %525 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %511) #8
  store ptr %525, ptr %66, align 8
  %526 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %65, ptr noundef nonnull align 8 dereferenceable(8) %66) #8
  br i1 %526, label %.lr.ph1409, label %..loopexit_crit_edge

527:                                              ; preds = %.lr.ph1471
  call void @__assert_fail(ptr noundef nonnull @.str.20, ptr noundef nonnull @.str.21, i32 noundef 3413, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE) #9
  unreachable

528:                                              ; preds = %.lr.ph1471
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %62) #8
  invoke void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %62, ptr noundef nonnull align 8 dereferenceable(8) %1)
          to label %529 unwind label %533

529:                                              ; preds = %528
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %64) #8
  store ptr %512, ptr %64, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE3$_6vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %63, ptr noundef nonnull align 8 dereferenceable(8) %64) #8
  invoke void @_ZNK4Span5errorE9ErrorTypeSt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %62, i32 noundef 0, ptr noundef nonnull %63)
          to label %530 unwind label %535

530:                                              ; preds = %529
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %64) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %62) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %62) #8
  %531 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %531, ptr noundef nonnull @.str.19)
          to label %532 unwind label %538

532:                                              ; preds = %530
  invoke void @__cxa_throw(ptr nonnull %531, ptr nonnull @_ZTISt13runtime_error, ptr nonnull @_ZNSt13runtime_errorD1Ev) #10
          to label %971 unwind label %515

533:                                              ; preds = %528
  %534 = landingpad { ptr, i32 }
          cleanup
  br label %537

535:                                              ; preds = %529
  %536 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %64) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %62) #8
  br label %537

537:                                              ; preds = %535, %533
  %.pn629 = phi { ptr, i32 } [ %536, %535 ], [ %534, %533 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %62) #8
  br label %969

538:                                              ; preds = %530
  %539 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %531) #8
  br label %969

..loopexit_crit_edge:                             ; preds = %541, %.preheader
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %66) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %65) #8
  br label %.loopexit765

.lr.ph1409:                                       ; preds = %.preheader, %541
  %540 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %65) #8
  invoke void @_ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(212) %540, ptr noundef nonnull align 8 dereferenceable(8) %523)
          to label %541 unwind label %.split1414.split

541:                                              ; preds = %.lr.ph1409
  %542 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %65) #8
  %543 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %65, ptr noundef nonnull align 8 dereferenceable(8) %66) #8
  br i1 %543, label %.lr.ph1409, label %..loopexit_crit_edge

.split1414.split:                                 ; preds = %.lr.ph1409
  %544 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %66) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %65) #8
  br label %969

..loopexit721_crit_edge:                          ; preds = %546, %.preheader729
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %68) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %67) #8
  br label %.loopexit765

.lr.ph1353:                                       ; preds = %.preheader729, %546
  %545 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %67) #8
  invoke void @_ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(212) %545, ptr noundef nonnull align 8 dereferenceable(8) %519)
          to label %546 unwind label %.split1358.split

546:                                              ; preds = %.lr.ph1353
  %547 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %67) #8
  %548 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %67, ptr noundef nonnull align 8 dereferenceable(8) %68) #8
  br i1 %548, label %.lr.ph1353, label %..loopexit721_crit_edge

.split1358.split:                                 ; preds = %.lr.ph1353
  %549 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %68) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %67) #8
  br label %969

.lr.ph1350:                                       ; preds = %.lr.ph1471
  %550 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_InferEv(ptr noundef nonnull align 8 dereferenceable(184) %517)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %69) #8
  invoke void @_ZN16HMTypeInferrence11new_ivar_trEN3HIR10InferClassE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %69, ptr noundef nonnull align 8 dereferenceable(49) %156, i32 noundef 0)
          to label %551 unwind label %555

551:                                              ; preds = %.lr.ph1350
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %70) #8
  %552 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %511) #8
  store ptr %552, ptr %70, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %71) #8
  %553 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %511) #8
  store ptr %553, ptr %71, align 8
  %554 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %70, ptr noundef nonnull align 8 dereferenceable(8) %71) #8
  br i1 %554, label %.lr.ph1347, label %._crit_edge1348

._crit_edge1348:                                  ; preds = %558, %551
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %71) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %70) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %73) #8
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %74) #8
  invoke void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %75, ptr noundef nonnull align 8 dereferenceable(8) %1)
          to label %563 unwind label %569

555:                                              ; preds = %.lr.ph1350
  %556 = landingpad { ptr, i32 }
          cleanup
  br label %584

.lr.ph1347:                                       ; preds = %551, %558
  %557 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %70) #8
  invoke void @_ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(212) %557, ptr noundef nonnull align 8 dereferenceable(8) %69)
          to label %558 unwind label %561

558:                                              ; preds = %.lr.ph1347
  %559 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %70) #8
  %560 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %70, ptr noundef nonnull align 8 dereferenceable(8) %71) #8
  br i1 %560, label %.lr.ph1347, label %._crit_edge1348

561:                                              ; preds = %.lr.ph1347
  %562 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %71) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %70) #8
  br label %583

563:                                              ; preds = %._crit_edge1348
  call void @_ZN3HIR7TypeRefC2EOS0_(ptr noundef nonnull align 8 dereferenceable(8) %76, ptr noundef nonnull align 8 dereferenceable(8) %69)
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %77, ptr noundef nonnull align 8 dereferenceable(8) %512)
          to label %564 unwind label %571

564:                                              ; preds = %563
  %565 = call noundef i64 @_ZNKSt6vectorIN3HIR7PatternESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %511) #8
  %566 = trunc i64 %565 to i32
  invoke void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN15SlicePatRevisitC2ES0_S6_S6_j(ptr noundef nonnull align 8 dereferenceable(36) %74, ptr noundef nonnull %75, ptr noundef nonnull %76, ptr noundef nonnull %77, i32 noundef %566)
          to label %567 unwind label %573

567:                                              ; preds = %564
  invoke void @_Z15make_unique_ptrIZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS4_7TypeRefEE15SlicePatRevisitESt10unique_ptrIT_St14default_deleteISC_EEOSC_(ptr dead_on_unwind nonnull writable sret(%"class.std::unique_ptr.429") align 8 %73, ptr noundef nonnull align 8 dereferenceable(36) %74)
          to label %568 unwind label %575

568:                                              ; preds = %567
  call void @_ZNSt10unique_ptrIN7Context9RevisitorESt14default_deleteIS1_EEC2IZNS0_27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS9_7TypeRefEE15SlicePatRevisitS2_ISF_EvEEOS_IT_T0_E(ptr noundef nonnull align 8 dereferenceable(8) %72, ptr noundef nonnull align 8 dereferenceable(8) %73) #8
  invoke void @_ZN7Context15add_revisit_advESt10unique_ptrINS_9RevisitorESt14default_deleteIS1_EE(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull %72)
          to label %..loopexit722_crit_edge unwind label %577

..loopexit722_crit_edge:                          ; preds = %568
  call void @_ZNSt10unique_ptrIN7Context9RevisitorESt14default_deleteIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %72) #8
  call void @_ZNSt10unique_ptrIZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS4_7TypeRefEE15SlicePatRevisitSt14default_deleteISA_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %73) #8
  call void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN15SlicePatRevisitD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %74) #8
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %77) #8
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %76) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %75) #8
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %74) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %73) #8
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %69) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %69) #8
  br label %.loopexit765

569:                                              ; preds = %._crit_edge1348
  %570 = landingpad { ptr, i32 }
          cleanup
  br label %582

571:                                              ; preds = %563
  %572 = landingpad { ptr, i32 }
          cleanup
  br label %581

573:                                              ; preds = %564
  %574 = landingpad { ptr, i32 }
          cleanup
  br label %580

575:                                              ; preds = %567
  %576 = landingpad { ptr, i32 }
          cleanup
  br label %579

577:                                              ; preds = %568
  %578 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt10unique_ptrIN7Context9RevisitorESt14default_deleteIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %72) #8
  call void @_ZNSt10unique_ptrIZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS4_7TypeRefEE15SlicePatRevisitSt14default_deleteISA_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %73) #8
  br label %579

579:                                              ; preds = %577, %575
  %.pn621 = phi { ptr, i32 } [ %578, %577 ], [ %576, %575 ]
  call void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN15SlicePatRevisitD2Ev(ptr noundef nonnull align 8 dereferenceable(36) %74) #8
  br label %580

580:                                              ; preds = %579, %573
  %.pn621.pn = phi { ptr, i32 } [ %.pn621, %579 ], [ %574, %573 ]
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %77) #8
  br label %581

581:                                              ; preds = %580, %571
  %.pn621.pn.pn = phi { ptr, i32 } [ %.pn621.pn, %580 ], [ %572, %571 ]
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %76) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %75) #8
  br label %582

582:                                              ; preds = %581, %569
  %.pn621.pn.pn.pn = phi { ptr, i32 } [ %.pn621.pn.pn, %581 ], [ %570, %569 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %74) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %73) #8
  br label %583

583:                                              ; preds = %582, %561
  %.pn626 = phi { ptr, i32 } [ %562, %561 ], [ %.pn621.pn.pn.pn, %582 ]
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %69) #8
  br label %584

584:                                              ; preds = %583, %555
  %.pn626.pn = phi { ptr, i32 } [ %.pn626, %583 ], [ %556, %555 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %69) #8
  br label %969

.lr.ph1344:                                       ; preds = %.lr.ph1925
  %585 = call noundef nonnull align 8 dereferenceable(72) ptr @_ZN3HIR7Pattern4Data13as_SplitSliceEv(ptr noundef nonnull align 8 dereferenceable(184) %153)
  %586 = getelementptr inbounds i8, ptr %585, i64 48
  %587 = getelementptr inbounds i8, ptr %585, i64 24
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %78) #8
  invoke void @_ZN3HIR7TypeRefC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %78)
          to label %588 unwind label %597

588:                                              ; preds = %.lr.ph1344
  %589 = call noundef i64 @_ZNKSt6vectorIN3HIR7PatternESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %585) #8
  %590 = call noundef i64 @_ZNKSt6vectorIN3HIR7PatternESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %586) #8
  %591 = add i64 %590, %589
  %592 = trunc i64 %591 to i32
  %593 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7Context8get_typeERKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %3)
          to label %.lr.ph1335 unwind label %599

.loopexit744:                                     ; preds = %626, %629, %661, %656, %..loopexit725_crit_edge
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %101) #8
  %594 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %585) #8
  store ptr %594, ptr %101, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %102) #8
  %595 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %585) #8
  store ptr %595, ptr %102, align 8
  %596 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %101, ptr noundef nonnull align 8 dereferenceable(8) %102) #8
  br i1 %596, label %.lr.ph1338, label %._crit_edge1339

597:                                              ; preds = %.lr.ph1344
  %598 = landingpad { ptr, i32 }
          cleanup
  br label %728

599:                                              ; preds = %588
  %600 = landingpad { ptr, i32 }
          cleanup
  br label %727

601:                                              ; preds = %614
  %602 = landingpad { ptr, i32 }
          cleanup
  br label %727

.lr.ph1335:                                       ; preds = %588
  %603 = and i64 %591, 4294967295
  %604 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %593)
  %605 = call noundef i32 @_ZNK3HIR8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %604)
  switch i32 %605, label %610 [
    i32 0, label %609
    i32 9, label %.preheader733
    i32 8, label %.preheader735
    i32 1, label %.lr.ph1092
  ]

.preheader735:                                    ; preds = %.lr.ph1335
  %606 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3HIR8TypeData8as_ArrayEv(ptr noundef nonnull align 8 dereferenceable(184) %604)
  %607 = getelementptr inbounds i8, ptr %606, i64 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %84) #8
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %84, ptr noundef nonnull align 8 dereferenceable(8) %606)
          to label %634 unwind label %.split1097.split

.preheader733:                                    ; preds = %.lr.ph1335
  %608 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_SliceEv(ptr noundef nonnull align 8 dereferenceable(184) %604)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %82) #8
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %82, ptr noundef nonnull align 8 dereferenceable(8) %608)
          to label %623 unwind label %.split1230.split

609:                                              ; preds = %.lr.ph1335
  call void @__assert_fail(ptr noundef nonnull @.str.20, ptr noundef nonnull @.str.21, i32 noundef 3476, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE) #9
  unreachable

610:                                              ; preds = %.lr.ph1335
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %79) #8
  invoke void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %79, ptr noundef nonnull align 8 dereferenceable(8) %1)
          to label %611 unwind label %615

611:                                              ; preds = %610
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %81) #8
  store ptr %593, ptr %81, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE3$_7vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %80, ptr noundef nonnull align 8 dereferenceable(8) %81) #8
  invoke void @_ZNK4Span5errorE9ErrorTypeSt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %79, i32 noundef 0, ptr noundef nonnull %80)
          to label %612 unwind label %617

612:                                              ; preds = %611
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %80) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %81) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %79) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %79) #8
  %613 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %613, ptr noundef nonnull @.str.19)
          to label %614 unwind label %620

614:                                              ; preds = %612
  invoke void @__cxa_throw(ptr nonnull %613, ptr nonnull @_ZTISt13runtime_error, ptr nonnull @_ZNSt13runtime_errorD1Ev) #10
          to label %971 unwind label %601

615:                                              ; preds = %610
  %616 = landingpad { ptr, i32 }
          cleanup
  br label %619

617:                                              ; preds = %611
  %618 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %80) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %81) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %79) #8
  br label %619

619:                                              ; preds = %617, %615
  %.pn615 = phi { ptr, i32 } [ %618, %617 ], [ %616, %615 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %79) #8
  br label %727

620:                                              ; preds = %612
  %621 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %613) #8
  br label %727

.split1233.split:                                 ; preds = %627, %623
  %622 = landingpad { ptr, i32 }
          cleanup
  br label %727

623:                                              ; preds = %.preheader733
  %624 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIR7TypeRefaSEOS0_(ptr noundef nonnull align 8 dereferenceable(8) %78, ptr noundef nonnull align 8 dereferenceable(8) %82)
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %82) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %82) #8
  %625 = invoke noundef zeroext i1 @_ZNK3HIR14PatternBinding8is_validEv(ptr noundef nonnull align 8 dereferenceable(24) %587)
          to label %626 unwind label %.split1233.split

626:                                              ; preds = %623
  br i1 %625, label %627, label %.loopexit744

627:                                              ; preds = %626
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %83, ptr noundef nonnull align 8 dereferenceable(8) %593)
          to label %628 unwind label %.split1233.split

628:                                              ; preds = %627
  invoke void @_ZN7Context17add_binding_innerERK4SpanRKN3HIR14PatternBindingENS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(24) %587, ptr noundef nonnull %83)
          to label %629 unwind label %.split1236.split

629:                                              ; preds = %628
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %83) #8
  br label %.loopexit744

.split1230.split:                                 ; preds = %.preheader733
  %630 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %82) #8
  br label %727

.split1236.split:                                 ; preds = %628
  %631 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %83) #8
  br label %727

632:                                              ; preds = %642
  %633 = landingpad { ptr, i32 }
          cleanup
  br label %727

634:                                              ; preds = %.preheader735
  %635 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIR7TypeRefaSEOS0_(ptr noundef nonnull align 8 dereferenceable(8) %78, ptr noundef nonnull align 8 dereferenceable(8) %84)
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %84) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %84) #8
  %636 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR9ArraySize8as_KnownEv(ptr noundef nonnull align 8 dereferenceable(32) %607)
  %637 = load i64, ptr %636, align 8, !tbaa !103
  %638 = icmp ult i64 %637, %603
  br i1 %638, label %.split1100, label %651

.split1100:                                       ; preds = %634
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %85) #8
  invoke void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %85, ptr noundef nonnull align 8 dereferenceable(8) %1)
          to label %639 unwind label %644

639:                                              ; preds = %.split1100
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %87) #8
  call void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE3$_8vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %86, ptr noundef nonnull align 1 dereferenceable(1) %87) #8
  invoke void @_ZNK4Span5errorE9ErrorTypeSt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %85, i32 noundef 0, ptr noundef nonnull %86)
          to label %640 unwind label %646

640:                                              ; preds = %639
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %86) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %87) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %85) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %85) #8
  %641 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %641, ptr noundef nonnull @.str.19)
          to label %642 unwind label %649

642:                                              ; preds = %640
  invoke void @__cxa_throw(ptr nonnull %641, ptr nonnull @_ZTISt13runtime_error, ptr nonnull @_ZNSt13runtime_errorD1Ev) #10
          to label %971 unwind label %632

.split1097.split:                                 ; preds = %.preheader735
  %643 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %84) #8
  br label %727

644:                                              ; preds = %.split1100
  %645 = landingpad { ptr, i32 }
          cleanup
  br label %648

646:                                              ; preds = %639
  %647 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %86) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %87) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %85) #8
  br label %648

648:                                              ; preds = %646, %644
  %.pn609 = phi { ptr, i32 } [ %647, %646 ], [ %645, %644 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %85) #8
  br label %727

649:                                              ; preds = %640
  %650 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %641) #8
  br label %727

651:                                              ; preds = %634
  %652 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR9ArraySize8as_KnownEv(ptr noundef nonnull align 8 dereferenceable(32) %607)
  %653 = load i64, ptr %652, align 8, !tbaa !103
  %654 = sub i64 %653, %591
  %655 = invoke noundef zeroext i1 @_ZNK3HIR14PatternBinding8is_validEv(ptr noundef nonnull align 8 dereferenceable(24) %587)
          to label %656 unwind label %.split1102.split

656:                                              ; preds = %651
  br i1 %655, label %657, label %.loopexit744

657:                                              ; preds = %656
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %89, ptr noundef nonnull align 8 dereferenceable(8) %78)
          to label %658 unwind label %.split1102.split

658:                                              ; preds = %657
  %659 = and i64 %654, 4294967295
  invoke void @_ZN3HIR7TypeRef9new_arrayES0_m(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %88, ptr noundef nonnull %89, i64 noundef %659)
          to label %660 unwind label %.split1105.split

660:                                              ; preds = %658
  invoke void @_ZN7Context17add_binding_innerERK4SpanRKN3HIR14PatternBindingENS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(24) %587, ptr noundef nonnull %88)
          to label %661 unwind label %.split1108.split

661:                                              ; preds = %660
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %88) #8
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %89) #8
  br label %.loopexit744

.split1102.split:                                 ; preds = %657, %651
  %662 = landingpad { ptr, i32 }
          cleanup
  br label %727

.split1105.split:                                 ; preds = %658
  %663 = landingpad { ptr, i32 }
          cleanup
  br label %665

.split1108.split:                                 ; preds = %660
  %664 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %88) #8
  br label %665

665:                                              ; preds = %.split1108.split, %.split1105.split
  %.pn606 = phi { ptr, i32 } [ %664, %.split1108.split ], [ %663, %.split1105.split ]
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %89) #8
  br label %727

.lr.ph1092:                                       ; preds = %.lr.ph1335
  %666 = call noundef nonnull align 4 dereferenceable(8) ptr @_ZNK3HIR8TypeData8as_InferEv(ptr noundef nonnull align 8 dereferenceable(184) %604)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %90) #8
  invoke void @_ZN16HMTypeInferrence11new_ivar_trEN3HIR10InferClassE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %90, ptr noundef nonnull align 8 dereferenceable(49) %156, i32 noundef 0)
          to label %667 unwind label %677

667:                                              ; preds = %.lr.ph1092
  %668 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIR7TypeRefaSEOS0_(ptr noundef nonnull align 8 dereferenceable(8) %78, ptr noundef nonnull align 8 dereferenceable(8) %90)
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %90) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %90) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %91) #8
  invoke void @_ZN3HIR7TypeRefC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %91)
          to label %669 unwind label %679

669:                                              ; preds = %667
  %670 = invoke noundef zeroext i1 @_ZNK3HIR14PatternBinding8is_validEv(ptr noundef nonnull align 8 dereferenceable(24) %587)
          to label %671 unwind label %681

671:                                              ; preds = %669
  br i1 %670, label %672, label %687

672:                                              ; preds = %671
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %92) #8
  invoke void @_ZN16HMTypeInferrence11new_ivar_trEN3HIR10InferClassE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %92, ptr noundef nonnull align 8 dereferenceable(49) %156, i32 noundef 0)
          to label %673 unwind label %683

673:                                              ; preds = %672
  %674 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIR7TypeRefaSEOS0_(ptr noundef nonnull align 8 dereferenceable(8) %91, ptr noundef nonnull align 8 dereferenceable(8) %92)
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %92) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %92) #8
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %93, ptr noundef nonnull align 8 dereferenceable(8) %91)
          to label %675 unwind label %681

675:                                              ; preds = %673
  invoke void @_ZN7Context17add_binding_innerERK4SpanRKN3HIR14PatternBindingENS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(24) %587, ptr noundef nonnull %93)
          to label %676 unwind label %685

676:                                              ; preds = %675
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %93) #8
  br label %687

677:                                              ; preds = %.lr.ph1092
  %678 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %90) #8
  br label %727

679:                                              ; preds = %667
  %680 = landingpad { ptr, i32 }
          cleanup
  br label %711

681:                                              ; preds = %673, %669
  %682 = landingpad { ptr, i32 }
          cleanup
  br label %710

683:                                              ; preds = %672
  %684 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %92) #8
  br label %710

685:                                              ; preds = %675
  %686 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %93) #8
  br label %710

687:                                              ; preds = %676, %671
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %95) #8
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %96) #8
  invoke void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %97, ptr noundef nonnull align 8 dereferenceable(8) %1)
          to label %688 unwind label %693

688:                                              ; preds = %687
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %98, ptr noundef nonnull align 8 dereferenceable(8) %78)
          to label %689 unwind label %695

689:                                              ; preds = %688
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %99, ptr noundef nonnull align 8 dereferenceable(8) %593)
          to label %690 unwind label %697

690:                                              ; preds = %689
  call void @_ZN3HIR7TypeRefC2EOS0_(ptr noundef nonnull align 8 dereferenceable(8) %100, ptr noundef nonnull align 8 dereferenceable(8) %91)
  invoke void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN20SplitSlicePatRevisitC2ES0_S6_S6_S6_j(ptr noundef nonnull align 8 dereferenceable(44) %96, ptr noundef nonnull %97, ptr noundef nonnull %98, ptr noundef nonnull %99, ptr noundef nonnull %100, i32 noundef %592)
          to label %691 unwind label %699

691:                                              ; preds = %690
  invoke void @_Z15make_unique_ptrIZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS4_7TypeRefEE20SplitSlicePatRevisitESt10unique_ptrIT_St14default_deleteISC_EEOSC_(ptr dead_on_unwind nonnull writable sret(%"class.std::unique_ptr.440") align 8 %95, ptr noundef nonnull align 8 dereferenceable(44) %96)
          to label %692 unwind label %701

692:                                              ; preds = %691
  call void @_ZNSt10unique_ptrIN7Context9RevisitorESt14default_deleteIS1_EEC2IZNS0_27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS9_7TypeRefEE20SplitSlicePatRevisitS2_ISF_EvEEOS_IT_T0_E(ptr noundef nonnull align 8 dereferenceable(8) %94, ptr noundef nonnull align 8 dereferenceable(8) %95) #8
  invoke void @_ZN7Context15add_revisit_advESt10unique_ptrINS_9RevisitorESt14default_deleteIS1_EE(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull %94)
          to label %..loopexit725_crit_edge unwind label %703

..loopexit725_crit_edge:                          ; preds = %692
  call void @_ZNSt10unique_ptrIN7Context9RevisitorESt14default_deleteIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %94) #8
  call void @_ZNSt10unique_ptrIZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS4_7TypeRefEE20SplitSlicePatRevisitSt14default_deleteISA_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %95) #8
  call void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN20SplitSlicePatRevisitD2Ev(ptr noundef nonnull align 8 dereferenceable(44) %96) #8
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %100) #8
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %99) #8
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %98) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %97) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %96) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %95) #8
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %91) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %91) #8
  br label %.loopexit744

693:                                              ; preds = %687
  %694 = landingpad { ptr, i32 }
          cleanup
  br label %709

695:                                              ; preds = %688
  %696 = landingpad { ptr, i32 }
          cleanup
  br label %708

697:                                              ; preds = %689
  %698 = landingpad { ptr, i32 }
          cleanup
  br label %707

699:                                              ; preds = %690
  %700 = landingpad { ptr, i32 }
          cleanup
  br label %706

701:                                              ; preds = %691
  %702 = landingpad { ptr, i32 }
          cleanup
  br label %705

703:                                              ; preds = %692
  %704 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt10unique_ptrIN7Context9RevisitorESt14default_deleteIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %94) #8
  call void @_ZNSt10unique_ptrIZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS4_7TypeRefEE20SplitSlicePatRevisitSt14default_deleteISA_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %95) #8
  br label %705

705:                                              ; preds = %703, %701
  %.pn597 = phi { ptr, i32 } [ %704, %703 ], [ %702, %701 ]
  call void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN20SplitSlicePatRevisitD2Ev(ptr noundef nonnull align 8 dereferenceable(44) %96) #8
  br label %706

706:                                              ; preds = %705, %699
  %.pn597.pn = phi { ptr, i32 } [ %.pn597, %705 ], [ %700, %699 ]
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %100) #8
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %99) #8
  br label %707

707:                                              ; preds = %706, %697
  %.pn597.pn.pn = phi { ptr, i32 } [ %.pn597.pn, %706 ], [ %698, %697 ]
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %98) #8
  br label %708

708:                                              ; preds = %707, %695
  %.pn597.pn.pn.pn = phi { ptr, i32 } [ %.pn597.pn.pn, %707 ], [ %696, %695 ]
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %97) #8
  br label %709

709:                                              ; preds = %708, %693
  %.pn597.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn597.pn.pn.pn, %708 ], [ %694, %693 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %96) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %95) #8
  br label %710

710:                                              ; preds = %709, %685, %683, %681
  %.pn597.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn597.pn.pn.pn.pn, %709 ], [ %686, %685 ], [ %682, %681 ], [ %684, %683 ]
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %91) #8
  br label %711

711:                                              ; preds = %710, %679
  %.pn597.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn597.pn.pn.pn.pn.pn, %710 ], [ %680, %679 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %91) #8
  br label %727

._crit_edge1339:                                  ; preds = %716, %.loopexit744
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %102) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %101) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %103) #8
  %712 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %586) #8
  store ptr %712, ptr %103, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %104) #8
  %713 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %586) #8
  store ptr %713, ptr %104, align 8
  %714 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %103, ptr noundef nonnull align 8 dereferenceable(8) %104) #8
  br i1 %714, label %.lr.ph1341, label %..loopexit762_crit_edge

.lr.ph1338:                                       ; preds = %.loopexit744, %716
  %715 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %101) #8
  invoke void @_ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(212) %715, ptr noundef nonnull align 8 dereferenceable(8) %78)
          to label %716 unwind label %719

716:                                              ; preds = %.lr.ph1338
  %717 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %101) #8
  %718 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %101, ptr noundef nonnull align 8 dereferenceable(8) %102) #8
  br i1 %718, label %.lr.ph1338, label %._crit_edge1339

719:                                              ; preds = %.lr.ph1338
  %720 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %102) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %101) #8
  br label %727

..loopexit762_crit_edge:                          ; preds = %722, %._crit_edge1339
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %104) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %103) #8
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %78) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %78) #8
  br label %.loopexit765

.lr.ph1341:                                       ; preds = %._crit_edge1339, %722
  %721 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %103) #8
  invoke void @_ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(212) %721, ptr noundef nonnull align 8 dereferenceable(8) %78)
          to label %722 unwind label %725

722:                                              ; preds = %.lr.ph1341
  %723 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %103) #8
  %724 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %103, ptr noundef nonnull align 8 dereferenceable(8) %104) #8
  br i1 %724, label %.lr.ph1341, label %..loopexit762_crit_edge

725:                                              ; preds = %.lr.ph1341
  %726 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %104) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %103) #8
  br label %727

727:                                              ; preds = %601, %619, %620, %.split1236.split, %.split1230.split, %.split1233.split, %.split1102.split, %665, %649, %648, %.split1097.split, %632, %711, %677, %725, %719, %599
  %.pn617.pn = phi { ptr, i32 } [ %720, %719 ], [ %726, %725 ], [ %600, %599 ], [ %602, %601 ], [ %621, %620 ], [ %.pn615, %619 ], [ %631, %.split1236.split ], [ %622, %.split1233.split ], [ %630, %.split1230.split ], [ %633, %632 ], [ %650, %649 ], [ %.pn609, %648 ], [ %643, %.split1097.split ], [ %.pn606, %665 ], [ %662, %.split1102.split ], [ %.pn597.pn.pn.pn.pn.pn.pn, %711 ], [ %678, %677 ]
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %78) #8
  br label %728

728:                                              ; preds = %727, %597
  %.pn617.pn.pn = phi { ptr, i32 } [ %.pn617.pn, %727 ], [ %598, %597 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %78) #8
  br label %969

.lr.ph1089:                                       ; preds = %.lr.ph1925
  %729 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZN3HIR7Pattern4Data12as_PathValueEv(ptr noundef nonnull align 8 dereferenceable(184) %153)
  %730 = getelementptr inbounds i8, ptr %729, i64 88
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %105) #8
  invoke void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN1H13get_path_typeERS_S2_RNS3_4PathERKNS4_11PathBindingE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %105, ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(88) %729, ptr noundef nonnull align 8 dereferenceable(24) %730)
          to label %731 unwind label %733

731:                                              ; preds = %.lr.ph1089
  invoke void @_ZN7Context12equate_typesERK4SpanRKN3HIR7TypeRefES6_(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef nonnull align 8 dereferenceable(8) %105)
          to label %.lr.ph1060.split unwind label %735

.lr.ph1060.split:                                 ; preds = %731
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %105) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %105) #8
  %732 = call noundef i32 @_ZNK3HIR7Pattern11PathBinding3tagEv(ptr noundef nonnull align 8 dereferenceable(24) %730)
  switch i32 %732, label %.loopexit765 [
    i32 0, label %.split1070
    i32 1, label %.split1072
    i32 2, label %.preheader739.split
    i32 3, label %.preheader741.split.split
  ]

733:                                              ; preds = %.lr.ph1089
  %734 = landingpad { ptr, i32 }
          cleanup
  br label %737

735:                                              ; preds = %731
  %736 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %105) #8
  br label %737

737:                                              ; preds = %735, %733
  %.pn584 = phi { ptr, i32 } [ %736, %735 ], [ %734, %733 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %105) #8
  br label %969

.preheader741.split.split:                        ; preds = %.lr.ph1060.split
  %738 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN3HIR7Pattern11PathBinding7as_EnumEv(ptr noundef nonnull align 8 dereferenceable(24) %730)
  %739 = getelementptr inbounds i8, ptr %738, i64 8
  %740 = load ptr, ptr %738, align 8, !tbaa !104
  %741 = getelementptr inbounds i8, ptr %740, i64 104
  %742 = call noundef ptr @_ZNK3HIR4Enum5Class8opt_DataEv(ptr noundef nonnull align 8 dereferenceable(40) %741)
  %.not586 = icmp eq ptr %742, null
  br i1 %.not586, label %.loopexit765, label %761

.preheader739.split:                              ; preds = %.lr.ph1060.split
  %743 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIR7Pattern11PathBinding9as_StructEv(ptr noundef nonnull align 8 dereferenceable(24) %730)
  %744 = load ptr, ptr %743, align 8, !tbaa !5
  %745 = getelementptr inbounds i8, ptr %744, i64 104
  %746 = call noundef zeroext i1 @_ZNK3HIR6Struct4Data7is_UnitEv(ptr noundef nonnull align 8 dereferenceable(32) %745)
  br i1 %746, label %.loopexit765, label %.split1049, !llvm.loop !106

.split1070:                                       ; preds = %.lr.ph1060.split
  call void @__assert_fail(ptr noundef nonnull @.str.20, ptr noundef nonnull @.str.21, i32 noundef 3571, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE) #9
  unreachable

.split1072:                                       ; preds = %.lr.ph1060.split
  %747 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZN3HIR7Pattern11PathBinding10as_UnboundEv(ptr noundef nonnull align 8 dereferenceable(24) %730)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %106) #8
  invoke void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %106, ptr noundef nonnull align 8 dereferenceable(8) %1)
          to label %750 unwind label %754

748:                                              ; preds = %753
  %749 = landingpad { ptr, i32 }
          cleanup
  br label %969

750:                                              ; preds = %.split1072
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %108) #8
  call void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE3$_9vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %107, ptr noundef nonnull align 1 dereferenceable(1) %108) #8
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %106, ptr noundef nonnull %107)
          to label %751 unwind label %756

751:                                              ; preds = %750
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %107) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %108) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %106) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %106) #8
  %752 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %752, ptr noundef nonnull @.str.16)
          to label %753 unwind label %759

753:                                              ; preds = %751
  invoke void @__cxa_throw(ptr nonnull %752, ptr nonnull @_ZTISt13runtime_error, ptr nonnull @_ZNSt13runtime_errorD1Ev) #10
          to label %971 unwind label %748

754:                                              ; preds = %.split1072
  %755 = landingpad { ptr, i32 }
          cleanup
  br label %758

756:                                              ; preds = %750
  %757 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %107) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %108) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %106) #8
  br label %758

758:                                              ; preds = %756, %754
  %.pn591 = phi { ptr, i32 } [ %757, %756 ], [ %755, %754 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %106) #8
  br label %969

759:                                              ; preds = %751
  %760 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %752) #8
  br label %969

.split1049:                                       ; preds = %.preheader739.split
  call void @__assert_fail(ptr noundef nonnull @.str.31, ptr noundef nonnull @.str.21, i32 noundef 3575, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE) #9
  unreachable

761:                                              ; preds = %.preheader741.split.split
  %762 = load i32, ptr %739, align 8, !tbaa !107
  %763 = zext i32 %762 to i64
  %764 = call noundef i64 @_ZNKSt6vectorIN3HIR4Enum11DataVariantESaIS2_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %742) #8
  %765 = icmp ugt i64 %764, %763
  br i1 %765, label %779, label %.split1030

.split1030:                                       ; preds = %761
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %109) #8
  invoke void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %109, ptr noundef nonnull align 8 dereferenceable(8) %1)
          to label %766 unwind label %772

766:                                              ; preds = %.split1030
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %111) #8
  call void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE4$_10vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %110, ptr noundef nonnull align 1 dereferenceable(1) %111) #8
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %109, ptr noundef nonnull %110)
          to label %767 unwind label %774

767:                                              ; preds = %766
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %110) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %111) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %109) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %109) #8
  %768 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %768, ptr noundef nonnull @.str.16)
          to label %769 unwind label %777

769:                                              ; preds = %767
  invoke void @__cxa_throw(ptr nonnull %768, ptr nonnull @_ZTISt13runtime_error, ptr nonnull @_ZNSt13runtime_errorD1Ev) #10
          to label %971 unwind label %770

770:                                              ; preds = %769
  %771 = landingpad { ptr, i32 }
          cleanup
  br label %969

772:                                              ; preds = %.split1030
  %773 = landingpad { ptr, i32 }
          cleanup
  br label %776

774:                                              ; preds = %766
  %775 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %110) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %111) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %109) #8
  br label %776

776:                                              ; preds = %774, %772
  %.pn587 = phi { ptr, i32 } [ %775, %774 ], [ %773, %772 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %109) #8
  br label %969

777:                                              ; preds = %767
  %778 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %768) #8
  br label %969

779:                                              ; preds = %761
  %780 = load i32, ptr %739, align 8, !tbaa !107
  %781 = zext i32 %780 to i64
  %782 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNKSt6vectorIN3HIR4Enum11DataVariantESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %742, i64 noundef %781) #8
  %783 = getelementptr inbounds i8, ptr %782, i64 16
  %784 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %783)
  %785 = call noundef zeroext i1 @_ZNK3HIR8TypeData8is_TupleEv(ptr noundef nonnull align 8 dereferenceable(184) %784)
  br i1 %785, label %786, label %.loopexit765

786:                                              ; preds = %779
  %787 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %783)
  %788 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3HIR8TypeData8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(184) %787)
  %789 = call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %788) #8
  br label %.loopexit765

.lr.ph1025:                                       ; preds = %.lr.ph1925
  %790 = call noundef nonnull align 8 dereferenceable(172) ptr @_ZN3HIR7Pattern4Data12as_PathTupleEv(ptr noundef nonnull align 8 dereferenceable(184) %153)
  %791 = getelementptr inbounds i8, ptr %790, i64 88
  %792 = getelementptr inbounds i8, ptr %790, i64 136
  %793 = getelementptr inbounds i8, ptr %790, i64 112
  %794 = getelementptr inbounds i8, ptr %790, i64 144
  %795 = getelementptr inbounds i8, ptr %790, i64 168
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %112) #8
  invoke void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN1H13get_path_typeERS_S2_RNS3_4PathERKNS4_11PathBindingE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %112, ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(88) %790, ptr noundef nonnull align 8 dereferenceable(24) %791)
          to label %796 unwind label %816

796:                                              ; preds = %.lr.ph1025
  invoke void @_ZN7Context12equate_typesERK4SpanRKN3HIR7TypeRefES6_(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef nonnull align 8 dereferenceable(8) %112)
          to label %797 unwind label %818

797:                                              ; preds = %796
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %112) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %112) #8
  %798 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3HIR17pattern_get_tupleERK4SpanRKNS_4PathERKNS_7Pattern11PathBindingE(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(88) %790, ptr noundef nonnull align 8 dereferenceable(24) %791)
          to label %799 unwind label %821

799:                                              ; preds = %797
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %113) #8
  %800 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZN3HIR4Path4Data10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(88) %790)
  %801 = getelementptr inbounds i8, ptr %800, i64 8
  invoke void @_ZN17MonomorphStatePtrC2EPKN3HIR7TypeRefEPKNS0_10PathParamsES6_S6_S6_(ptr noundef nonnull align 8 dereferenceable(128) %113, ptr noundef null, ptr noundef nonnull %801, ptr noundef null, ptr noundef null, ptr noundef null)
          to label %802 unwind label %823

802:                                              ; preds = %799
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %114) #8
  invoke void @_ZN3HIR7TypeRefC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %114)
          to label %803 unwind label %825

803:                                              ; preds = %802
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %115) #8
  store ptr %114, ptr %115, align 8, !tbaa !5
  store ptr %113, ptr %154, align 8, !tbaa !5
  store ptr %1, ptr %155, align 8, !tbaa !5
  %804 = load i8, ptr %792, align 8, !tbaa !108, !range !115, !noundef !116
  %805 = trunc nuw i8 %804 to i1
  %806 = call noundef i64 @_ZNKSt6vectorIN3HIR7PatternESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %793) #8
  br i1 %805, label %807, label %836

807:                                              ; preds = %803
  %808 = call noundef i64 @_ZNKSt6vectorIN3HIR7PatternESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %794) #8
  %809 = add i64 %808, %806
  %810 = call noundef i64 @_ZNKSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %798) #8
  %.not = icmp ugt i64 %809, %810
  br i1 %.not, label %811, label %856

811:                                              ; preds = %807
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %116) #8
  invoke void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %116, ptr noundef nonnull align 8 dereferenceable(8) %1)
          to label %812 unwind label %827

812:                                              ; preds = %811
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %118) #8
  store ptr %798, ptr %118, align 8, !tbaa !5
  %813 = getelementptr inbounds i8, ptr %118, i64 8
  store ptr %790, ptr %813, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE4$_11vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %117, ptr noundef nonnull align 8 dereferenceable(16) %118) #8
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %116, ptr noundef nonnull %117)
          to label %814 unwind label %829

814:                                              ; preds = %812
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %117) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %118) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %116) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %116) #8
  %815 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %815, ptr noundef nonnull @.str.16)
          to label %.invoke unwind label %832

816:                                              ; preds = %.lr.ph1025
  %817 = landingpad { ptr, i32 }
          cleanup
  br label %820

818:                                              ; preds = %796
  %819 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %112) #8
  br label %820

820:                                              ; preds = %818, %816
  %.pn572 = phi { ptr, i32 } [ %819, %818 ], [ %817, %816 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %112) #8
  br label %969

821:                                              ; preds = %797
  %822 = landingpad { ptr, i32 }
          cleanup
  br label %969

823:                                              ; preds = %799
  %824 = landingpad { ptr, i32 }
          cleanup
  br label %889

825:                                              ; preds = %802
  %826 = landingpad { ptr, i32 }
          cleanup
  br label %888

827:                                              ; preds = %811
  %828 = landingpad { ptr, i32 }
          cleanup
  br label %831

829:                                              ; preds = %812
  %830 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %117) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %118) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %116) #8
  br label %831

831:                                              ; preds = %829, %827
  %.pn576 = phi { ptr, i32 } [ %830, %829 ], [ %828, %827 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %116) #8
  br label %887

832:                                              ; preds = %814
  %833 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %815) #8
  br label %887

834:                                              ; preds = %.invoke
  %835 = landingpad { ptr, i32 }
          cleanup
  br label %887

836:                                              ; preds = %803
  %837 = call noundef i64 @_ZNKSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %798) #8
  %838 = icmp eq i64 %806, %837
  br i1 %838, label %852, label %839

839:                                              ; preds = %836
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %119) #8
  invoke void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %119, ptr noundef nonnull align 8 dereferenceable(8) %1)
          to label %840 unwind label %845

840:                                              ; preds = %839
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %121) #8
  store ptr %798, ptr %121, align 8, !tbaa !5
  %841 = getelementptr inbounds i8, ptr %121, i64 8
  store ptr %790, ptr %841, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE4$_12vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %120, ptr noundef nonnull align 8 dereferenceable(16) %121) #8
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %119, ptr noundef nonnull %120)
          to label %842 unwind label %847

842:                                              ; preds = %840
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %120) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %121) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %119) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %119) #8
  %843 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %843, ptr noundef nonnull @.str.16)
          to label %.invoke unwind label %850

.invoke:                                          ; preds = %814, %842
  %844 = phi ptr [ %843, %842 ], [ %815, %814 ]
  invoke void @__cxa_throw(ptr nonnull %844, ptr nonnull @_ZTISt13runtime_error, ptr nonnull @_ZNSt13runtime_errorD1Ev) #10
          to label %.cont unwind label %834

.cont:                                            ; preds = %.invoke
  unreachable

845:                                              ; preds = %839
  %846 = landingpad { ptr, i32 }
          cleanup
  br label %849

847:                                              ; preds = %840
  %848 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %120) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %121) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %119) #8
  br label %849

849:                                              ; preds = %847, %845
  %.pn574 = phi { ptr, i32 } [ %848, %847 ], [ %846, %845 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %119) #8
  br label %887

850:                                              ; preds = %842
  %851 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %843) #8
  br label %887

852:                                              ; preds = %836
  %853 = call noundef i64 @_ZNKSt6vectorIN3HIR7PatternESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %794) #8
  %854 = icmp eq i64 %853, 0
  br i1 %854, label %856, label %855

855:                                              ; preds = %852
  call void @__assert_fail(ptr noundef nonnull @.str.32, ptr noundef nonnull @.str.21, i32 noundef 3613, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE) #9
  unreachable

856:                                              ; preds = %852, %807
  %857 = call noundef i64 @_ZNKSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %798) #8
  %858 = trunc i64 %857 to i32
  store i32 %858, ptr %795, align 8, !tbaa !117
  %859 = call noundef i64 @_ZNKSt6vectorIN3HIR7PatternESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %793) #8
  %.not1927 = icmp eq i64 %859, 0
  br i1 %.not1927, label %.preheader753, label %.lr.ph1020

.preheader753:                                    ; preds = %866, %856
  %860 = call noundef i64 @_ZNKSt6vectorIN3HIR7PatternESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %794) #8
  %.not1928 = icmp eq i64 %860, 0
  br i1 %.not1928, label %..loopexit764_crit_edge, label %.lr.ph1022

.lr.ph1020:                                       ; preds = %856, %866
  %.05201018 = phi i64 [ %867, %866 ], [ 0, %856 ]
  %861 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %793, i64 noundef %.05201018) #8
  %862 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNKSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %798, i64 noundef %.05201018) #8
  %863 = getelementptr inbounds i8, ptr %862, i64 16
  %864 = invoke noundef nonnull align 8 dereferenceable(8) ptr @"_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEENK4$_14clES8_"(ptr noundef nonnull align 8 dereferenceable(24) %115, ptr noundef nonnull align 8 dereferenceable(8) %863)
          to label %865 unwind label %870

865:                                              ; preds = %.lr.ph1020
  invoke void @_ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(212) %861, ptr noundef nonnull align 8 dereferenceable(8) %864)
          to label %866 unwind label %870

866:                                              ; preds = %865
  %867 = add nuw i64 %.05201018, 1
  %868 = call noundef i64 @_ZNKSt6vectorIN3HIR7PatternESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %793) #8
  %869 = icmp ult i64 %867, %868
  br i1 %869, label %.lr.ph1020, label %.preheader753, !llvm.loop !118

870:                                              ; preds = %865, %.lr.ph1020
  %871 = landingpad { ptr, i32 }
          cleanup
  br label %887

..loopexit764_crit_edge:                          ; preds = %881, %.preheader753
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %115) #8
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %114) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %114) #8
  call void @_ZN13MonomorphiserD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %113) #8
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %113) #8
  br label %.loopexit765

.lr.ph1022:                                       ; preds = %.preheader753, %881
  %.05171021 = phi i64 [ %882, %881 ], [ 0, %.preheader753 ]
  %872 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %794, i64 noundef %.05171021) #8
  %873 = call noundef i64 @_ZNKSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %798) #8
  %874 = call noundef i64 @_ZNKSt6vectorIN3HIR7PatternESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %794) #8
  %875 = add i64 %873, %.05171021
  %876 = sub i64 %875, %874
  %877 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNKSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %798, i64 noundef %876) #8
  %878 = getelementptr inbounds i8, ptr %877, i64 16
  %879 = invoke noundef nonnull align 8 dereferenceable(8) ptr @"_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEENK4$_14clES8_"(ptr noundef nonnull align 8 dereferenceable(24) %115, ptr noundef nonnull align 8 dereferenceable(8) %878)
          to label %880 unwind label %885

880:                                              ; preds = %.lr.ph1022
  invoke void @_ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(212) %872, ptr noundef nonnull align 8 dereferenceable(8) %879)
          to label %881 unwind label %885

881:                                              ; preds = %880
  %882 = add nuw i64 %.05171021, 1
  %883 = call noundef i64 @_ZNKSt6vectorIN3HIR7PatternESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %794) #8
  %884 = icmp ult i64 %882, %883
  br i1 %884, label %.lr.ph1022, label %..loopexit764_crit_edge, !llvm.loop !119

885:                                              ; preds = %880, %.lr.ph1022
  %886 = landingpad { ptr, i32 }
          cleanup
  br label %887

887:                                              ; preds = %885, %870, %850, %849, %834, %832, %831
  %.pn578 = phi { ptr, i32 } [ %871, %870 ], [ %886, %885 ], [ %835, %834 ], [ %833, %832 ], [ %.pn576, %831 ], [ %851, %850 ], [ %.pn574, %849 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %115) #8
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %114) #8
  br label %888

888:                                              ; preds = %887, %825
  %.pn578.pn = phi { ptr, i32 } [ %.pn578, %887 ], [ %826, %825 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %114) #8
  call void @_ZN13MonomorphiserD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %113) #8
  br label %889

889:                                              ; preds = %888, %823
  %.pn578.pn.pn = phi { ptr, i32 } [ %.pn578.pn, %888 ], [ %824, %823 ]
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %113) #8
  br label %969

.lr.ph1016:                                       ; preds = %.lr.ph1925
  %890 = call noundef nonnull align 8 dereferenceable(137) ptr @_ZN3HIR7Pattern4Data12as_PathNamedEv(ptr noundef nonnull align 8 dereferenceable(184) %153)
  %891 = getelementptr inbounds i8, ptr %890, i64 88
  %892 = getelementptr inbounds i8, ptr %890, i64 112
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %122) #8
  invoke void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN1H13get_path_typeERS_S2_RNS3_4PathERKNS4_11PathBindingE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %122, ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(88) %890, ptr noundef nonnull align 8 dereferenceable(24) %891)
          to label %893 unwind label %896

893:                                              ; preds = %.lr.ph1016
  invoke void @_ZN7Context12equate_typesERK4SpanRKN3HIR7TypeRefES6_(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef nonnull align 8 dereferenceable(8) %122)
          to label %894 unwind label %898

894:                                              ; preds = %893
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %122) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %122) #8
  %895 = call noundef zeroext i1 @_ZNK3HIR7Pattern4Data14Data_PathNamed11is_wildcardEv(ptr noundef nonnull align 8 dereferenceable(137) %890)
  br i1 %895, label %.loopexit765, label %901

896:                                              ; preds = %.lr.ph1016
  %897 = landingpad { ptr, i32 }
          cleanup
  br label %900

898:                                              ; preds = %893
  %899 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %122) #8
  br label %900

900:                                              ; preds = %898, %896
  %.pn = phi { ptr, i32 } [ %899, %898 ], [ %897, %896 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %122) #8
  br label %969

901:                                              ; preds = %894
  %902 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3HIR17pattern_get_namedERK4SpanRKNS_4PathERKNS_7Pattern11PathBindingE(ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(88) %890, ptr noundef nonnull align 8 dereferenceable(24) %891)
          to label %903 unwind label %910

903:                                              ; preds = %901
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %123) #8
  %904 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZN3HIR4Path4Data10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(88) %890)
  %905 = getelementptr inbounds i8, ptr %904, i64 8
  invoke void @_ZN17MonomorphStatePtrC2EPKN3HIR7TypeRefEPKNS0_10PathParamsES6_S6_S6_(ptr noundef nonnull align 8 dereferenceable(128) %123, ptr noundef null, ptr noundef nonnull %905, ptr noundef null, ptr noundef null, ptr noundef null)
          to label %906 unwind label %912

906:                                              ; preds = %903
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %124) #8
  %907 = call ptr @_ZNSt6vectorISt4pairI8RcStringN3HIR7PatternEESaIS4_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %892) #8
  store ptr %907, ptr %124, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %125) #8
  %908 = call ptr @_ZNSt6vectorISt4pairI8RcStringN3HIR7PatternEESaIS4_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %892) #8
  store ptr %908, ptr %125, align 8
  %909 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPSt4pairI8RcStringN3HIR7PatternEESt6vectorIS5_SaIS5_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_(ptr noundef nonnull align 8 dereferenceable(8) %124, ptr noundef nonnull align 8 dereferenceable(8) %125) #8
  br i1 %909, label %.lr.ph1013, label %..critedge.loopexit_crit_edge

..critedge.loopexit_crit_edge:                    ; preds = %959, %906
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %125) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %124) #8
  call void @_ZN13MonomorphiserD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %123) #8
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %123) #8
  br label %.loopexit765

910:                                              ; preds = %901
  %911 = landingpad { ptr, i32 }
          cleanup
  br label %969

912:                                              ; preds = %903
  %913 = landingpad { ptr, i32 }
          cleanup
  br label %963

.lr.ph1013:                                       ; preds = %906, %959
  %914 = call noundef nonnull align 8 dereferenceable(224) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairI8RcStringN3HIR7PatternEESt6vectorIS5_SaIS5_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %124) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %126) #8
  %915 = call ptr @_ZNKSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %902) #8
  %916 = call ptr @_ZNKSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %902) #8
  %917 = invoke ptr @"_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKSt4pairI8RcStringN3HIR6VisEntINS4_7TypeRefEEEESt6vectorIS8_SaIS8_EEEEZN7Context27handle_pattern_direct_innerERK4SpanRNS4_7PatternERKS6_E4$_15ET_SO_SO_T0_"(ptr %915, ptr %916, ptr nonnull %914)
          to label %918 unwind label %930

918:                                              ; preds = %.lr.ph1013
  store ptr %917, ptr %126, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %127) #8
  %919 = call ptr @_ZNKSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %902) #8
  store ptr %919, ptr %127, align 8
  %920 = call noundef i64 @_ZN9__gnu_cxxmiIPKSt4pairI8RcStringN3HIR6VisEntINS3_7TypeRefEEEESt6vectorIS7_SaIS7_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSG_SJ_(ptr noundef nonnull align 8 dereferenceable(8) %126, ptr noundef nonnull align 8 dereferenceable(8) %127) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %127) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %126) #8
  %921 = and i64 %920, 4294967295
  %922 = call noundef i64 @_ZNKSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %902) #8
  %923 = icmp eq i64 %921, %922
  br i1 %923, label %924, label %941

924:                                              ; preds = %918
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %128) #8
  invoke void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %128, ptr noundef nonnull align 8 dereferenceable(8) %1)
          to label %925 unwind label %932

925:                                              ; preds = %924
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %130) #8
  store ptr %890, ptr %130, align 8, !tbaa !5
  %926 = getelementptr inbounds i8, ptr %130, i64 8
  store ptr %914, ptr %926, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE4$_13vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %129, ptr noundef nonnull align 8 dereferenceable(16) %130) #8
  invoke void @_ZNK4Span5errorE9ErrorTypeSt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %128, i32 noundef 0, ptr noundef nonnull %129)
          to label %927 unwind label %934

927:                                              ; preds = %925
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %129) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %130) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %128) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %128) #8
  %928 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %928, ptr noundef nonnull @.str.19)
          to label %929 unwind label %937

929:                                              ; preds = %927
  invoke void @__cxa_throw(ptr nonnull %928, ptr nonnull @_ZTISt13runtime_error, ptr nonnull @_ZNSt13runtime_errorD1Ev) #10
          to label %971 unwind label %939

930:                                              ; preds = %.lr.ph1013
  %931 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %126) #8
  br label %962

932:                                              ; preds = %924
  %933 = landingpad { ptr, i32 }
          cleanup
  br label %936

934:                                              ; preds = %925
  %935 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %129) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %130) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %128) #8
  br label %936

936:                                              ; preds = %934, %932
  %.pn565 = phi { ptr, i32 } [ %935, %934 ], [ %933, %932 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %128) #8
  br label %962

937:                                              ; preds = %927
  %938 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %928) #8
  br label %962

939:                                              ; preds = %929
  %940 = landingpad { ptr, i32 }
          cleanup
  br label %962

941:                                              ; preds = %918
  %942 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNKSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %902, i64 noundef %921) #8
  %943 = getelementptr inbounds i8, ptr %942, i64 24
  %944 = invoke noundef zeroext i1 @_Z24monomorphise_type_neededRKN3HIR7TypeRefEb(ptr noundef nonnull align 8 dereferenceable(8) %943, i1 noundef zeroext false)
          to label %945 unwind label %950

945:                                              ; preds = %941
  br i1 %944, label %946, label %957

946:                                              ; preds = %945
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %131) #8
  invoke void @_ZNK13Monomorphiser14monomorph_typeERK4SpanRKN3HIR7TypeRefEb(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %131, ptr noundef nonnull align 8 dereferenceable(96) %123, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(8) %943, i1 noundef zeroext true)
          to label %947 unwind label %952

947:                                              ; preds = %946
  %948 = getelementptr inbounds i8, ptr %914, i64 8
  invoke void @_ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(212) %948, ptr noundef nonnull align 8 dereferenceable(8) %131)
          to label %949 unwind label %954

949:                                              ; preds = %947
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %131) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %131) #8
  br label %959

950:                                              ; preds = %957, %941
  %951 = landingpad { ptr, i32 }
          cleanup
  br label %962

952:                                              ; preds = %946
  %953 = landingpad { ptr, i32 }
          cleanup
  br label %956

954:                                              ; preds = %947
  %955 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %131) #8
  br label %956

956:                                              ; preds = %954, %952
  %.pn562 = phi { ptr, i32 } [ %955, %954 ], [ %953, %952 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %131) #8
  br label %962

957:                                              ; preds = %945
  %958 = getelementptr inbounds i8, ptr %914, i64 8
  invoke void @_ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(212) %958, ptr noundef nonnull align 8 dereferenceable(8) %943)
          to label %959 unwind label %950

959:                                              ; preds = %957, %949
  %960 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPSt4pairI8RcStringN3HIR7PatternEESt6vectorIS5_SaIS5_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %124) #8
  %961 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPSt4pairI8RcStringN3HIR7PatternEESt6vectorIS5_SaIS5_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_(ptr noundef nonnull align 8 dereferenceable(8) %124, ptr noundef nonnull align 8 dereferenceable(8) %125) #8
  br i1 %961, label %.lr.ph1013, label %..critedge.loopexit_crit_edge

962:                                              ; preds = %950, %956, %939, %937, %936, %930
  %.pn567 = phi { ptr, i32 } [ %940, %939 ], [ %938, %937 ], [ %.pn565, %936 ], [ %931, %930 ], [ %.pn562, %956 ], [ %951, %950 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %125) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %124) #8
  call void @_ZN13MonomorphiserD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %123) #8
  br label %963

963:                                              ; preds = %962, %912
  %.pn567.pn = phi { ptr, i32 } [ %.pn567, %962 ], [ %913, %912 ]
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %123) #8
  br label %969

..loopexit766_crit_edge:                          ; preds = %965, %.preheader789.split.split
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %133) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %132) #8
  br label %.loopexit765

.lr.ph885:                                        ; preds = %.preheader789.split.split, %965
  %964 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %132) #8
  invoke void @_ZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(592) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(212) %964, ptr noundef nonnull align 8 dereferenceable(8) %3)
          to label %965 unwind label %.split.split

965:                                              ; preds = %.lr.ph885
  %966 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %132) #8
  %967 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %132, ptr noundef nonnull align 8 dereferenceable(8) %133) #8
  br i1 %967, label %.lr.ph885, label %..loopexit766_crit_edge

.split.split:                                     ; preds = %.lr.ph885
  %968 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %133) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %132) #8
  br label %969

.loopexit765:                                     ; preds = %339, %.preheader768.split, %..critedge.loopexit_crit_edge, %..loopexit764_crit_edge, %.preheader741.split.split, %786, %779, %.lr.ph1060.split, %..loopexit762_crit_edge, %..loopexit722_crit_edge, %..loopexit721_crit_edge, %..loopexit_crit_edge, %494, %._crit_edge1483, %.preheader747, %366, %289, %298, %..thread718.loopexit_crit_edge, %215, %175, %173, %..loopexit766_crit_edge, %.lr.ph1925, %.preheader767.split, %.preheader739.split, %894
  call void @_ZN8TraceLogD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %5) #8
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %5) #8
  ret void

969:                                              ; preds = %.loopexit758, %.loopexit.split-lp, %.split1654, %.split1511.split, %728, %.split.split, %217, %264, %221, %219, %198, %197, %192, %177, %286, %287, %309, %280, %372, %344, %334, %332, %331, %325, %392, %446, %447, %510, %421, %432, %401, %399, %398, %390, %515, %537, %538, %.split1414.split, %.split1358.split, %584, %513, %759, %758, %748, %777, %776, %770, %737, %821, %889, %820, %910, %963, %900, %152
  %.pn708.pn = phi { ptr, i32 } [ %.pn708, %152 ], [ %968, %.split.split ], [ %.pn617.pn.pn, %728 ], [ %170, %.split1511.split ], [ %169, %.split1654 ], [ %178, %177 ], [ %199, %198 ], [ %.pn702, %197 ], [ %.pn686, %192 ], [ %.pn693.pn.pn.pn.pn.pn.pn, %264 ], [ %218, %217 ], [ %222, %221 ], [ %220, %219 ], [ %281, %280 ], [ %288, %287 ], [ %.pn681, %286 ], [ %.pn676.pn.pn, %309 ], [ %326, %325 ], [ %.pn665.pn, %372 ], [ %335, %334 ], [ %333, %332 ], [ %.pn669, %331 ], [ %345, %344 ], [ %391, %390 ], [ %.pn649.pn, %510 ], [ %393, %392 ], [ %448, %447 ], [ %.pn635, %446 ], [ %402, %401 ], [ %400, %399 ], [ %.pn653, %398 ], [ %422, %421 ], [ %433, %432 ], [ %514, %513 ], [ %516, %515 ], [ %539, %538 ], [ %.pn629, %537 ], [ %.pn626.pn, %584 ], [ %549, %.split1358.split ], [ %544, %.split1414.split ], [ %.pn584, %737 ], [ %749, %748 ], [ %760, %759 ], [ %.pn591, %758 ], [ %771, %770 ], [ %778, %777 ], [ %.pn587, %776 ], [ %.pn572, %820 ], [ %.pn578.pn.pn, %889 ], [ %822, %821 ], [ %.pn, %900 ], [ %.pn567.pn, %963 ], [ %911, %910 ], [ %lpad.loopexit, %.loopexit758 ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ]
  call void @_ZN8TraceLogD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %5) #8
  br label %970

970:                                              ; preds = %969, %141
  %.pn708.pn.pn = phi { ptr, i32 } [ %.pn708.pn, %969 ], [ %142, %141 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %5) #8
  resume { ptr, i32 } %.pn708.pn.pn

971:                                              ; preds = %929, %769, %753, %642, %614, %532, %441, %389, %324, %279, %187
  unreachable
}

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3HIR7Pattern4Data3tagEv(ptr noundef nonnull align 8 dereferenceable(184)) local_unnamed_addr #6 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(104) ptr @_ZN3HIR7Pattern4Data8as_ValueEv(ptr noundef nonnull align 8 dereferenceable(184)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN1H12handle_valueERS_S2_S8_RKNS4_5ValueE(ptr noundef nonnull align 8 dereferenceable(592), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(104)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(17) ptr @_ZN3HIR7Pattern4Data8as_RangeEv(ptr noundef nonnull align 8 dereferenceable(184)) local_unnamed_addr #6 align 2

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #6 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3HIR4Path4Data10is_GenericEv(ptr noundef nonnull align 8 dereferenceable(88)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(32) ptr @_ZNK3HIR4Path4Data10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(88)) local_unnamed_addr #6 align 2

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

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

declare void @_ZN16HMTypeInferrence11new_ivar_trEN3HIR10InferClassE(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8, ptr noundef nonnull align 8 dereferenceable(49), i32 noundef) local_unnamed_addr #0

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

declare void @_ZN3HIR10PathParamsC1ENS_7TypeRefE(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef) unnamed_addr #0

declare void @_ZN3HIR11GenericPathC1ENS_10SimplePathENS_10PathParamsE(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, ptr noundef) unnamed_addr #0

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3HIR7TypeRef8new_pathENS_4PathENS_15TypePathBindingE(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeRef") align 8, ptr noundef, ptr noundef) local_unnamed_addr #4 align 2

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

declare void @_ZN3HIR4PathC1ENS_11GenericPathE(ptr noundef nonnull align 8 dereferenceable(88), ptr noundef) unnamed_addr #0

declare noundef nonnull align 8 dereferenceable(252) ptr @_ZNK3HIR5Crate18get_struct_by_pathERK4SpanRKNS_10SimplePathE(ptr noundef nonnull align 8 dereferenceable(944), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #0

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZN3HIR7Pattern4Data8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(184)) local_unnamed_addr #6 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIN3HIR7PatternESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE3$_3vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(212) ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #6 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EEC2EOS3_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #6 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(52) ptr @_ZN3HIR7Pattern4Data13as_SplitTupleEv(ptr noundef nonnull align 8 dereferenceable(184)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE3$_4vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #6 align 2

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE3$_5vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #2 align 2

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

; Function Attrs: mustprogress uwtable
declare hidden void @_Z15make_unique_ptrIZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS4_7TypeRefEE20SplitTuplePatRevisitESt10unique_ptrIT_St14default_deleteISC_EEOSC_(ptr dead_on_unwind noalias writable sret(%"class.std::unique_ptr.420") align 8, ptr noundef nonnull align 8 dereferenceable(80)) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN20SplitTuplePatRevisitC2ES0_S6_St6vectorIS6_SaIS6_EESC_Rj(ptr noundef nonnull align 8 dereferenceable(80), ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef nonnull align 4 dereferenceable(4)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZNSt10unique_ptrIN7Context9RevisitorESt14default_deleteIS1_EEC2IZNS0_27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS9_7TypeRefEE20SplitTuplePatRevisitS2_ISF_EvEEOS_IT_T0_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZNSt10unique_ptrIZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS4_7TypeRefEE20SplitTuplePatRevisitSt14default_deleteISA_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #6 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN20SplitTuplePatRevisitD2Ev(ptr noundef nonnull align 8 dereferenceable(80)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZN3HIR7Pattern4Data8as_SliceEv(ptr noundef nonnull align 8 dereferenceable(184)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE3$_6vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @_Z15make_unique_ptrIZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS4_7TypeRefEE15SlicePatRevisitESt10unique_ptrIT_St14default_deleteISC_EEOSC_(ptr dead_on_unwind noalias writable sret(%"class.std::unique_ptr.429") align 8, ptr noundef nonnull align 8 dereferenceable(36)) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN15SlicePatRevisitC2ES0_S6_S6_j(ptr noundef nonnull align 8 dereferenceable(36), ptr noundef, ptr noundef, ptr noundef, i32 noundef) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZNSt10unique_ptrIN7Context9RevisitorESt14default_deleteIS1_EEC2IZNS0_27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS9_7TypeRefEE15SlicePatRevisitS2_ISF_EvEEOS_IT_T0_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZNSt10unique_ptrIZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS4_7TypeRefEE15SlicePatRevisitSt14default_deleteISA_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #6 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN15SlicePatRevisitD2Ev(ptr noundef nonnull align 8 dereferenceable(36)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(72) ptr @_ZN3HIR7Pattern4Data13as_SplitSliceEv(ptr noundef nonnull align 8 dereferenceable(184)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE3$_7vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #6 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE3$_8vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #6 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3HIR7TypeRef9new_arrayES0_m(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeRef") align 8, ptr noundef, i64 noundef) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @_Z15make_unique_ptrIZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS4_7TypeRefEE20SplitSlicePatRevisitESt10unique_ptrIT_St14default_deleteISC_EEOSC_(ptr dead_on_unwind noalias writable sret(%"class.std::unique_ptr.440") align 8, ptr noundef nonnull align 8 dereferenceable(44)) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN20SplitSlicePatRevisitC2ES0_S6_S6_S6_j(ptr noundef nonnull align 8 dereferenceable(44), ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZNSt10unique_ptrIN7Context9RevisitorESt14default_deleteIS1_EEC2IZNS0_27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS9_7TypeRefEE20SplitSlicePatRevisitS2_ISF_EvEEOS_IT_T0_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZNSt10unique_ptrIZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS4_7TypeRefEE20SplitSlicePatRevisitSt14default_deleteISA_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #6 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN20SplitSlicePatRevisitD2Ev(ptr noundef nonnull align 8 dereferenceable(44)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(112) ptr @_ZN3HIR7Pattern4Data12as_PathValueEv(ptr noundef nonnull align 8 dereferenceable(184)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEEN1H13get_path_typeERS_S2_RNS3_4PathERKNS4_11PathBindingE(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeRef") align 8, ptr noundef nonnull align 8 dereferenceable(592), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(88), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3HIR7Pattern11PathBinding3tagEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #6 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE3$_9vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #6 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3HIR6Struct4Data7is_UnitEv(ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #6 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIN3HIR4Enum11DataVariantESaIS2_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE4$_10vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZNKSt6vectorIN3HIR4Enum11DataVariantESaIS2_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3HIR8TypeData8is_TupleEv(ptr noundef nonnull align 8 dereferenceable(184)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(172) ptr @_ZN3HIR7Pattern4Data12as_PathTupleEv(ptr noundef nonnull align 8 dereferenceable(184)) local_unnamed_addr #6 align 2

declare noundef nonnull align 8 dereferenceable(24) ptr @_ZN3HIR17pattern_get_tupleERK4SpanRKNS_4PathERKNS_7Pattern11PathBindingE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(88), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #0

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(32) ptr @_ZN3HIR4Path4Data10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(88)) local_unnamed_addr #6 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE4$_11vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE4$_12vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #6 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef nonnull align 8 dereferenceable(8) ptr @"_ZZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS3_7TypeRefEENK4$_14clES8_"(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZNKSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(137) ptr @_ZN3HIR7Pattern4Data12as_PathNamedEv(ptr noundef nonnull align 8 dereferenceable(184)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3HIR7Pattern4Data14Data_PathNamed11is_wildcardEv(ptr noundef nonnull align 8 dereferenceable(137)) local_unnamed_addr #6 align 2

declare noundef nonnull align 8 dereferenceable(24) ptr @_ZN3HIR17pattern_get_namedERK4SpanRKNS_4PathERKNS_7Pattern11PathBindingE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(88), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #0

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZN9__gnu_cxxmiIPKSt4pairI8RcStringN3HIR6VisEntINS3_7TypeRefEEEESt6vectorIS7_SaIS7_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSG_SJ_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #5

; Function Attrs: inlinehint mustprogress uwtable
declare hidden ptr @"_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKSt4pairI8RcStringN3HIR6VisEntINS4_7TypeRefEEEESt6vectorIS8_SaIS8_EEEEZN7Context27handle_pattern_direct_innerERK4SpanRNS4_7PatternERKS6_E4$_15ET_SO_SO_T0_"(ptr, ptr, ptr) local_unnamed_addr #4

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZN7Context27handle_pattern_direct_innerERK4SpanRN3HIR7PatternERKNS8_7TypeRefEE4$_13vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(32) ptr @_ZNKSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #6 align 2

declare noundef zeroext i1 @_Z24monomorphise_type_neededRKN3HIR7TypeRefEb(ptr noundef nonnull align 8 dereferenceable(8), i1 noundef zeroext) local_unnamed_addr #0

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZN3HIR7Pattern4Data5as_OrEv(ptr noundef nonnull align 8 dereferenceable(184)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN13MonomorphiserD2Ev(ptr noundef nonnull align 8 dereferenceable(96)) unnamed_addr #6 align 2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = distinct !{!9, !10}
!10 = !{!"llvm.loop.mustprogress"}
!11 = !{!12, !6, i64 0}
!12 = !{!"_ZTS7Context", !6, i64 0, !13, i64 8, !17, i64 32, !27, i64 88, !50, i64 368, !51, i64 376, !55, i64 400, !59, i64 424, !63, i64 448, !67, i64 472, !73, i64 512, !77, i64 536, !44, i64 584}
!13 = !{!"_ZTSSt6vectorIN7Context7BindingESaIS1_EE", !14, i64 0}
!14 = !{!"_ZTSSt12_Vector_baseIN7Context7BindingESaIS1_EE", !15, i64 0}
!15 = !{!"_ZTSNSt12_Vector_baseIN7Context7BindingESaIS1_EE12_Vector_implE", !16, i64 0}
!16 = !{!"_ZTSNSt12_Vector_baseIN7Context7BindingESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!17 = !{!"_ZTS16HMTypeInferrence", !18, i64 0, !22, i64 24, !26, i64 48}
!18 = !{!"_ZTSSt6vectorIN16HMTypeInferrence4IVarESaIS1_EE", !19, i64 0}
!19 = !{!"_ZTSSt12_Vector_baseIN16HMTypeInferrence4IVarESaIS1_EE", !20, i64 0}
!20 = !{!"_ZTSNSt12_Vector_baseIN16HMTypeInferrence4IVarESaIS1_EE12_Vector_implE", !21, i64 0}
!21 = !{!"_ZTSNSt12_Vector_baseIN16HMTypeInferrence4IVarESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!22 = !{!"_ZTSSt6vectorIN16HMTypeInferrence9IVarValueESaIS1_EE", !23, i64 0}
!23 = !{!"_ZTSSt12_Vector_baseIN16HMTypeInferrence9IVarValueESaIS1_EE", !24, i64 0}
!24 = !{!"_ZTSNSt12_Vector_baseIN16HMTypeInferrence9IVarValueESaIS1_EE12_Vector_implE", !25, i64 0}
!25 = !{!"_ZTSNSt12_Vector_baseIN16HMTypeInferrence9IVarValueESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!26 = !{!"bool", !7, i64 0}
!27 = !{!"_ZTS15TraitResolution", !28, i64 0, !6, i64 216, !6, i64 224, !6, i64 232, !6, i64 240, !6, i64 248, !46, i64 256}
!28 = !{!"_ZTS18TraitResolveCommon", !6, i64 0, !6, i64 8, !6, i64 16, !29, i64 24, !38, i64 72, !44, i64 104, !44, i64 112, !44, i64 120, !44, i64 128, !44, i64 136, !44, i64 144, !44, i64 152, !44, i64 160, !44, i64 168, !44, i64 176, !44, i64 184, !44, i64 192, !44, i64 200, !44, i64 208}
!29 = !{!"_ZTSSt3mapIN3HIR7TypeRefEN18TraitResolveCommon14CachedEqualityESt4lessIS1_ESaISt4pairIKS1_S3_EEE", !30, i64 0}
!30 = !{!"_ZTSSt8_Rb_treeIN3HIR7TypeRefESt4pairIKS1_N18TraitResolveCommon14CachedEqualityEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE", !31, i64 0}
!31 = !{!"_ZTSNSt8_Rb_treeIN3HIR7TypeRefESt4pairIKS1_N18TraitResolveCommon14CachedEqualityEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE13_Rb_tree_implISA_Lb1EEE", !32, i64 0, !34, i64 8}
!32 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIN3HIR7TypeRefEEE", !33, i64 0}
!33 = !{!"_ZTSSt4lessIN3HIR7TypeRefEE"}
!34 = !{!"_ZTSSt15_Rb_tree_header", !35, i64 0, !37, i64 32}
!35 = !{!"_ZTSSt18_Rb_tree_node_base", !36, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!36 = !{!"_ZTSSt14_Rb_tree_color", !7, i64 0}
!37 = !{!"long", !7, i64 0}
!38 = !{!"_ZTS11RangeVecMapISt4pairIN3HIR7TypeRefENS1_11GenericPathEEN18TraitResolveCommon11CachedBoundENS5_14CachedBoundCmpEE", !39, i64 0, !43, i64 24}
!39 = !{!"_ZTSSt6vectorISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE", !40, i64 0}
!40 = !{!"_ZTSSt12_Vector_baseISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE", !41, i64 0}
!41 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE12_Vector_implE", !42, i64 0}
!42 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!43 = !{!"_ZTSN18TraitResolveCommon14CachedBoundCmpE"}
!44 = !{!"_ZTSN3HIR10SimplePathE", !45, i64 0}
!45 = !{!"_ZTS10ThinVectorI8RcStringE", !6, i64 0}
!46 = !{!"_ZTSSt6vectorISt10unique_ptrIN3HIR7TypeRefESt14default_deleteIS2_EESaIS5_EE", !47, i64 0}
!47 = !{!"_ZTSSt12_Vector_baseISt10unique_ptrIN3HIR7TypeRefESt14default_deleteIS2_EESaIS5_EE", !48, i64 0}
!48 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrIN3HIR7TypeRefESt14default_deleteIS2_EESaIS5_EE12_Vector_implE", !49, i64 0}
!49 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrIN3HIR7TypeRefESt14default_deleteIS2_EESaIS5_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!50 = !{!"int", !7, i64 0}
!51 = !{!"_ZTSSt6vectorISt10unique_ptrIN7Context8CoercionESt14default_deleteIS2_EESaIS5_EE", !52, i64 0}
!52 = !{!"_ZTSSt12_Vector_baseISt10unique_ptrIN7Context8CoercionESt14default_deleteIS2_EESaIS5_EE", !53, i64 0}
!53 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrIN7Context8CoercionESt14default_deleteIS2_EESaIS5_EE12_Vector_implE", !54, i64 0}
!54 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrIN7Context8CoercionESt14default_deleteIS2_EESaIS5_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!55 = !{!"_ZTSSt6vectorIN7Context10AssociatedESaIS1_EE", !56, i64 0}
!56 = !{!"_ZTSSt12_Vector_baseIN7Context10AssociatedESaIS1_EE", !57, i64 0}
!57 = !{!"_ZTSNSt12_Vector_baseIN7Context10AssociatedESaIS1_EE12_Vector_implE", !58, i64 0}
!58 = !{!"_ZTSNSt12_Vector_baseIN7Context10AssociatedESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!59 = !{!"_ZTSSt6vectorIPN3HIR8ExprNodeESaIS2_EE", !60, i64 0}
!60 = !{!"_ZTSSt12_Vector_baseIPN3HIR8ExprNodeESaIS2_EE", !61, i64 0}
!61 = !{!"_ZTSNSt12_Vector_baseIPN3HIR8ExprNodeESaIS2_EE12_Vector_implE", !62, i64 0}
!62 = !{!"_ZTSNSt12_Vector_baseIPN3HIR8ExprNodeESaIS2_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!63 = !{!"_ZTSSt6vectorISt10unique_ptrIN7Context9RevisitorESt14default_deleteIS2_EESaIS5_EE", !64, i64 0}
!64 = !{!"_ZTSSt12_Vector_baseISt10unique_ptrIN7Context9RevisitorESt14default_deleteIS2_EESaIS5_EE", !65, i64 0}
!65 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrIN7Context9RevisitorESt14default_deleteIS2_EESaIS5_EE12_Vector_implE", !66, i64 0}
!66 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrIN7Context9RevisitorESt14default_deleteIS2_EESaIS5_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!67 = !{!"_ZTSSt6vectorIbSaIbEE", !68, i64 0}
!68 = !{!"_ZTSSt13_Bvector_baseISaIbEE", !69, i64 0}
!69 = !{!"_ZTSNSt13_Bvector_baseISaIbEE13_Bvector_implE", !70, i64 0}
!70 = !{!"_ZTSNSt13_Bvector_baseISaIbEE18_Bvector_impl_dataE", !71, i64 0, !71, i64 16, !6, i64 32}
!71 = !{!"_ZTSSt13_Bit_iterator", !72, i64 0}
!72 = !{!"_ZTSSt18_Bit_iterator_base", !6, i64 0, !50, i64 8}
!73 = !{!"_ZTSSt6vectorIN7Context12IVarPossibleESaIS1_EE", !74, i64 0}
!74 = !{!"_ZTSSt12_Vector_baseIN7Context12IVarPossibleESaIS1_EE", !75, i64 0}
!75 = !{!"_ZTSNSt12_Vector_baseIN7Context12IVarPossibleESaIS1_EE12_Vector_implE", !76, i64 0}
!76 = !{!"_ZTSNSt12_Vector_baseIN7Context12IVarPossibleESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!77 = !{!"_ZTSSt3mapIPN3HIR30TypeData_ErasedType_AliasInnerEN7Context9TaitEntryESt4lessIS2_ESaISt4pairIKS2_S4_EEE", !78, i64 0}
!78 = !{!"_ZTSSt8_Rb_treeIPN3HIR30TypeData_ErasedType_AliasInnerESt4pairIKS2_N7Context9TaitEntryEESt10_Select1stIS7_ESt4lessIS2_ESaIS7_EE", !79, i64 0}
!79 = !{!"_ZTSNSt8_Rb_treeIPN3HIR30TypeData_ErasedType_AliasInnerESt4pairIKS2_N7Context9TaitEntryEESt10_Select1stIS7_ESt4lessIS2_ESaIS7_EE13_Rb_tree_implISB_Lb1EEE", !80, i64 0, !34, i64 8}
!80 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIPN3HIR30TypeData_ErasedType_AliasInnerEEE", !81, i64 0}
!81 = !{!"_ZTSSt4lessIPN3HIR30TypeData_ErasedType_AliasInnerEE"}
!82 = !{!83, !85, i64 4}
!83 = !{!"_ZTSN3HIR8TypeData11Data_BorrowE", !84, i64 0, !85, i64 4, !86, i64 8}
!84 = !{!"_ZTSN3HIR11LifetimeRefE", !50, i64 0}
!85 = !{!"_ZTSN3HIR10BorrowTypeE", !7, i64 0}
!86 = !{!"_ZTSN3HIR7TypeRefE", !6, i64 0}
!87 = !{!88, !85, i64 0}
!88 = !{!"_ZTSN3HIR7Pattern4Data8Data_RefE", !85, i64 0, !89, i64 8}
!89 = !{!"_ZTSSt10unique_ptrIN3HIR7PatternESt14default_deleteIS1_EE", !90, i64 0}
!90 = !{!"_ZTSSt15__uniq_ptr_dataIN3HIR7PatternESt14default_deleteIS1_ELb1ELb1EE", !91, i64 0}
!91 = !{!"_ZTSSt15__uniq_ptr_implIN3HIR7PatternESt14default_deleteIS1_EE", !92, i64 0}
!92 = !{!"_ZTSSt5tupleIJPN3HIR7PatternESt14default_deleteIS1_EEE", !93, i64 0}
!93 = !{!"_ZTSSt11_Tuple_implILm0EJPN3HIR7PatternESt14default_deleteIS1_EEE", !94, i64 0}
!94 = !{!"_ZTSSt10_Head_baseILm0EPN3HIR7PatternELb0EE", !6, i64 0}
!95 = distinct !{!95, !10}
!96 = distinct !{!96, !10}
!97 = !{!98, !50, i64 48}
!98 = !{!"_ZTSN3HIR7Pattern4Data15Data_SplitTupleE", !99, i64 0, !99, i64 24, !50, i64 48}
!99 = !{!"_ZTSSt6vectorIN3HIR7PatternESaIS1_EE", !100, i64 0}
!100 = !{!"_ZTSSt12_Vector_baseIN3HIR7PatternESaIS1_EE", !101, i64 0}
!101 = !{!"_ZTSNSt12_Vector_baseIN3HIR7PatternESaIS1_EE12_Vector_implE", !102, i64 0}
!102 = !{!"_ZTSNSt12_Vector_baseIN3HIR7PatternESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!103 = !{!37, !37, i64 0}
!104 = !{!105, !6, i64 0}
!105 = !{!"_ZTSN3HIR7Pattern11PathBinding9Data_EnumE", !6, i64 0, !50, i64 8}
!106 = distinct !{!106, !10}
!107 = !{!105, !50, i64 8}
!108 = !{!109, !26, i64 136}
!109 = !{!"_ZTSN3HIR7Pattern4Data14Data_PathTupleE", !110, i64 0, !113, i64 88, !99, i64 112, !26, i64 136, !99, i64 144, !50, i64 168}
!110 = !{!"_ZTSN3HIR4PathE", !111, i64 0}
!111 = !{!"_ZTSN3HIR4Path4DataE", !112, i64 0, !7, i64 8}
!112 = !{!"_ZTSN3HIR4Path4Data3TagE", !7, i64 0}
!113 = !{!"_ZTSN3HIR7Pattern11PathBindingE", !114, i64 0, !7, i64 8}
!114 = !{!"_ZTSN3HIR7Pattern11PathBinding3TagE", !7, i64 0}
!115 = !{i8 0, i8 2}
!116 = !{}
!117 = !{!109, !50, i64 168}
!118 = distinct !{!118, !10}
!119 = distinct !{!119, !10}


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