; LLVM IR from thepowersgang/mrustc :: src/mir (from_hir)

; 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.MIR::FunctionPointer" = 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 = type { ptr }
%"class.MIR::Function" = type { %"class.std::vector", %"class.std::vector.0", %"class.std::vector.4", %"class.MIR::EnumCachePtr" }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = 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.std::vector.0" = 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.4" = type { %"struct.std::_Vector_base.5" }
%"struct.std::_Vector_base.5" = type { %"struct.std::_Vector_base<MIR::BasicBlock, std::allocator<MIR::BasicBlock>>::_Vector_impl" }
%"struct.std::_Vector_base<MIR::BasicBlock, std::allocator<MIR::BasicBlock>>::_Vector_impl" = type { %"struct.std::_Vector_base<MIR::BasicBlock, std::allocator<MIR::BasicBlock>>::_Vector_impl_data" }
%"struct.std::_Vector_base<MIR::BasicBlock, std::allocator<MIR::BasicBlock>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.MIR::EnumCachePtr" = type { ptr }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%"class.HIR::TypeRef" = type { ptr }
%class.MirBuilder = type { ptr, ptr, ptr, ptr, ptr, ptr, i32, i8, %"class.MIR::RValue", i8, [7 x i8], %class.VarState, %"class.std::vector.40", %"class.std::vector.40", i64, %"class.std::map", %"class.std::vector.56", %"class.std::vector.61", %class.ScopeHandle, %"class.std::vector.66", %"struct.MIR::LValue" }
%"class.MIR::RValue" = type { i32, %"union.MIR::RValue::DataUnion" }
%"union.MIR::RValue::DataUnion" = type { %"struct.MIR::RValue::Data_BinOp" }
%"struct.MIR::RValue::Data_BinOp" = type { %"class.MIR::Param", i32, %"class.MIR::Param" }
%"class.MIR::Param" = type { i32, %"union.MIR::Param::DataUnion" }
%"union.MIR::Param::DataUnion" = type { %"struct.MIR::Param::Data_Borrow" }
%"struct.MIR::Param::Data_Borrow" = type { i32, %"struct.MIR::LValue" }
%class.VarState = type { i32, [4 x i8], %"union.VarState::DataUnion" }
%"union.VarState::DataUnion" = type { i32, [28 x i8] }
%"class.std::vector.40" = type { %"struct.std::_Vector_base.41" }
%"struct.std::_Vector_base.41" = type { %"struct.std::_Vector_base<VarState, std::allocator<VarState>>::_Vector_impl" }
%"struct.std::_Vector_base<VarState, std::allocator<VarState>>::_Vector_impl" = type { %"struct.std::_Vector_base<VarState, std::allocator<VarState>>::_Vector_impl_data" }
%"struct.std::_Vector_base<VarState, std::allocator<VarState>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::map" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<unsigned int, std::pair<const unsigned int, unsigned int>, std::_Select1st<std::pair<const unsigned int, unsigned int>>, std::less<unsigned int>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<unsigned int, std::pair<const unsigned int, unsigned int>, std::_Select1st<std::pair<const unsigned int, unsigned int>>, std::less<unsigned int>>::_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.std::vector.56" = type { %"struct.std::_Vector_base.57" }
%"struct.std::_Vector_base.57" = type { %"struct.std::_Vector_base<MirBuilder::ScopeDef, std::allocator<MirBuilder::ScopeDef>>::_Vector_impl" }
%"struct.std::_Vector_base<MirBuilder::ScopeDef, std::allocator<MirBuilder::ScopeDef>>::_Vector_impl" = type { %"struct.std::_Vector_base<MirBuilder::ScopeDef, std::allocator<MirBuilder::ScopeDef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<MirBuilder::ScopeDef, std::allocator<MirBuilder::ScopeDef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.61" = type { %"struct.std::_Vector_base.62" }
%"struct.std::_Vector_base.62" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.ScopeHandle = type <{ ptr, i32, [4 x i8] }>
%"class.std::vector.66" = type { %"struct.std::_Vector_base.67" }
%"struct.std::_Vector_base.67" = type { %"struct.std::_Vector_base<std::pair<HIR::PatternBinding::Type, MIR::LValue>, std::allocator<std::pair<HIR::PatternBinding::Type, MIR::LValue>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<HIR::PatternBinding::Type, MIR::LValue>, std::allocator<std::pair<HIR::PatternBinding::Type, MIR::LValue>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<HIR::PatternBinding::Type, MIR::LValue>, std::allocator<std::pair<HIR::PatternBinding::Type, MIR::LValue>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<HIR::PatternBinding::Type, MIR::LValue>, std::allocator<std::pair<HIR::PatternBinding::Type, MIR::LValue>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.MIR::LValue" = type { %"class.MIR::LValue::Storage", %"class.std::vector.9" }
%"class.MIR::LValue::Storage" = type { i64 }
%"class.std::vector.9" = type { %"struct.std::_Vector_base.10" }
%"struct.std::_Vector_base.10" = type { %"struct.std::_Vector_base<MIR::LValue::Wrapper, std::allocator<MIR::LValue::Wrapper>>::_Vector_impl" }
%"struct.std::_Vector_base<MIR::LValue::Wrapper, std::allocator<MIR::LValue::Wrapper>>::_Vector_impl" = type { %"struct.std::_Vector_base<MIR::LValue::Wrapper, std::allocator<MIR::LValue::Wrapper>>::_Vector_impl_data" }
%"struct.std::_Vector_base<MIR::LValue::Wrapper, std::allocator<MIR::LValue::Wrapper>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.(anonymous namespace)::ExprVisitor_Conv" = type { %class.MirConverter, ptr, ptr, i8, %"class.std::vector.98", ptr, ptr, ptr, i8, %"struct.(anonymous namespace)::ExprVisitor_Conv::GeneratorState" }
%class.MirConverter = type { %"class.HIR::ExprVisitor" }
%"class.HIR::ExprVisitor" = type { ptr }
%"class.std::vector.98" = type { %"struct.std::_Vector_base.99" }
%"struct.std::_Vector_base.99" = type { %"struct.std::_Vector_base<(anonymous namespace)::ExprVisitor_Conv::LoopDesc, std::allocator<(anonymous namespace)::ExprVisitor_Conv::LoopDesc>>::_Vector_impl" }
%"struct.std::_Vector_base<(anonymous namespace)::ExprVisitor_Conv::LoopDesc, std::allocator<(anonymous namespace)::ExprVisitor_Conv::LoopDesc>>::_Vector_impl" = type { %"struct.std::_Vector_base<(anonymous namespace)::ExprVisitor_Conv::LoopDesc, std::allocator<(anonymous namespace)::ExprVisitor_Conv::LoopDesc>>::_Vector_impl_data" }
%"struct.std::_Vector_base<(anonymous namespace)::ExprVisitor_Conv::LoopDesc, std::allocator<(anonymous namespace)::ExprVisitor_Conv::LoopDesc>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.(anonymous namespace)::ExprVisitor_Conv::GeneratorState" = type { i32, %"class.std::vector.103", %"struct.HIR::SimplePath" }
%"class.std::vector.103" = type { %"struct.std::_Vector_base.104" }
%"struct.std::_Vector_base.104" = type { %"struct.std::_Vector_base<(anonymous namespace)::ExprVisitor_Conv::GeneratorState::State, std::allocator<(anonymous namespace)::ExprVisitor_Conv::GeneratorState::State>>::_Vector_impl" }
%"struct.std::_Vector_base<(anonymous namespace)::ExprVisitor_Conv::GeneratorState::State, std::allocator<(anonymous namespace)::ExprVisitor_Conv::GeneratorState::State>>::_Vector_impl" = type { %"struct.std::_Vector_base<(anonymous namespace)::ExprVisitor_Conv::GeneratorState::State, std::allocator<(anonymous namespace)::ExprVisitor_Conv::GeneratorState::State>>::_Vector_impl_data" }
%"struct.std::_Vector_base<(anonymous namespace)::ExprVisitor_Conv::GeneratorState::State, std::allocator<(anonymous namespace)::ExprVisitor_Conv::GeneratorState::State>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.HIR::SimplePath" = type { %class.ThinVector }
%class.ThinVector = type { ptr }
%"class.__gnu_cxx::__normal_iterator.108" = type { ptr }
%"class.std::map.148" = type { %"class.std::_Rb_tree.149" }
%"class.std::_Rb_tree.149" = type { %"struct.std::_Rb_tree<unsigned int, std::pair<const unsigned int, std::vector<MIR::LValue::Wrapper>>, std::_Select1st<std::pair<const unsigned int, std::vector<MIR::LValue::Wrapper>>>, std::less<unsigned int>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<unsigned int, std::pair<const unsigned int, std::vector<MIR::LValue::Wrapper>>, std::_Select1st<std::pair<const unsigned int, std::vector<MIR::LValue::Wrapper>>>, std::less<unsigned int>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::pair.168" = type { i32, %"class.std::vector.9" }
%"class.MIR::LValue::Wrapper" = type { i32 }
%"struct.std::pair.166" = type <{ %"struct.std::_Rb_tree_iterator", i8, [7 x i8] }>
%"struct.std::_Rb_tree_iterator" = type { ptr }
%"class.std::vector.32" = type { %"struct.std::_Vector_base.33" }
%"struct.std::_Vector_base.33" = type { %"struct.std::_Vector_base<MIR::Param, std::allocator<MIR::Param>>::_Vector_impl" }
%"struct.std::_Vector_base<MIR::Param, std::allocator<MIR::Param>>::_Vector_impl" = type { %"struct.std::_Vector_base<MIR::Param, std::allocator<MIR::Param>>::_Vector_impl_data" }
%"struct.std::_Vector_base<MIR::Param, std::allocator<MIR::Param>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.HIR::GenericPath" = type { %"struct.HIR::SimplePath", %"struct.HIR::PathParams" }
%"struct.HIR::PathParams" = type { %class.ThinVector.37, %class.ThinVector.38, %class.ThinVector.39 }
%class.ThinVector.37 = type { ptr }
%class.ThinVector.38 = type { ptr }
%class.ThinVector.39 = type { ptr }
%"class.std::function.170" = type { %"class.std::_Function_base", ptr }
%class.anon.173 = type { ptr, ptr }
%"struct.MIR::RValue::Data_EnumVariant" = type { %"class.HIR::GenericPath", i32, %"class.std::vector.32" }
%"class.std::set" = type { %"class.std::_Rb_tree.174" }
%"class.std::_Rb_tree.174" = type { %"struct.std::_Rb_tree<unsigned int, unsigned int, std::_Identity<unsigned int>, std::less<unsigned int>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<unsigned int, unsigned int, std::_Identity<unsigned int>, std::less<unsigned int>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.__gnu_cxx::__normal_iterator.402" = type { ptr }
%class.anon.403 = type { i8 }
%struct.Span = type { ptr }
%class.anon.404 = type { i8 }
%"struct.std::_Rb_tree_const_iterator" = type { ptr }
%class.anon.407 = type { ptr, ptr }
%"struct.HIR::VisEnt" = type { %"class.HIR::Publicity", %"class.HIR::TypeRef" }
%"class.HIR::Publicity" = type { %"class.std::shared_ptr.408" }
%"class.std::shared_ptr.408" = type { %"class.std::__shared_ptr.409" }
%"class.std::__shared_ptr.409" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }
%"class.std::initializer_list" = type { ptr, i64 }
%"class.std::allocator.11" = type { i8 }
%class.Rewriter = type { %"class.MIR::visit::VisitorMut", ptr, %"class.std::vector.411" }
%"class.MIR::visit::VisitorMut" = type { %"class.MIR::visit::VisitorBase" }
%"class.MIR::visit::VisitorBase" = type { ptr }
%"class.std::vector.411" = type { %"struct.std::_Vector_base.412" }
%"struct.std::_Vector_base.412" = type { %"struct.std::_Vector_base<MIR::Statement, std::allocator<MIR::Statement>>::_Vector_impl" }
%"struct.std::_Vector_base<MIR::Statement, std::allocator<MIR::Statement>>::_Vector_impl" = type { %"struct.std::_Vector_base<MIR::Statement, std::allocator<MIR::Statement>>::_Vector_impl_data" }
%"struct.std::_Vector_base<MIR::Statement, std::allocator<MIR::Statement>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.anon.416 = type { i8 }
%"class.HIR::ExprPtr" = type { %"class.HIR::ExprPtrInner", %"class.std::vector", %"class.std::vector", %"class.MIR::FunctionPointer", %"class.HIR::ExprStatePtr" }
%"class.HIR::ExprPtrInner" = type { ptr }
%"class.HIR::ExprStatePtr" = type { ptr }
%"struct.std::pair" = type { %"struct.HIR::Pattern", %"class.HIR::TypeRef" }
%"struct.HIR::Pattern" = type <{ %"class.std::vector.109", %"class.HIR::Pattern::Data", i32, [4 x i8] }>
%"class.std::vector.109" = type { %"struct.std::_Vector_base.110" }
%"struct.std::_Vector_base.110" = 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::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.127" }
%class.RcString = type { ptr }
%"class.std::unique_ptr.127" = type { %"struct.std::__uniq_ptr_data.128" }
%"struct.std::__uniq_ptr_data.128" = type { %"class.std::__uniq_ptr_impl.129" }
%"class.std::__uniq_ptr_impl.129" = type { %"class.std::tuple.130" }
%"class.std::tuple.130" = type { %"struct.std::_Tuple_impl.131" }
%"struct.std::_Tuple_impl.131" = type { %"struct.std::_Head_base.134" }
%"struct.std::_Head_base.134" = type { ptr }
%"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::PatternBinding" = type { i8, i32, %class.RcString, i32, i32 }
%"struct.HIR::ExprNode_GeneratorWrapper" = type { %"class.HIR::ExprNode.base", %"class.HIR::TypeRef", %"class.HIR::TypeRef", %"class.std::unique_ptr.153", ptr, %"class.HIR::GenericPath", %"class.HIR::TypeRef", %"struct.HIR::SimplePath", ptr, %"class.std::vector.161" }
%"class.HIR::ExprNode.base" = type <{ ptr, %struct.Span, %"class.HIR::TypeRef", i32 }>
%"class.std::unique_ptr.153" = type { %"struct.std::__uniq_ptr_data.154" }
%"struct.std::__uniq_ptr_data.154" = type { %"class.std::__uniq_ptr_impl.155" }
%"class.std::__uniq_ptr_impl.155" = type { %"class.std::tuple.156" }
%"class.std::tuple.156" = type { %"struct.std::_Tuple_impl.157" }
%"struct.std::_Tuple_impl.157" = type { %"struct.std::_Head_base.160" }
%"struct.std::_Head_base.160" = type { ptr }
%"class.std::vector.161" = type { %"struct.std::_Vector_base.162" }
%"struct.std::_Vector_base.162" = type { %"struct.std::_Vector_base<HIR::ValueUsage, std::allocator<HIR::ValueUsage>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::ValueUsage, std::allocator<HIR::ValueUsage>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::ValueUsage, std::allocator<HIR::ValueUsage>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::ValueUsage, std::allocator<HIR::ValueUsage>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.HIR::ExprNode" = type <{ ptr, %struct.Span, %"class.HIR::TypeRef", i32, [4 x i8] }>
%struct.TraitResolveCommon = type { ptr, ptr, ptr, %"class.std::map.71", %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.71" = type { %"class.std::_Rb_tree.72" }
%"class.std::_Rb_tree.72" = 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" }
%class.RangeVecMap = type <{ %"class.std::vector.77", [8 x i8] }>
%"class.std::vector.77" = type { %"struct.std::_Vector_base.78" }
%"struct.std::_Vector_base.78" = 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 }
%"struct.HIR::TypeData_Path" = type { %"class.HIR::Path", %"class.HIR::TypePathBinding", %"class.std::unique_ptr.127" }
%"class.HIR::TypePathBinding" = type { i32, %"union.HIR::TypePathBinding::DataUnion" }
%"union.HIR::TypePathBinding::DataUnion" = type { ptr }
%"class.HIR::Union" = type { %"class.HIR::GenericParams", i32, %"class.std::vector.397", %"struct.HIR::TraitMarkings" }
%"class.HIR::GenericParams" = type { %"class.std::vector.332", %"class.std::vector.337", %"class.std::vector.342", %"class.std::vector.347" }
%"class.std::vector.332" = type { %"struct.std::_Vector_base.333" }
%"struct.std::_Vector_base.333" = 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.337" = type { %"struct.std::_Vector_base.338" }
%"struct.std::_Vector_base.338" = 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.342" = type { %"struct.std::_Vector_base.343" }
%"struct.std::_Vector_base.343" = 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.347" = type { %"struct.std::_Vector_base.348" }
%"struct.std::_Vector_base.348" = 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.std::vector.397" = type { %"struct.std::_Vector_base.398" }
%"struct.std::_Vector_base.398" = type { %"struct.std::_Vector_base<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>, std::allocator<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>, std::allocator<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>, std::allocator<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>, std::allocator<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.HIR::TraitMarkings" = type { i8, i8, i8, %"class.std::map.362" }
%"class.std::map.362" = type { %"class.std::_Rb_tree.363" }
%"class.std::_Rb_tree.363" = 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" }
%"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::Struct::Data" = type { i32, %"union.HIR::Struct::Data::DataUnion" }
%"union.HIR::Struct::Data::DataUnion" = type { %"class.std::vector.392" }
%"class.std::vector.392" = type { %"struct.std::_Vector_base.393" }
%"struct.std::_Vector_base.393" = 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::StructMarkings" = type { i8, i32, i32, i32, i32, i32, i32, i8, i8, %class.U128 }
%class.U128 = type { i64, i64 }
%"class.HIR::Function" = type { i8, %"struct.HIR::Linkage", i32, %"class.HIR::TypeRef", %class.RcString, i8, i8, %"class.HIR::GenericParams", %"class.std::vector.93", i8, %"class.HIR::TypeRef", %"class.HIR::ExprPtr", %"struct.HIR::Function::Markings" }
%"struct.HIR::Linkage" = type { i32, %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string" }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::vector.93" = type { %"struct.std::_Vector_base.94" }
%"struct.std::_Vector_base.94" = type { %"struct.std::_Vector_base<std::pair<HIR::Pattern, HIR::TypeRef>, std::allocator<std::pair<HIR::Pattern, HIR::TypeRef>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<HIR::Pattern, HIR::TypeRef>, std::allocator<std::pair<HIR::Pattern, HIR::TypeRef>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<HIR::Pattern, HIR::TypeRef>, std::allocator<std::pair<HIR::Pattern, HIR::TypeRef>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<HIR::Pattern, HIR::TypeRef>, std::allocator<std::pair<HIR::Pattern, HIR::TypeRef>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.HIR::Function::Markings" = type { %"class.std::vector.61", i8, i32 }

@__func__._Z8LowerMIRRK18StaticTraitResolveRKN3HIR8ItemPathERKNS2_7ExprPtrERKNS2_7TypeRefERKSt6vectorISt4pairINS2_7PatternES9_ESaISF_EE = external hidden unnamed_addr constant [9 x i8], align 1
@_ZTIN3HIR8ExprNodeE = external constant ptr
@_ZTIN3HIR25ExprNode_GeneratorWrapperE = external constant ptr
@g_debug_indent_level = external global i32, align 4
@.str = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [17 x i8], align 1
@_ZTISt13runtime_error = external constant ptr
@.str.4 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [27 x i8], align 1

; Function Attrs: mustprogress uwtable
define dso_local void @_Z8LowerMIRRK18StaticTraitResolveRKN3HIR8ItemPathERKNS2_7ExprPtrERKNS2_7TypeRefERKSt6vectorISt4pairINS2_7PatternES9_ESaISF_EE(ptr dead_on_unwind noalias writable sret(%"class.MIR::FunctionPointer") align 8 %0, ptr noundef nonnull align 8 dereferenceable(424) %1, ptr noundef nonnull align 8 dereferenceable(56) %2, ptr noundef nonnull align 8 dereferenceable(72) %3, ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull align 8 dereferenceable(24) %5) #0 personality ptr @__gxx_personality_v0 {
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca %class.TraceLog, align 8
  %14 = alloca %"class.std::function", align 8
  %15 = alloca %class.anon, align 8
  %16 = alloca ptr, align 8
  %17 = alloca i32, align 4
  %18 = alloca %"class.MIR::Function", align 8
  %19 = alloca ptr, align 8
  %20 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %21 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %22 = alloca ptr, align 8
  %23 = alloca %"class.HIR::TypeRef", align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca %class.MirBuilder, align 8
  %27 = alloca %"class.(anonymous namespace)::ExprVisitor_Conv", align 8
  %28 = alloca i32, align 4
  %29 = alloca ptr, align 8
  %30 = alloca %"class.__gnu_cxx::__normal_iterator.108", align 8
  %31 = alloca %"class.__gnu_cxx::__normal_iterator.108", align 8
  %32 = alloca ptr, align 8
  %33 = alloca ptr, align 8
  %34 = alloca %"struct.MIR::LValue", align 8
  %35 = alloca ptr, align 8
  %36 = alloca %"class.std::map.148", align 8
  %37 = alloca i64, align 8
  %38 = alloca i32, align 4
  %39 = alloca %"struct.MIR::LValue", align 8
  %40 = alloca %"struct.std::pair.168", align 8
  %41 = alloca %"class.std::vector.9", align 8
  %42 = alloca %"class.MIR::LValue::Wrapper", align 4
  %43 = alloca %"struct.std::pair.166", align 8
  %44 = alloca %"class.MIR::LValue::Wrapper", align 4
  %45 = alloca %"class.std::vector.32", align 8
  %46 = alloca %"class.MIR::Param", align 8
  %47 = alloca %"class.HIR::GenericPath", align 8
  %48 = alloca %"struct.MIR::LValue", align 8
  %49 = alloca %"class.std::function.170", align 8
  %50 = alloca %class.anon.173, align 8
  %51 = alloca %"class.MIR::RValue", align 8
  %52 = alloca %"struct.MIR::RValue::Data_EnumVariant", align 8
  %53 = alloca %"class.std::set", align 8
  %54 = alloca ptr, align 8
  %55 = alloca i32, align 4
  %56 = alloca ptr, align 8
  %57 = alloca %"class.__gnu_cxx::__normal_iterator.402", align 8
  %58 = alloca %"class.__gnu_cxx::__normal_iterator.402", align 8
  %59 = alloca %"class.__gnu_cxx::__normal_iterator.402", align 8
  %60 = alloca %class.anon.403, align 1
  %61 = alloca %"class.__gnu_cxx::__normal_iterator.402", align 8
  %62 = alloca %struct.Span, align 8
  %63 = alloca %"class.std::function", align 8
  %64 = alloca %class.anon.404, align 1
  %65 = alloca ptr, align 8
  %66 = alloca ptr, align 8
  %67 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %68 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %69 = alloca i32, align 4
  %70 = alloca i64, align 8
  %71 = alloca %struct.Span, align 8
  %72 = alloca %"class.std::function", align 8
  %73 = alloca %class.anon.407, align 8
  %74 = alloca %"struct.HIR::VisEnt", align 8
  %75 = alloca %"struct.std::pair.168", align 8
  %76 = alloca %"class.std::vector.9", align 8
  %77 = alloca %"class.std::initializer_list", align 8
  %78 = alloca [4 x %"class.MIR::LValue::Wrapper"], align 4
  %79 = alloca %"class.std::allocator.11", align 1
  %80 = alloca %"struct.std::pair.166", align 8
  %81 = alloca %class.Rewriter, align 8
  %82 = alloca %"class.MIR::FunctionPointer", align 8
  %83 = alloca %class.TraceLog, align 8
  %84 = alloca %"class.std::function", align 8
  %85 = alloca %class.anon.416, align 1
  %86 = alloca %class.MirBuilder, align 8
  %87 = alloca %"class.HIR::TypeRef", align 8
  store ptr %0, ptr %7, align 8
  store ptr %1, ptr %8, align 8, !tbaa !5
  store ptr %2, ptr %9, align 8, !tbaa !5
  store ptr %3, ptr %10, align 8, !tbaa !5
  store ptr %4, ptr %11, align 8, !tbaa !5
  store ptr %5, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 40, ptr %13) #11
  %88 = call noundef zeroext i1 @_Z13debug_enabledv()
  %89 = zext i1 %88 to i64
  %90 = select i1 %88, ptr @__func__._Z8LowerMIRRK18StaticTraitResolveRKN3HIR8ItemPathERKNS2_7ExprPtrERKNS2_7TypeRefERKSt6vectorISt4pairINS2_7PatternES9_ESaISF_EE, ptr null
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #11
  %91 = getelementptr inbounds %class.anon, ptr %15, i32 0, i32 0
  %92 = load ptr, ptr %9, align 8, !tbaa !5
  store ptr %92, ptr %91, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ8LowerMIRRK18StaticTraitResolveRKN3HIR8ItemPathERKNS7_7ExprPtrERKNS7_7TypeRefERKSt6vectorISt4pairINS7_7PatternESE_ESaISK_EEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %14, ptr noundef nonnull align 8 dereferenceable(8) %15) #11
  invoke void @_ZN8TraceLogC1EPKcSt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(40) %13, ptr noundef %90, ptr noundef %14)
          to label %93 unwind label %111

93:                                               ; preds = %6
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #11
  call void @llvm.lifetime.start.p0(i64 96, ptr %18) #11
  invoke void @_ZN3MIR8FunctionC2Ev(ptr noundef nonnull align 8 dereferenceable(96) %18)
          to label %94 unwind label %115

94:                                               ; preds = %93
  %95 = getelementptr inbounds %"class.MIR::Function", ptr %18, i32 0, i32 0
  %96 = load ptr, ptr %10, align 8, !tbaa !5
  %97 = getelementptr inbounds %"class.HIR::ExprPtr", ptr %96, i32 0, i32 1
  %98 = call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %97) #11
  invoke void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24) %95, i64 noundef %98)
          to label %99 unwind label %119

99:                                               ; preds = %94
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #11
  %100 = load ptr, ptr %10, align 8, !tbaa !5
  %101 = getelementptr inbounds %"class.HIR::ExprPtr", ptr %100, i32 0, i32 1
  store ptr %101, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #11
  %102 = load ptr, ptr %19, align 8, !tbaa !5
  %103 = call ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %102) #11
  %104 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %20, i32 0, i32 0
  store ptr %103, ptr %104, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #11
  %105 = load ptr, ptr %19, align 8, !tbaa !5
  %106 = call ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %105) #11
  %107 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %21, i32 0, i32 0
  store ptr %106, ptr %107, align 8
  br label %108

108:                                              ; preds = %129, %99
  %109 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %20, ptr noundef nonnull align 8 dereferenceable(8) %21) #11
  br i1 %109, label %123, label %110

110:                                              ; preds = %108
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #11
  br label %140

111:                                              ; preds = %6
  %112 = landingpad { ptr, i32 }
          cleanup
  %113 = extractvalue { ptr, i32 } %112, 0
  store ptr %113, ptr %16, align 8
  %114 = extractvalue { ptr, i32 } %112, 1
  store i32 %114, ptr %17, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #11
  br label %847

115:                                              ; preds = %93
  %116 = landingpad { ptr, i32 }
          cleanup
  %117 = extractvalue { ptr, i32 } %116, 0
  store ptr %117, ptr %16, align 8
  %118 = extractvalue { ptr, i32 } %116, 1
  store i32 %118, ptr %17, align 4
  br label %846

119:                                              ; preds = %839, %836, %827, %821, %813, %94
  %120 = landingpad { ptr, i32 }
          cleanup
  %121 = extractvalue { ptr, i32 } %120, 0
  store ptr %121, ptr %16, align 8
  %122 = extractvalue { ptr, i32 } %120, 1
  store i32 %122, ptr %17, align 4
  br label %845

123:                                              ; preds = %108
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #11
  %124 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %20) #11
  store ptr %124, ptr %22, align 8, !tbaa !5
  %125 = getelementptr inbounds %"class.MIR::Function", ptr %18, i32 0, i32 0
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #11
  %126 = load ptr, ptr %22, align 8, !tbaa !5
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %23, ptr noundef nonnull align 8 dereferenceable(8) %126)
          to label %127 unwind label %131

127:                                              ; preds = %123
  invoke void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %125, ptr noundef nonnull align 8 dereferenceable(8) %23)
          to label %128 unwind label %135

128:                                              ; preds = %127
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %23) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #11
  br label %129

129:                                              ; preds = %128
  %130 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %20) #11
  br label %108

131:                                              ; preds = %123
  %132 = landingpad { ptr, i32 }
          cleanup
  %133 = extractvalue { ptr, i32 } %132, 0
  store ptr %133, ptr %16, align 8
  %134 = extractvalue { ptr, i32 } %132, 1
  store i32 %134, ptr %17, align 4
  br label %139

135:                                              ; preds = %127
  %136 = landingpad { ptr, i32 }
          cleanup
  %137 = extractvalue { ptr, i32 } %136, 0
  store ptr %137, ptr %16, align 8
  %138 = extractvalue { ptr, i32 } %136, 1
  store i32 %138, ptr %17, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %23) #11
  br label %139

139:                                              ; preds = %135, %131
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #11
  br label %845

140:                                              ; preds = %110
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #11
  %141 = load ptr, ptr %10, align 8, !tbaa !5
  %142 = invoke noundef ptr @_ZNK3HIR7ExprPtrptEv(ptr noundef nonnull align 8 dereferenceable(72) %141)
          to label %143 unwind label %164

143:                                              ; preds = %140
  %144 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8ExprNode4spanEv(ptr noundef nonnull align 8 dereferenceable(28) %142)
          to label %145 unwind label %164

145:                                              ; preds = %143
  store ptr %144, ptr %24, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #11
  %146 = load ptr, ptr %10, align 8, !tbaa !5
  %147 = invoke noundef nonnull align 8 dereferenceable(28) ptr @_ZNK3HIR7ExprPtrdeEv(ptr noundef nonnull align 8 dereferenceable(72) %146)
          to label %148 unwind label %168

148:                                              ; preds = %145
  store ptr %147, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 440, ptr %26) #11
  %149 = load ptr, ptr %10, align 8, !tbaa !5
  %150 = invoke noundef ptr @_ZNK3HIR7ExprPtrptEv(ptr noundef nonnull align 8 dereferenceable(72) %149)
          to label %151 unwind label %172

151:                                              ; preds = %148
  %152 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8ExprNode4spanEv(ptr noundef nonnull align 8 dereferenceable(28) %150)
          to label %153 unwind label %172

153:                                              ; preds = %151
  %154 = load ptr, ptr %8, align 8, !tbaa !5
  %155 = load ptr, ptr %11, align 8, !tbaa !5
  %156 = load ptr, ptr %12, align 8, !tbaa !5
  invoke void @_ZN10MirBuilderC1ERK4SpanRK18StaticTraitResolveRKN3HIR7TypeRefERKSt6vectorISt4pairINS6_7PatternES7_ESaISD_EERN3MIR8FunctionE(ptr noundef nonnull align 8 dereferenceable(440) %26, ptr noundef nonnull align 8 dereferenceable(8) %152, ptr noundef nonnull align 8 dereferenceable(424) %154, ptr noundef nonnull align 8 dereferenceable(8) %155, ptr noundef nonnull align 8 dereferenceable(24) %156, ptr noundef nonnull align 8 dereferenceable(96) %18)
          to label %157 unwind label %172

157:                                              ; preds = %153
  call void @llvm.lifetime.start.p0(i64 128, ptr %27) #11
  %158 = load ptr, ptr %10, align 8, !tbaa !5
  %159 = getelementptr inbounds %"class.HIR::ExprPtr", ptr %158, i32 0, i32 1
  %160 = load ptr, ptr %25, align 8, !tbaa !5
  %161 = icmp eq ptr %160, null
  br i1 %161, label %176, label %162

162:                                              ; preds = %157
  %163 = call ptr @__dynamic_cast(ptr %160, ptr @_ZTIN3HIR8ExprNodeE, ptr @_ZTIN3HIR25ExprNode_GeneratorWrapperE, i64 0) #11
  br label %177

164:                                              ; preds = %143, %140
  %165 = landingpad { ptr, i32 }
          cleanup
  %166 = extractvalue { ptr, i32 } %165, 0
  store ptr %166, ptr %16, align 8
  %167 = extractvalue { ptr, i32 } %165, 1
  store i32 %167, ptr %17, align 4
  br label %835

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

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

176:                                              ; preds = %157
  br label %177

177:                                              ; preds = %176, %162
  %178 = phi ptr [ %163, %162 ], [ null, %176 ]
  invoke void @_ZN12_GLOBAL__N_116ExprVisitor_ConvC2ER10MirBuilderRKSt6vectorIN3HIR7TypeRefESaIS5_EEPKNS4_25ExprNode_GeneratorWrapperE(ptr noundef nonnull align 8 dereferenceable(128) %27, ptr noundef nonnull align 8 dereferenceable(440) %26, ptr noundef nonnull align 8 dereferenceable(24) %159, ptr noundef %178)
          to label %179 unwind label %190

179:                                              ; preds = %177
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #11
  store i32 0, ptr %28, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #11
  %180 = load ptr, ptr %12, align 8, !tbaa !5
  store ptr %180, ptr %29, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #11
  %181 = load ptr, ptr %29, align 8, !tbaa !5
  %182 = call ptr @_ZNKSt6vectorISt4pairIN3HIR7PatternENS1_7TypeRefEESaIS4_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %181) #11
  %183 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.108", ptr %30, i32 0, i32 0
  store ptr %182, ptr %183, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #11
  %184 = load ptr, ptr %29, align 8, !tbaa !5
  %185 = call ptr @_ZNKSt6vectorISt4pairIN3HIR7PatternENS1_7TypeRefEESaIS4_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %184) #11
  %186 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.108", ptr %31, i32 0, i32 0
  store ptr %185, ptr %186, align 8
  br label %187

187:                                              ; preds = %269, %179
  %188 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKSt4pairIN3HIR7PatternENS2_7TypeRefEESt6vectorIS5_SaIS5_EEEEbRKNS_17__normal_iteratorIT_T0_EESG_(ptr noundef nonnull align 8 dereferenceable(8) %30, ptr noundef nonnull align 8 dereferenceable(8) %31) #11
  br i1 %188, label %194, label %189

189:                                              ; preds = %187
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #11
  br label %272

190:                                              ; preds = %177
  %191 = landingpad { ptr, i32 }
          cleanup
  %192 = extractvalue { ptr, i32 } %191, 0
  store ptr %192, ptr %16, align 8
  %193 = extractvalue { ptr, i32 } %191, 1
  store i32 %193, ptr %17, align 4
  br label %832

194:                                              ; preds = %187
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #11
  %195 = call noundef nonnull align 8 dereferenceable(224) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKSt4pairIN3HIR7PatternENS2_7TypeRefEESt6vectorIS5_SaIS5_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %30) #11
  store ptr %195, ptr %32, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #11
  %196 = load ptr, ptr %32, align 8, !tbaa !5
  %197 = getelementptr inbounds %"struct.std::pair", ptr %196, i32 0, i32 0
  store ptr %197, ptr %33, align 8, !tbaa !5
  %198 = load ptr, ptr %33, align 8, !tbaa !5
  %199 = getelementptr inbounds %"struct.HIR::Pattern", ptr %198, i32 0, i32 0
  %200 = call noundef i64 @_ZNKSt6vectorIN3HIR14PatternBindingESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %199) #11
  %201 = icmp eq i64 %200, 1
  br i1 %201, label %202, label %219

202:                                              ; preds = %194
  %203 = load ptr, ptr %33, align 8, !tbaa !5
  %204 = getelementptr inbounds %"struct.HIR::Pattern", ptr %203, i32 0, i32 0
  %205 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNKSt6vectorIN3HIR14PatternBindingESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %204, i64 noundef 0) #11
  %206 = getelementptr inbounds %"struct.HIR::PatternBinding", ptr %205, i32 0, i32 1
  %207 = load i32, ptr %206, align 4, !tbaa !11
  %208 = icmp eq i32 %207, 0
  br i1 %208, label %209, label %219

209:                                              ; preds = %202
  %210 = load ptr, ptr %33, align 8, !tbaa !5
  %211 = getelementptr inbounds %"struct.HIR::Pattern", ptr %210, i32 0, i32 1
  %212 = invoke noundef zeroext i1 @_ZNK3HIR7Pattern4Data6is_AnyEv(ptr noundef nonnull align 8 dereferenceable(184) %211)
          to label %213 unwind label %215

213:                                              ; preds = %209
  br i1 %212, label %214, label %219

214:                                              ; preds = %213
  br label %266

215:                                              ; preds = %256, %254, %251, %248, %246, %243, %238, %236, %233, %231, %228, %226, %223, %220, %209
  %216 = landingpad { ptr, i32 }
          cleanup
  %217 = extractvalue { ptr, i32 } %216, 0
  store ptr %217, ptr %16, align 8
  %218 = extractvalue { ptr, i32 } %216, 1
  store i32 %218, ptr %17, align 4
  br label %271

219:                                              ; preds = %213, %202, %194
  br label %220

220:                                              ; preds = %219
  %221 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %222 unwind label %215

222:                                              ; preds = %220
  br i1 %221, label %223, label %241

223:                                              ; preds = %222
  %224 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %225 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %224, ptr noundef @__func__._Z8LowerMIRRK18StaticTraitResolveRKN3HIR8ItemPathERKNS2_7ExprPtrERKNS2_7TypeRefERKSt6vectorISt4pairINS2_7PatternES9_ESaISF_EE)
          to label %226 unwind label %215

226:                                              ; preds = %223
  %227 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %225, ptr noundef @.str)
          to label %228 unwind label %215

228:                                              ; preds = %226
  %229 = load i32, ptr %28, align 4, !tbaa !9
  %230 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %227, i32 noundef %229)
          to label %231 unwind label %215

231:                                              ; preds = %228
  %232 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %230, ptr noundef @.str.1)
          to label %233 unwind label %215

233:                                              ; preds = %231
  %234 = load ptr, ptr %33, align 8, !tbaa !5
  %235 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIRlsERSoRKNS_7PatternE(ptr noundef nonnull align 8 dereferenceable(8) %232, ptr noundef nonnull align 8 dereferenceable(212) %234)
          to label %236 unwind label %215

236:                                              ; preds = %233
  %237 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %235, ptr noundef @_ZSt3decRSt8ios_base)
          to label %238 unwind label %215

238:                                              ; preds = %236
  %239 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %237, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %240 unwind label %215

240:                                              ; preds = %238
  br label %241

241:                                              ; preds = %240, %222
  br label %242

242:                                              ; preds = %241
  br label %243

243:                                              ; preds = %242
  %244 = load ptr, ptr %10, align 8, !tbaa !5
  %245 = invoke noundef ptr @_ZNK3HIR7ExprPtrptEv(ptr noundef nonnull align 8 dereferenceable(72) %244)
          to label %246 unwind label %215

246:                                              ; preds = %243
  %247 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8ExprNode4spanEv(ptr noundef nonnull align 8 dereferenceable(28) %245)
          to label %248 unwind label %215

248:                                              ; preds = %246
  %249 = load ptr, ptr %32, align 8, !tbaa !5
  %250 = getelementptr inbounds %"struct.std::pair", ptr %249, i32 0, i32 0
  invoke void @_ZN12_GLOBAL__N_116ExprVisitor_Conv16define_vars_fromERK4SpanRKN3HIR7PatternE(ptr noundef nonnull align 8 dereferenceable(128) %27, ptr noundef nonnull align 8 dereferenceable(8) %247, ptr noundef nonnull align 8 dereferenceable(212) %250)
          to label %251 unwind label %215

251:                                              ; preds = %248
  %252 = load ptr, ptr %10, align 8, !tbaa !5
  %253 = invoke noundef ptr @_ZNK3HIR7ExprPtrptEv(ptr noundef nonnull align 8 dereferenceable(72) %252)
          to label %254 unwind label %215

254:                                              ; preds = %251
  %255 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8ExprNode4spanEv(ptr noundef nonnull align 8 dereferenceable(28) %253)
          to label %256 unwind label %215

256:                                              ; preds = %254
  %257 = load ptr, ptr %32, align 8, !tbaa !5
  %258 = getelementptr inbounds %"struct.std::pair", ptr %257, i32 0, i32 0
  %259 = load i32, ptr %28, align 4, !tbaa !9
  invoke void @_ZN3MIR6LValue12new_ArgumentEj(ptr dead_on_unwind writable sret(%"struct.MIR::LValue") align 8 %34, i32 noundef %259)
          to label %260 unwind label %215

260:                                              ; preds = %256
  invoke void @_Z16MIR_LowerHIR_LetR10MirBuilderR12MirConverterRK4SpanRKN3HIR7PatternEN3MIR6LValueEPKNS6_8ExprNodeE(ptr noundef nonnull align 8 dereferenceable(440) %26, ptr noundef nonnull align 8 dereferenceable(8) %27, ptr noundef nonnull align 8 dereferenceable(8) %255, ptr noundef nonnull align 8 dereferenceable(212) %258, ptr noundef %34, ptr noundef null)
          to label %261 unwind label %262

261:                                              ; preds = %260
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #11
  br label %266

262:                                              ; preds = %260
  %263 = landingpad { ptr, i32 }
          cleanup
  %264 = extractvalue { ptr, i32 } %263, 0
  store ptr %264, ptr %16, align 8
  %265 = extractvalue { ptr, i32 } %263, 1
  store i32 %265, ptr %17, align 4
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #11
  br label %271

266:                                              ; preds = %261, %214
  %267 = load i32, ptr %28, align 4, !tbaa !9
  %268 = add i32 %267, 1
  store i32 %268, ptr %28, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #11
  br label %269

269:                                              ; preds = %266
  %270 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairIN3HIR7PatternENS2_7TypeRefEESt6vectorIS5_SaIS5_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %30) #11
  br label %187

271:                                              ; preds = %262, %215
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #11
  br label %831

272:                                              ; preds = %189
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #11
  %273 = load ptr, ptr %25, align 8, !tbaa !5
  %274 = icmp eq ptr %273, null
  br i1 %274, label %277, label %275

275:                                              ; preds = %272
  %276 = call ptr @__dynamic_cast(ptr %273, ptr @_ZTIN3HIR8ExprNodeE, ptr @_ZTIN3HIR25ExprNode_GeneratorWrapperE, i64 0) #11
  br label %278

277:                                              ; preds = %272
  br label %278

278:                                              ; preds = %277, %275
  %279 = phi ptr [ %276, %275 ], [ null, %277 ]
  store ptr %279, ptr %35, align 8, !tbaa !5
  %280 = load ptr, ptr %35, align 8, !tbaa !5
  %281 = icmp ne ptr %280, null
  br i1 %281, label %282, label %802

282:                                              ; preds = %278
  call void @llvm.lifetime.start.p0(i64 48, ptr %36) #11
  call void @_ZNSt3mapIjSt6vectorIN3MIR6LValue7WrapperESaIS3_EESt4lessIjESaISt4pairIKjS5_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %36) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #11
  store i64 0, ptr %37, align 8, !tbaa !16
  br label %283

283:                                              ; preds = %363, %282
  %284 = load i64, ptr %37, align 8, !tbaa !16
  %285 = load ptr, ptr %35, align 8, !tbaa !5
  %286 = getelementptr inbounds %"struct.HIR::ExprNode_GeneratorWrapper", ptr %285, i32 0, i32 9
  %287 = call noundef i64 @_ZNKSt6vectorIN3HIR10ValueUsageESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %286) #11
  %288 = icmp ult i64 %284, %287
  br i1 %288, label %290, label %289

289:                                              ; preds = %283
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #11
  br label %367

290:                                              ; preds = %283
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #11
  %291 = load ptr, ptr %12, align 8, !tbaa !5
  %292 = call noundef i64 @_ZNKSt6vectorISt4pairIN3HIR7PatternENS1_7TypeRefEESaIS4_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %291) #11
  %293 = load i64, ptr %37, align 8, !tbaa !16
  %294 = add i64 %292, %293
  %295 = trunc i64 %294 to i32
  store i32 %295, ptr %38, align 4, !tbaa !9
  %296 = load i32, ptr %38, align 4, !tbaa !9
  invoke void @_ZN10MirBuilder15define_variableEj(ptr noundef nonnull align 8 dereferenceable(440) %26, i32 noundef %296)
          to label %297 unwind label %323

297:                                              ; preds = %290
  %298 = load ptr, ptr %25, align 8, !tbaa !5
  %299 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8ExprNode4spanEv(ptr noundef nonnull align 8 dereferenceable(28) %298)
          to label %300 unwind label %323

300:                                              ; preds = %297
  call void @llvm.lifetime.start.p0(i64 32, ptr %39) #11
  %301 = load i32, ptr %38, align 4, !tbaa !9
  invoke void @_ZN3MIR6LValue9new_LocalEj(ptr dead_on_unwind writable sret(%"struct.MIR::LValue") align 8 %39, i32 noundef %301)
          to label %302 unwind label %327

302:                                              ; preds = %300
  invoke void @_ZN10MirBuilder19mark_value_assignedERK4SpanRKN3MIR6LValueE(ptr noundef nonnull align 8 dereferenceable(440) %26, ptr noundef nonnull align 8 dereferenceable(8) %299, ptr noundef nonnull align 8 dereferenceable(32) %39)
          to label %303 unwind label %331

303:                                              ; preds = %302
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %39) #11
  call void @llvm.lifetime.start.p0(i64 32, ptr %40) #11
  call void @llvm.lifetime.start.p0(i64 24, ptr %41) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #11
  %304 = load i64, ptr %37, align 8, !tbaa !16
  %305 = add i64 1, %304
  %306 = trunc i64 %305 to i32
  %307 = invoke i32 @_ZN3MIR6LValue7Wrapper9new_FieldEj(i32 noundef %306)
          to label %308 unwind label %336

308:                                              ; preds = %303
  %309 = getelementptr inbounds %"class.MIR::LValue::Wrapper", ptr %42, i32 0, i32 0
  store i32 %307, ptr %309, align 4
  invoke void @_Z9make_vec1IN3MIR6LValue7WrapperEESt6vectorIT_SaIS4_EEOS4_(ptr dead_on_unwind writable sret(%"class.std::vector.9") align 8 %41, ptr noundef nonnull align 4 dereferenceable(4) %42)
          to label %310 unwind label %336

310:                                              ; preds = %308
  invoke void @_ZSt9make_pairIRjSt6vectorIN3MIR6LValue7WrapperESaIS4_EEESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS8_INS9_IT0_E4typeEE6__typeEEOSA_OSF_(ptr dead_on_unwind writable sret(%"struct.std::pair.168") align 8 %40, ptr noundef nonnull align 4 dereferenceable(4) %38, ptr noundef nonnull align 8 dereferenceable(24) %41)
          to label %311 unwind label %340

311:                                              ; preds = %310
  %312 = invoke { ptr, i8 } @_ZNSt3mapIjSt6vectorIN3MIR6LValue7WrapperESaIS3_EESt4lessIjESaISt4pairIKjS5_EEE6insertIS8_IjS5_EEENSt9enable_ifIXsr16is_constructibleISA_T_EE5valueES8_ISt17_Rb_tree_iteratorISA_EbEE4typeEOSG_(ptr noundef nonnull align 8 dereferenceable(48) %36, ptr noundef nonnull align 8 dereferenceable(32) %40)
          to label %313 unwind label %344

313:                                              ; preds = %311
  %314 = getelementptr inbounds { ptr, i8 }, ptr %43, i32 0, i32 0
  %315 = extractvalue { ptr, i8 } %312, 0
  store ptr %315, ptr %314, align 8
  %316 = getelementptr inbounds { ptr, i8 }, ptr %43, i32 0, i32 1
  %317 = extractvalue { ptr, i8 } %312, 1
  store i8 %317, ptr %316, align 8
  call void @_ZNSt4pairIjSt6vectorIN3MIR6LValue7WrapperESaIS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #11
  call void @_ZNSt6vectorIN3MIR6LValue7WrapperESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %41) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %41) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %40) #11
  %318 = load ptr, ptr %35, align 8, !tbaa !5
  %319 = getelementptr inbounds %"struct.HIR::ExprNode_GeneratorWrapper", ptr %318, i32 0, i32 9
  %320 = load i64, ptr %37, align 8, !tbaa !16
  %321 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIN3HIR10ValueUsageESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %319, i64 noundef %320) #11
  %322 = load i32, ptr %321, align 4, !tbaa !18
  switch i32 %322, label %362 [
    i32 1, label %350
    i32 2, label %350
    i32 3, label %361
    i32 0, label %361
  ]

323:                                              ; preds = %350, %297, %290
  %324 = landingpad { ptr, i32 }
          cleanup
  %325 = extractvalue { ptr, i32 } %324, 0
  store ptr %325, ptr %16, align 8
  %326 = extractvalue { ptr, i32 } %324, 1
  store i32 %326, ptr %17, align 4
  br label %366

327:                                              ; preds = %300
  %328 = landingpad { ptr, i32 }
          cleanup
  %329 = extractvalue { ptr, i32 } %328, 0
  store ptr %329, ptr %16, align 8
  %330 = extractvalue { ptr, i32 } %328, 1
  store i32 %330, ptr %17, align 4
  br label %335

331:                                              ; preds = %302
  %332 = landingpad { ptr, i32 }
          cleanup
  %333 = extractvalue { ptr, i32 } %332, 0
  store ptr %333, ptr %16, align 8
  %334 = extractvalue { ptr, i32 } %332, 1
  store i32 %334, ptr %17, align 4
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #11
  br label %335

335:                                              ; preds = %331, %327
  call void @llvm.lifetime.end.p0(i64 32, ptr %39) #11
  br label %366

336:                                              ; preds = %308, %303
  %337 = landingpad { ptr, i32 }
          cleanup
  %338 = extractvalue { ptr, i32 } %337, 0
  store ptr %338, ptr %16, align 8
  %339 = extractvalue { ptr, i32 } %337, 1
  store i32 %339, ptr %17, align 4
  br label %349

340:                                              ; preds = %310
  %341 = landingpad { ptr, i32 }
          cleanup
  %342 = extractvalue { ptr, i32 } %341, 0
  store ptr %342, ptr %16, align 8
  %343 = extractvalue { ptr, i32 } %341, 1
  store i32 %343, ptr %17, align 4
  br label %348

344:                                              ; preds = %311
  %345 = landingpad { ptr, i32 }
          cleanup
  %346 = extractvalue { ptr, i32 } %345, 0
  store ptr %346, ptr %16, align 8
  %347 = extractvalue { ptr, i32 } %345, 1
  store i32 %347, ptr %17, align 4
  call void @_ZNSt4pairIjSt6vectorIN3MIR6LValue7WrapperESaIS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #11
  br label %348

348:                                              ; preds = %344, %340
  call void @_ZNSt6vectorIN3MIR6LValue7WrapperESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %41) #11
  br label %349

349:                                              ; preds = %348, %336
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %41) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %40) #11
  br label %366

350:                                              ; preds = %313, %313
  %351 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt3mapIjSt6vectorIN3MIR6LValue7WrapperESaIS3_EESt4lessIjESaISt4pairIKjS5_EEEixERS9_(ptr noundef nonnull align 8 dereferenceable(48) %36, ptr noundef nonnull align 4 dereferenceable(4) %38)
          to label %352 unwind label %323

352:                                              ; preds = %350
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #11
  %353 = invoke i32 @_ZN3MIR6LValue7Wrapper9new_DerefEv()
          to label %354 unwind label %357

354:                                              ; preds = %352
  %355 = getelementptr inbounds %"class.MIR::LValue::Wrapper", ptr %44, i32 0, i32 0
  store i32 %353, ptr %355, align 4
  invoke void @_ZNSt6vectorIN3MIR6LValue7WrapperESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %351, ptr noundef nonnull align 4 dereferenceable(4) %44)
          to label %356 unwind label %357

356:                                              ; preds = %354
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #11
  br label %362

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

361:                                              ; preds = %313, %313
  br label %362

362:                                              ; preds = %361, %356, %313
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #11
  br label %363

363:                                              ; preds = %362
  %364 = load i64, ptr %37, align 8, !tbaa !16
  %365 = add i64 %364, 1
  store i64 %365, ptr %37, align 8, !tbaa !16
  br label %283, !llvm.loop !20

366:                                              ; preds = %357, %349, %335, %323
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #11
  br label %801

367:                                              ; preds = %289
  %368 = load ptr, ptr %35, align 8, !tbaa !5
  %369 = getelementptr inbounds %"struct.HIR::ExprNode_GeneratorWrapper", ptr %368, i32 0, i32 3
  %370 = call noundef ptr @_ZNKSt10unique_ptrIN3HIR8ExprNodeESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %369) #11
  %371 = load ptr, ptr %370, align 8, !tbaa !22
  %372 = getelementptr inbounds ptr, ptr %371, i64 0
  %373 = load ptr, ptr %372, align 8
  invoke void %373(ptr noundef nonnull align 8 dereferenceable(28) %370, ptr noundef nonnull align 8 dereferenceable(8) %27)
          to label %374 unwind label %402

374:                                              ; preds = %367
  %375 = invoke noundef zeroext i1 @_ZNK10MirBuilder12block_activeEv(ptr noundef nonnull align 8 dereferenceable(440) %26)
          to label %376 unwind label %402

376:                                              ; preds = %374
  br i1 %375, label %377, label %444

377:                                              ; preds = %376
  %378 = invoke noundef zeroext i1 @_ZNK10MirBuilder10has_resultEv(ptr noundef nonnull align 8 dereferenceable(440) %26)
          to label %379 unwind label %402

379:                                              ; preds = %377
  br i1 %378, label %380, label %444

380:                                              ; preds = %379
  call void @llvm.lifetime.start.p0(i64 24, ptr %45) #11
  call void @_ZNSt6vectorIN3MIR5ParamESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %45) #11
  call void @llvm.lifetime.start.p0(i64 48, ptr %46) #11
  %381 = load ptr, ptr %24, align 8, !tbaa !5
  %382 = load ptr, ptr %35, align 8, !tbaa !5
  %383 = getelementptr inbounds %"struct.HIR::ExprNode_GeneratorWrapper", ptr %382, i32 0, i32 3
  %384 = call noundef ptr @_ZNKSt10unique_ptrIN3HIR8ExprNodeESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %383) #11
  %385 = getelementptr inbounds %"class.HIR::ExprNode", ptr %384, i32 0, i32 2
  invoke void @_ZN10MirBuilder19get_result_in_paramERK4SpanRKN3HIR7TypeRefEb(ptr dead_on_unwind writable sret(%"class.MIR::Param") align 8 %46, ptr noundef nonnull align 8 dereferenceable(440) %26, ptr noundef nonnull align 8 dereferenceable(8) %381, ptr noundef nonnull align 8 dereferenceable(8) %385, i1 noundef zeroext false)
          to label %386 unwind label %406

386:                                              ; preds = %380
  invoke void @_ZNSt6vectorIN3MIR5ParamESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %45, ptr noundef nonnull align 8 dereferenceable(48) %46)
          to label %387 unwind label %410

387:                                              ; preds = %386
  call void @_ZN3MIR5ParamD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %46) #11
  call void @llvm.lifetime.end.p0(i64 48, ptr %46) #11
  call void @llvm.lifetime.start.p0(i64 32, ptr %47) #11
  invoke void @_ZN3HIR11GenericPathC1Ev(ptr noundef nonnull align 8 dereferenceable(32) %47)
          to label %388 unwind label %415

388:                                              ; preds = %387
  %389 = load ptr, ptr %24, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %48) #11
  invoke void @_ZN3MIR6LValue10new_ReturnEv(ptr dead_on_unwind writable sret(%"struct.MIR::LValue") align 8 %48)
          to label %390 unwind label %419

390:                                              ; preds = %388
  call void @llvm.lifetime.start.p0(i64 16, ptr %50) #11
  %391 = getelementptr inbounds %class.anon.173, ptr %50, i32 0, i32 0
  store ptr %47, ptr %391, align 8, !tbaa !5
  %392 = getelementptr inbounds %class.anon.173, ptr %50, i32 0, i32 1
  %393 = load ptr, ptr %24, align 8, !tbaa !5
  store ptr %393, ptr %392, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRKN3HIR7TypeRefEEEC2IZ8LowerMIRRK18StaticTraitResolveRKNS0_8ItemPathERKNS0_7ExprPtrES3_RKSt6vectorISt4pairINS0_7PatternES1_ESaISJ_EEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %49, ptr noundef nonnull align 8 dereferenceable(16) %50) #11
  invoke void @_ZNK10MirBuilder13with_val_typeERK4SpanRKN3MIR6LValueESt8functionIFvRKN3HIR7TypeRefEEEPKNS4_7WrapperE(ptr noundef nonnull align 8 dereferenceable(440) %26, ptr noundef nonnull align 8 dereferenceable(8) %389, ptr noundef nonnull align 8 dereferenceable(32) %48, ptr noundef %49, ptr noundef null)
          to label %394 unwind label %423

394:                                              ; preds = %390
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %50) #11
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %48) #11
  %395 = load ptr, ptr %24, align 8, !tbaa !5
  %396 = getelementptr inbounds %"struct.MIR::RValue::Data_EnumVariant", ptr %52, i32 0, i32 0
  invoke void @_ZN3HIR11GenericPathC2EOS0_(ptr noundef nonnull align 8 dereferenceable(32) %396, ptr noundef nonnull align 8 dereferenceable(32) %47)
          to label %397 unwind label %428

397:                                              ; preds = %394
  %398 = getelementptr inbounds %"struct.MIR::RValue::Data_EnumVariant", ptr %52, i32 0, i32 1
  store i32 1, ptr %398, align 8, !tbaa !24
  %399 = getelementptr inbounds %"struct.MIR::RValue::Data_EnumVariant", ptr %52, i32 0, i32 2
  call void @_ZNSt6vectorIN3MIR5ParamESaIS1_EEC2EOS3_(ptr noundef nonnull align 8 dereferenceable(24) %399, ptr noundef nonnull align 8 dereferenceable(24) %45) #11
  invoke void @_ZN3MIR6RValue16make_EnumVariantENS0_16Data_EnumVariantE(ptr dead_on_unwind writable sret(%"class.MIR::RValue") align 8 %51, ptr noundef %52)
          to label %400 unwind label %432

400:                                              ; preds = %397
  invoke void @_ZN10MirBuilder10set_resultERK4SpanN3MIR6RValueE(ptr noundef nonnull align 8 dereferenceable(440) %26, ptr noundef nonnull align 8 dereferenceable(8) %395, ptr noundef %51)
          to label %401 unwind label %436

401:                                              ; preds = %400
  call void @_ZN3MIR6RValueD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %51) #11
  call void @_ZN3MIR6RValue16Data_EnumVariantD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %52) #11
  call void @_ZN3HIR11GenericPathD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %47) #11
  call void @_ZNSt6vectorIN3MIR5ParamESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %45) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %45) #11
  br label %444

402:                                              ; preds = %444, %377, %374, %367
  %403 = landingpad { ptr, i32 }
          cleanup
  %404 = extractvalue { ptr, i32 } %403, 0
  store ptr %404, ptr %16, align 8
  %405 = extractvalue { ptr, i32 } %403, 1
  store i32 %405, ptr %17, align 4
  br label %801

406:                                              ; preds = %380
  %407 = landingpad { ptr, i32 }
          cleanup
  %408 = extractvalue { ptr, i32 } %407, 0
  store ptr %408, ptr %16, align 8
  %409 = extractvalue { ptr, i32 } %407, 1
  store i32 %409, ptr %17, align 4
  br label %414

410:                                              ; preds = %386
  %411 = landingpad { ptr, i32 }
          cleanup
  %412 = extractvalue { ptr, i32 } %411, 0
  store ptr %412, ptr %16, align 8
  %413 = extractvalue { ptr, i32 } %411, 1
  store i32 %413, ptr %17, align 4
  call void @_ZN3MIR5ParamD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %46) #11
  br label %414

414:                                              ; preds = %410, %406
  call void @llvm.lifetime.end.p0(i64 48, ptr %46) #11
  br label %443

415:                                              ; preds = %387
  %416 = landingpad { ptr, i32 }
          cleanup
  %417 = extractvalue { ptr, i32 } %416, 0
  store ptr %417, ptr %16, align 8
  %418 = extractvalue { ptr, i32 } %416, 1
  store i32 %418, ptr %17, align 4
  br label %442

419:                                              ; preds = %388
  %420 = landingpad { ptr, i32 }
          cleanup
  %421 = extractvalue { ptr, i32 } %420, 0
  store ptr %421, ptr %16, align 8
  %422 = extractvalue { ptr, i32 } %420, 1
  store i32 %422, ptr %17, align 4
  br label %427

423:                                              ; preds = %390
  %424 = landingpad { ptr, i32 }
          cleanup
  %425 = extractvalue { ptr, i32 } %424, 0
  store ptr %425, ptr %16, align 8
  %426 = extractvalue { ptr, i32 } %424, 1
  store i32 %426, ptr %17, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %50) #11
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #11
  br label %427

427:                                              ; preds = %423, %419
  call void @llvm.lifetime.end.p0(i64 32, ptr %48) #11
  br label %441

428:                                              ; preds = %394
  %429 = landingpad { ptr, i32 }
          cleanup
  %430 = extractvalue { ptr, i32 } %429, 0
  store ptr %430, ptr %16, align 8
  %431 = extractvalue { ptr, i32 } %429, 1
  store i32 %431, ptr %17, align 4
  br label %441

432:                                              ; preds = %397
  %433 = landingpad { ptr, i32 }
          cleanup
  %434 = extractvalue { ptr, i32 } %433, 0
  store ptr %434, ptr %16, align 8
  %435 = extractvalue { ptr, i32 } %433, 1
  store i32 %435, ptr %17, align 4
  br label %440

436:                                              ; preds = %400
  %437 = landingpad { ptr, i32 }
          cleanup
  %438 = extractvalue { ptr, i32 } %437, 0
  store ptr %438, ptr %16, align 8
  %439 = extractvalue { ptr, i32 } %437, 1
  store i32 %439, ptr %17, align 4
  call void @_ZN3MIR6RValueD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %51) #11
  br label %440

440:                                              ; preds = %436, %432
  call void @_ZN3MIR6RValue16Data_EnumVariantD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %52) #11
  br label %441

441:                                              ; preds = %440, %428, %427
  call void @_ZN3HIR11GenericPathD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #11
  br label %442

442:                                              ; preds = %441, %415
  call void @llvm.lifetime.end.p0(i64 32, ptr %47) #11
  br label %443

443:                                              ; preds = %442, %414
  call void @_ZNSt6vectorIN3MIR5ParamESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %45) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %45) #11
  br label %801

444:                                              ; preds = %401, %379, %376
  invoke void @_ZN10MirBuilder13final_cleanupEv(ptr noundef nonnull align 8 dereferenceable(440) %26)
          to label %445 unwind label %402

445:                                              ; preds = %444
  call void @llvm.lifetime.start.p0(i64 48, ptr %53) #11
  %446 = load ptr, ptr %35, align 8, !tbaa !5
  %447 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8ExprNode4spanEv(ptr noundef nonnull align 8 dereferenceable(28) %446)
          to label %448 unwind label %515

448:                                              ; preds = %445
  %449 = load ptr, ptr %8, align 8, !tbaa !5
  %450 = getelementptr inbounds i8, ptr %449, i64 8
  %451 = getelementptr inbounds %struct.TraitResolveCommon, ptr %450, i32 0, i32 0
  %452 = load ptr, ptr %451, align 8, !tbaa !37
  %453 = load ptr, ptr %24, align 8, !tbaa !5
  %454 = load ptr, ptr %35, align 8, !tbaa !5
  %455 = getelementptr inbounds %"struct.HIR::ExprNode_GeneratorWrapper", ptr %454, i32 0, i32 7
  %456 = invoke noundef nonnull align 8 dereferenceable(200) ptr @_ZNK3HIR5Crate16get_enum_by_pathERK4SpanRKNS_10SimplePathEbb(ptr noundef nonnull align 8 dereferenceable(944) %452, ptr noundef nonnull align 8 dereferenceable(8) %453, ptr noundef nonnull align 8 dereferenceable(8) %455, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %457 unwind label %515

457:                                              ; preds = %448
  invoke void @_ZN12_GLOBAL__N_116ExprVisitor_Conv18generator_finaliseERK4SpanRN3HIR4EnumE(ptr dead_on_unwind writable sret(%"class.std::set") align 8 %53, ptr noundef nonnull align 8 dereferenceable(128) %27, ptr noundef nonnull align 8 dereferenceable(8) %447, ptr noundef nonnull align 8 dereferenceable(200) %456)
          to label %458 unwind label %515

458:                                              ; preds = %457
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #11
  %459 = load ptr, ptr %35, align 8, !tbaa !5
  %460 = getelementptr inbounds %"struct.HIR::ExprNode_GeneratorWrapper", ptr %459, i32 0, i32 6
  %461 = invoke noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %460)
          to label %462 unwind label %519

462:                                              ; preds = %458
  %463 = invoke noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %461)
          to label %464 unwind label %519

464:                                              ; preds = %462
  %465 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %463, i32 0, i32 1
  %466 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR15TypePathBinding9as_StructEv(ptr noundef nonnull align 8 dereferenceable(16) %465)
          to label %467 unwind label %519

467:                                              ; preds = %464
  %468 = load ptr, ptr %466, align 8, !tbaa !5
  store ptr %468, ptr %54, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #11
  %469 = load ptr, ptr %8, align 8, !tbaa !5
  %470 = getelementptr inbounds i8, ptr %469, i64 8
  %471 = getelementptr inbounds %struct.TraitResolveCommon, ptr %470, i32 0, i32 0
  %472 = load ptr, ptr %471, align 8, !tbaa !37
  %473 = load ptr, ptr %24, align 8, !tbaa !5
  %474 = load ptr, ptr %8, align 8, !tbaa !5
  %475 = getelementptr inbounds i8, ptr %474, i64 8
  %476 = getelementptr inbounds %struct.TraitResolveCommon, ptr %475, i32 0, i32 0
  %477 = load ptr, ptr %476, align 8, !tbaa !37
  %478 = load ptr, ptr %35, align 8, !tbaa !5
  %479 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8ExprNode4spanEv(ptr noundef nonnull align 8 dereferenceable(28) %478)
          to label %480 unwind label %523

480:                                              ; preds = %467
  %481 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR5Crate18get_lang_item_pathERK4SpanPKc(ptr noundef nonnull align 8 dereferenceable(944) %477, ptr noundef nonnull align 8 dereferenceable(8) %479, ptr noundef @.str.2)
          to label %482 unwind label %523

482:                                              ; preds = %480
  %483 = invoke noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR5Crate17get_union_by_pathERK4SpanRKNS_10SimplePathE(ptr noundef nonnull align 8 dereferenceable(944) %472, ptr noundef nonnull align 8 dereferenceable(8) %473, ptr noundef nonnull align 8 dereferenceable(8) %481)
          to label %484 unwind label %523

484:                                              ; preds = %482
  store ptr %483, ptr %56, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #11
  %485 = load ptr, ptr %56, align 8, !tbaa !5
  %486 = getelementptr inbounds %"class.HIR::Union", ptr %485, i32 0, i32 2
  %487 = call ptr @_ZNKSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %486) #11
  %488 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.402", ptr %58, i32 0, i32 0
  store ptr %487, ptr %488, align 8
  %489 = load ptr, ptr %56, align 8, !tbaa !5
  %490 = getelementptr inbounds %"class.HIR::Union", ptr %489, i32 0, i32 2
  %491 = call ptr @_ZNKSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %490) #11
  %492 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.402", ptr %59, i32 0, i32 0
  store ptr %491, ptr %492, align 8
  %493 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.402", ptr %58, i32 0, i32 0
  %494 = load ptr, ptr %493, align 8
  %495 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.402", ptr %59, i32 0, i32 0
  %496 = load ptr, ptr %495, align 8
  %497 = invoke ptr @"_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKSt4pairI8RcStringN3HIR6VisEntINS4_7TypeRefEEEESt6vectorIS8_SaIS8_EEEEZ8LowerMIRRK18StaticTraitResolveRKNS4_8ItemPathERKNS4_7ExprPtrERKS6_RKSB_IS2_INS4_7PatternES6_ESaISR_EEE3$_5ET_SX_SX_T0_"(ptr %494, ptr %496)
          to label %498 unwind label %527

498:                                              ; preds = %484
  %499 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.402", ptr %57, i32 0, i32 0
  store ptr %497, ptr %499, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #11
  %500 = load ptr, ptr %56, align 8, !tbaa !5
  %501 = getelementptr inbounds %"class.HIR::Union", ptr %500, i32 0, i32 2
  %502 = call ptr @_ZNKSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %501) #11
  %503 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.402", ptr %61, i32 0, i32 0
  store ptr %502, ptr %503, align 8
  %504 = call noundef i64 @_ZN9__gnu_cxxmiIPKSt4pairI8RcStringN3HIR6VisEntINS3_7TypeRefEEEESt6vectorIS7_SaIS7_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSG_SJ_(ptr noundef nonnull align 8 dereferenceable(8) %57, ptr noundef nonnull align 8 dereferenceable(8) %61) #11
  %505 = trunc i64 %504 to i32
  store i32 %505, ptr %55, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #11
  br label %506

506:                                              ; preds = %498
  %507 = load i32, ptr %55, align 4, !tbaa !9
  %508 = icmp eq i32 %507, 1
  br i1 %508, label %549, label %509

509:                                              ; preds = %506
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #11
  %510 = load ptr, ptr %24, align 8, !tbaa !5
  invoke void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %62, ptr noundef nonnull align 8 dereferenceable(8) %510)
          to label %511 unwind label %532

511:                                              ; preds = %509
  call void @llvm.lifetime.start.p0(i64 1, ptr %64) #11
  call void @"_ZNSt8functionIFvRSoEEC2IZ8LowerMIRRK18StaticTraitResolveRKN3HIR8ItemPathERKNS7_7ExprPtrERKNS7_7TypeRefERKSt6vectorISt4pairINS7_7PatternESE_ESaISK_EEE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %63, ptr noundef nonnull align 1 dereferenceable(1) %64) #11
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %62, ptr noundef %63)
          to label %512 unwind label %536

512:                                              ; preds = %511
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %64) #11
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %62) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #11
  %513 = call ptr @__cxa_allocate_exception(i64 16) #11
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %513, ptr noundef @.str.3)
          to label %514 unwind label %541

514:                                              ; preds = %512
  invoke void @__cxa_throw(ptr %513, ptr @_ZTISt13runtime_error, ptr @_ZNSt13runtime_errorD1Ev) #12
          to label %853 unwind label %545

515:                                              ; preds = %457, %448, %445
  %516 = landingpad { ptr, i32 }
          cleanup
  %517 = extractvalue { ptr, i32 } %516, 0
  store ptr %517, ptr %16, align 8
  %518 = extractvalue { ptr, i32 } %516, 1
  store i32 %518, ptr %17, align 4
  br label %800

519:                                              ; preds = %464, %462, %458
  %520 = landingpad { ptr, i32 }
          cleanup
  %521 = extractvalue { ptr, i32 } %520, 0
  store ptr %521, ptr %16, align 8
  %522 = extractvalue { ptr, i32 } %520, 1
  store i32 %522, ptr %17, align 4
  br label %799

523:                                              ; preds = %482, %480, %467
  %524 = landingpad { ptr, i32 }
          cleanup
  %525 = extractvalue { ptr, i32 } %524, 0
  store ptr %525, ptr %16, align 8
  %526 = extractvalue { ptr, i32 } %524, 1
  store i32 %526, ptr %17, align 4
  br label %531

527:                                              ; preds = %484
  %528 = landingpad { ptr, i32 }
          cleanup
  %529 = extractvalue { ptr, i32 } %528, 0
  store ptr %529, ptr %16, align 8
  %530 = extractvalue { ptr, i32 } %528, 1
  store i32 %530, ptr %17, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #11
  br label %531

531:                                              ; preds = %527, %523
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #11
  br label %798

532:                                              ; preds = %509
  %533 = landingpad { ptr, i32 }
          cleanup
  %534 = extractvalue { ptr, i32 } %533, 0
  store ptr %534, ptr %16, align 8
  %535 = extractvalue { ptr, i32 } %533, 1
  store i32 %535, ptr %17, align 4
  br label %540

536:                                              ; preds = %511
  %537 = landingpad { ptr, i32 }
          cleanup
  %538 = extractvalue { ptr, i32 } %537, 0
  store ptr %538, ptr %16, align 8
  %539 = extractvalue { ptr, i32 } %537, 1
  store i32 %539, ptr %17, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %64) #11
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %62) #11
  br label %540

540:                                              ; preds = %536, %532
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #11
  br label %798

541:                                              ; preds = %512
  %542 = landingpad { ptr, i32 }
          cleanup
  %543 = extractvalue { ptr, i32 } %542, 0
  store ptr %543, ptr %16, align 8
  %544 = extractvalue { ptr, i32 } %542, 1
  store i32 %544, ptr %17, align 4
  call void @__cxa_free_exception(ptr %513) #11
  br label %798

545:                                              ; preds = %514
  %546 = landingpad { ptr, i32 }
          cleanup
  %547 = extractvalue { ptr, i32 } %546, 0
  store ptr %547, ptr %16, align 8
  %548 = extractvalue { ptr, i32 } %546, 1
  store i32 %548, ptr %17, align 4
  br label %798

549:                                              ; preds = %506
  br label %550

550:                                              ; preds = %549
  br label %551

551:                                              ; preds = %550
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #11
  %552 = load ptr, ptr %54, align 8, !tbaa !5
  %553 = getelementptr inbounds %"class.HIR::Struct", ptr %552, i32 0, i32 3
  %554 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3HIR6Struct4Data8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(32) %553)
          to label %555 unwind label %565

555:                                              ; preds = %551
  store ptr %554, ptr %65, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #11
  store ptr %53, ptr %66, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #11
  %556 = load ptr, ptr %66, align 8, !tbaa !5
  %557 = call ptr @_ZNKSt3setIjSt4lessIjESaIjEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %556) #11
  %558 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", ptr %67, i32 0, i32 0
  store ptr %557, ptr %558, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #11
  %559 = load ptr, ptr %66, align 8, !tbaa !5
  %560 = call ptr @_ZNKSt3setIjSt4lessIjESaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %559) #11
  %561 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", ptr %68, i32 0, i32 0
  store ptr %560, ptr %561, align 8
  br label %562

562:                                              ; preds = %694, %555
  %563 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorIjES2_(ptr noundef nonnull align 8 dereferenceable(8) %67, ptr noundef nonnull align 8 dereferenceable(8) %68) #11
  br i1 %563, label %569, label %564

564:                                              ; preds = %562
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #11
  br label %696

565:                                              ; preds = %711, %709, %707, %705, %703, %700, %697, %551
  %566 = landingpad { ptr, i32 }
          cleanup
  %567 = extractvalue { ptr, i32 } %566, 0
  store ptr %567, ptr %16, align 8
  %568 = extractvalue { ptr, i32 } %566, 1
  store i32 %568, ptr %17, align 4
  br label %797

569:                                              ; preds = %562
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #11
  %570 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt23_Rb_tree_const_iteratorIjEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %67) #11
  %571 = load i32, ptr %570, align 4, !tbaa !9
  store i32 %571, ptr %69, align 4, !tbaa !9
  %572 = load i32, ptr %69, align 4, !tbaa !9
  %573 = zext i32 %572 to i64
  %574 = load ptr, ptr %35, align 8, !tbaa !5
  %575 = getelementptr inbounds %"struct.HIR::ExprNode_GeneratorWrapper", ptr %574, i32 0, i32 9
  %576 = call noundef i64 @_ZNKSt6vectorIN3HIR10ValueUsageESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %575) #11
  %577 = add i64 1, %576
  %578 = icmp ult i64 %573, %577
  br i1 %578, label %579, label %580

579:                                              ; preds = %569
  br label %693

580:                                              ; preds = %569
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #11
  %581 = load ptr, ptr %65, align 8, !tbaa !5
  %582 = call noundef i64 @_ZNKSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %581) #11
  store i64 %582, ptr %70, align 8, !tbaa !16
  br label %583

583:                                              ; preds = %580
  %584 = load i32, ptr %69, align 4, !tbaa !9
  %585 = zext i32 %584 to i64
  %586 = getelementptr inbounds %"class.MIR::Function", ptr %18, i32 0, i32 0
  %587 = call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %586) #11
  %588 = icmp ult i64 %585, %587
  br i1 %588, label %614, label %589

589:                                              ; preds = %583
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #11
  %590 = load ptr, ptr %24, align 8, !tbaa !5
  invoke void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %71, ptr noundef nonnull align 8 dereferenceable(8) %590)
          to label %591 unwind label %597

591:                                              ; preds = %589
  call void @llvm.lifetime.start.p0(i64 16, ptr %73) #11
  %592 = getelementptr inbounds %class.anon.407, ptr %73, i32 0, i32 0
  store ptr %69, ptr %592, align 8, !tbaa !5
  %593 = getelementptr inbounds %class.anon.407, ptr %73, i32 0, i32 1
  store ptr %18, ptr %593, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ8LowerMIRRK18StaticTraitResolveRKN3HIR8ItemPathERKNS7_7ExprPtrERKNS7_7TypeRefERKSt6vectorISt4pairINS7_7PatternESE_ESaISK_EEE3$_3vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %72, ptr noundef nonnull align 8 dereferenceable(16) %73) #11
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %71, ptr noundef %72)
          to label %594 unwind label %601

594:                                              ; preds = %591
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %72) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %73) #11
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %71) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #11
  %595 = call ptr @__cxa_allocate_exception(i64 16) #11
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %595, ptr noundef @.str.3)
          to label %596 unwind label %606

596:                                              ; preds = %594
  invoke void @__cxa_throw(ptr %595, ptr @_ZTISt13runtime_error, ptr @_ZNSt13runtime_errorD1Ev) #12
          to label %853 unwind label %610

597:                                              ; preds = %589
  %598 = landingpad { ptr, i32 }
          cleanup
  %599 = extractvalue { ptr, i32 } %598, 0
  store ptr %599, ptr %16, align 8
  %600 = extractvalue { ptr, i32 } %598, 1
  store i32 %600, ptr %17, align 4
  br label %605

601:                                              ; preds = %591
  %602 = landingpad { ptr, i32 }
          cleanup
  %603 = extractvalue { ptr, i32 } %602, 0
  store ptr %603, ptr %16, align 8
  %604 = extractvalue { ptr, i32 } %602, 1
  store i32 %604, ptr %17, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %72) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %73) #11
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %71) #11
  br label %605

605:                                              ; preds = %601, %597
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #11
  br label %692

606:                                              ; preds = %594
  %607 = landingpad { ptr, i32 }
          cleanup
  %608 = extractvalue { ptr, i32 } %607, 0
  store ptr %608, ptr %16, align 8
  %609 = extractvalue { ptr, i32 } %607, 1
  store i32 %609, ptr %17, align 4
  call void @__cxa_free_exception(ptr %595) #11
  br label %692

610:                                              ; preds = %596
  %611 = landingpad { ptr, i32 }
          cleanup
  %612 = extractvalue { ptr, i32 } %611, 0
  store ptr %612, ptr %16, align 8
  %613 = extractvalue { ptr, i32 } %611, 1
  store i32 %613, ptr %17, align 4
  br label %692

614:                                              ; preds = %583
  br label %615

615:                                              ; preds = %614
  br label %616

616:                                              ; preds = %615
  %617 = load ptr, ptr %65, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %74) #11
  %618 = getelementptr inbounds %"struct.HIR::VisEnt", ptr %74, i32 0, i32 0
  invoke void @_ZN3HIR9Publicity8new_noneEv(ptr dead_on_unwind writable sret(%"class.HIR::Publicity") align 8 %618)
          to label %619 unwind label %660

619:                                              ; preds = %616
  %620 = getelementptr inbounds %"struct.HIR::VisEnt", ptr %74, i32 0, i32 1
  %621 = getelementptr inbounds %"class.MIR::Function", ptr %18, i32 0, i32 0
  %622 = load i32, ptr %69, align 4, !tbaa !9
  %623 = zext i32 %622 to i64
  %624 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %621, i64 noundef %623)
          to label %625 unwind label %664

625:                                              ; preds = %619
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %620, ptr noundef nonnull align 8 dereferenceable(8) %624)
          to label %626 unwind label %664

626:                                              ; preds = %625
  invoke void @_ZNSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(24) %617, ptr noundef nonnull align 8 dereferenceable(24) %74)
          to label %627 unwind label %668

627:                                              ; preds = %626
  call void @_ZN3HIR6VisEntINS_7TypeRefEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %74) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %74) #11
  call void @llvm.lifetime.start.p0(i64 32, ptr %75) #11
  call void @llvm.lifetime.start.p0(i64 24, ptr %76) #11
  call void @llvm.lifetime.start.p0(i64 16, ptr %78) #11
  %628 = invoke i32 @_ZN3MIR6LValue7Wrapper9new_FieldEj(i32 noundef 0)
          to label %629 unwind label %673

629:                                              ; preds = %627
  %630 = getelementptr inbounds %"class.MIR::LValue::Wrapper", ptr %78, i32 0, i32 0
  store i32 %628, ptr %630, align 4
  %631 = getelementptr inbounds %"class.MIR::LValue::Wrapper", ptr %78, i64 1
  %632 = load i32, ptr %55, align 4, !tbaa !9
  %633 = invoke i32 @_ZN3MIR6LValue7Wrapper12new_DowncastEj(i32 noundef %632)
          to label %634 unwind label %673

634:                                              ; preds = %629
  %635 = getelementptr inbounds %"class.MIR::LValue::Wrapper", ptr %631, i32 0, i32 0
  store i32 %633, ptr %635, align 4
  %636 = getelementptr inbounds %"class.MIR::LValue::Wrapper", ptr %78, i64 2
  %637 = invoke i32 @_ZN3MIR6LValue7Wrapper9new_FieldEj(i32 noundef 0)
          to label %638 unwind label %673

638:                                              ; preds = %634
  %639 = getelementptr inbounds %"class.MIR::LValue::Wrapper", ptr %636, i32 0, i32 0
  store i32 %637, ptr %639, align 4
  %640 = getelementptr inbounds %"class.MIR::LValue::Wrapper", ptr %78, i64 3
  %641 = load i64, ptr %70, align 8, !tbaa !16
  %642 = trunc i64 %641 to i32
  %643 = invoke i32 @_ZN3MIR6LValue7Wrapper9new_FieldEj(i32 noundef %642)
          to label %644 unwind label %673

644:                                              ; preds = %638
  %645 = getelementptr inbounds %"class.MIR::LValue::Wrapper", ptr %640, i32 0, i32 0
  store i32 %643, ptr %645, align 4
  %646 = getelementptr inbounds %"class.std::initializer_list", ptr %77, i32 0, i32 0
  store ptr %78, ptr %646, align 8, !tbaa !53
  %647 = getelementptr inbounds %"class.std::initializer_list", ptr %77, i32 0, i32 1
  store i64 4, ptr %647, align 8, !tbaa !55
  call void @llvm.lifetime.start.p0(i64 1, ptr %79) #11
  call void @_ZNSaIN3MIR6LValue7WrapperEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %79) #11
  %648 = getelementptr inbounds { ptr, i64 }, ptr %77, i32 0, i32 0
  %649 = load ptr, ptr %648, align 8
  %650 = getelementptr inbounds { ptr, i64 }, ptr %77, i32 0, i32 1
  %651 = load i64, ptr %650, align 8
  invoke void @_ZNSt6vectorIN3MIR6LValue7WrapperESaIS2_EEC2ESt16initializer_listIS2_ERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %76, ptr %649, i64 %651, ptr noundef nonnull align 1 dereferenceable(1) %79)
          to label %652 unwind label %677

652:                                              ; preds = %644
  invoke void @_ZSt9make_pairIRjSt6vectorIN3MIR6LValue7WrapperESaIS4_EEESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS8_INS9_IT0_E4typeEE6__typeEEOSA_OSF_(ptr dead_on_unwind writable sret(%"struct.std::pair.168") align 8 %75, ptr noundef nonnull align 4 dereferenceable(4) %69, ptr noundef nonnull align 8 dereferenceable(24) %76)
          to label %653 unwind label %681

653:                                              ; preds = %652
  %654 = invoke { ptr, i8 } @_ZNSt3mapIjSt6vectorIN3MIR6LValue7WrapperESaIS3_EESt4lessIjESaISt4pairIKjS5_EEE6insertIS8_IjS5_EEENSt9enable_ifIXsr16is_constructibleISA_T_EE5valueES8_ISt17_Rb_tree_iteratorISA_EbEE4typeEOSG_(ptr noundef nonnull align 8 dereferenceable(48) %36, ptr noundef nonnull align 8 dereferenceable(32) %75)
          to label %655 unwind label %685

655:                                              ; preds = %653
  %656 = getelementptr inbounds { ptr, i8 }, ptr %80, i32 0, i32 0
  %657 = extractvalue { ptr, i8 } %654, 0
  store ptr %657, ptr %656, align 8
  %658 = getelementptr inbounds { ptr, i8 }, ptr %80, i32 0, i32 1
  %659 = extractvalue { ptr, i8 } %654, 1
  store i8 %659, ptr %658, align 8
  call void @_ZNSt4pairIjSt6vectorIN3MIR6LValue7WrapperESaIS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %75) #11
  call void @_ZNSt6vectorIN3MIR6LValue7WrapperESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %76) #11
  call void @_ZNSt15__new_allocatorIN3MIR6LValue7WrapperEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %79) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %79) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr %78) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %76) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %75) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #11
  br label %693

660:                                              ; preds = %616
  %661 = landingpad { ptr, i32 }
          cleanup
  %662 = extractvalue { ptr, i32 } %661, 0
  store ptr %662, ptr %16, align 8
  %663 = extractvalue { ptr, i32 } %661, 1
  store i32 %663, ptr %17, align 4
  br label %672

664:                                              ; preds = %625, %619
  %665 = landingpad { ptr, i32 }
          cleanup
  %666 = extractvalue { ptr, i32 } %665, 0
  store ptr %666, ptr %16, align 8
  %667 = extractvalue { ptr, i32 } %665, 1
  store i32 %667, ptr %17, align 4
  call void @_ZN3HIR9PublicityD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %618) #11
  br label %672

668:                                              ; preds = %626
  %669 = landingpad { ptr, i32 }
          cleanup
  %670 = extractvalue { ptr, i32 } %669, 0
  store ptr %670, ptr %16, align 8
  %671 = extractvalue { ptr, i32 } %669, 1
  store i32 %671, ptr %17, align 4
  call void @_ZN3HIR6VisEntINS_7TypeRefEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %74) #11
  br label %672

672:                                              ; preds = %668, %664, %660
  call void @llvm.lifetime.end.p0(i64 24, ptr %74) #11
  br label %692

673:                                              ; preds = %638, %634, %629, %627
  %674 = landingpad { ptr, i32 }
          cleanup
  %675 = extractvalue { ptr, i32 } %674, 0
  store ptr %675, ptr %16, align 8
  %676 = extractvalue { ptr, i32 } %674, 1
  store i32 %676, ptr %17, align 4
  br label %691

677:                                              ; preds = %644
  %678 = landingpad { ptr, i32 }
          cleanup
  %679 = extractvalue { ptr, i32 } %678, 0
  store ptr %679, ptr %16, align 8
  %680 = extractvalue { ptr, i32 } %678, 1
  store i32 %680, ptr %17, align 4
  br label %690

681:                                              ; preds = %652
  %682 = landingpad { ptr, i32 }
          cleanup
  %683 = extractvalue { ptr, i32 } %682, 0
  store ptr %683, ptr %16, align 8
  %684 = extractvalue { ptr, i32 } %682, 1
  store i32 %684, ptr %17, align 4
  br label %689

685:                                              ; preds = %653
  %686 = landingpad { ptr, i32 }
          cleanup
  %687 = extractvalue { ptr, i32 } %686, 0
  store ptr %687, ptr %16, align 8
  %688 = extractvalue { ptr, i32 } %686, 1
  store i32 %688, ptr %17, align 4
  call void @_ZNSt4pairIjSt6vectorIN3MIR6LValue7WrapperESaIS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %75) #11
  br label %689

689:                                              ; preds = %685, %681
  call void @_ZNSt6vectorIN3MIR6LValue7WrapperESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %76) #11
  br label %690

690:                                              ; preds = %689, %677
  call void @_ZNSt15__new_allocatorIN3MIR6LValue7WrapperEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %79) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %79) #11
  br label %691

691:                                              ; preds = %690, %673
  call void @llvm.lifetime.end.p0(i64 16, ptr %78) #11
  call void @llvm.lifetime.end.p0(i64 24, ptr %76) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %75) #11
  br label %692

692:                                              ; preds = %691, %672, %610, %606, %605
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #11
  br label %797

693:                                              ; preds = %655, %579
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #11
  br label %694

694:                                              ; preds = %693
  %695 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt23_Rb_tree_const_iteratorIjEppEv(ptr noundef nonnull align 8 dereferenceable(8) %67) #11
  br label %562

696:                                              ; preds = %564
  br label %697

697:                                              ; preds = %696
  %698 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %699 unwind label %565

699:                                              ; preds = %697
  br i1 %698, label %700, label %714

700:                                              ; preds = %699
  %701 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %702 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %701, ptr noundef @__func__._Z8LowerMIRRK18StaticTraitResolveRKN3HIR8ItemPathERKNS2_7ExprPtrERKNS2_7TypeRefERKSt6vectorISt4pairINS2_7PatternES9_ESaISF_EE)
          to label %703 unwind label %565

703:                                              ; preds = %700
  %704 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %702, ptr noundef @.str.4)
          to label %705 unwind label %565

705:                                              ; preds = %703
  %706 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsIjSt6vectorIN3MIR6LValue7WrapperESaIS3_EESt4lessIjEERSoS8_RKSt3mapIT_T0_T1_SaISt4pairIKSA_SB_EEE(ptr noundef nonnull align 8 dereferenceable(8) %704, ptr noundef nonnull align 8 dereferenceable(48) %36)
          to label %707 unwind label %565

707:                                              ; preds = %705
  %708 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %706, ptr noundef @.str.5)
          to label %709 unwind label %565

709:                                              ; preds = %707
  %710 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %708, ptr noundef @_ZSt3decRSt8ios_base)
          to label %711 unwind label %565

711:                                              ; preds = %709
  %712 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %710, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %713 unwind label %565

713:                                              ; preds = %711
  br label %714

714:                                              ; preds = %713, %699
  br label %715

715:                                              ; preds = %714
  br label %716

716:                                              ; preds = %715
  call void @llvm.lifetime.start.p0(i64 40, ptr %81) #11
  invoke void @_ZZ8LowerMIRRK18StaticTraitResolveRKN3HIR8ItemPathERKNS2_7ExprPtrERKNS2_7TypeRefERKSt6vectorISt4pairINS2_7PatternES9_ESaISF_EEEN8RewriterC2ERSt3mapIjSC_IN3MIR6LValue7WrapperESaISO_EESt4lessIjESaISD_IKjSQ_EEE(ptr noundef nonnull align 8 dereferenceable(40) %81, ptr noundef nonnull align 8 dereferenceable(48) %36)
          to label %717 unwind label %751

717:                                              ; preds = %716
  invoke void @_ZZ8LowerMIRRK18StaticTraitResolveRKN3HIR8ItemPathERKNS2_7ExprPtrERKNS2_7TypeRefERKSt6vectorISt4pairINS2_7PatternES9_ESaISF_EEEN8Rewriter11rewrite_fcnERN3MIR8FunctionE(ptr noundef nonnull align 8 dereferenceable(40) %81, ptr noundef nonnull align 8 dereferenceable(96) %18)
          to label %718 unwind label %755

718:                                              ; preds = %717
  call void @_ZZ8LowerMIRRK18StaticTraitResolveRKN3HIR8ItemPathERKNS2_7ExprPtrERKNS2_7TypeRefERKSt6vectorISt4pairINS2_7PatternES9_ESaISF_EEEN8RewriterD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %81) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr %81) #11
  call void @llvm.lifetime.start.p0(i64 8, ptr %82) #11
  %719 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 96) #13
          to label %720 unwind label %760

720:                                              ; preds = %718
  call void @llvm.memset.p0.i64(ptr align 16 %719, i8 0, i64 96, i1 false)
  invoke void @_ZN3MIR8FunctionC2Ev(ptr noundef nonnull align 8 dereferenceable(96) %719)
          to label %721 unwind label %764

721:                                              ; preds = %720
  invoke void @_ZN3MIR15FunctionPointerC2EPNS_8FunctionE(ptr noundef nonnull align 8 dereferenceable(8) %82, ptr noundef %719)
          to label %722 unwind label %760

722:                                              ; preds = %721
  call void @llvm.lifetime.start.p0(i64 40, ptr %83) #11
  %723 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %724 unwind label %768

724:                                              ; preds = %722
  %725 = zext i1 %723 to i64
  %726 = select i1 %723, ptr @__func__._Z8LowerMIRRK18StaticTraitResolveRKN3HIR8ItemPathERKNS2_7ExprPtrERKNS2_7TypeRefERKSt6vectorISt4pairINS2_7PatternES9_ESaISF_EE, ptr null
  call void @llvm.lifetime.start.p0(i64 1, ptr %85) #11
  call void @"_ZNSt8functionIFvRSoEEC2IZ8LowerMIRRK18StaticTraitResolveRKN3HIR8ItemPathERKNS7_7ExprPtrERKNS7_7TypeRefERKSt6vectorISt4pairINS7_7PatternESE_ESaISK_EEE3$_4vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %84, ptr noundef nonnull align 1 dereferenceable(1) %85) #11
  invoke void @_ZN8TraceLogC1EPKcSt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(40) %83, ptr noundef %726, ptr noundef %84)
          to label %727 unwind label %772

727:                                              ; preds = %724
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %84) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %85) #11
  call void @llvm.lifetime.start.p0(i64 440, ptr %86) #11
  %728 = load ptr, ptr %24, align 8, !tbaa !5
  %729 = load ptr, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %87) #11
  invoke void @_ZN3HIR7TypeRef8new_unitEv(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %87)
          to label %730 unwind label %776

730:                                              ; preds = %727
  %731 = load ptr, ptr %35, align 8, !tbaa !5
  %732 = getelementptr inbounds %"struct.HIR::ExprNode_GeneratorWrapper", ptr %731, i32 0, i32 8
  %733 = load ptr, ptr %732, align 8, !tbaa !56
  %734 = getelementptr inbounds %"class.HIR::Function", ptr %733, i32 0, i32 8
  %735 = invoke noundef nonnull align 8 dereferenceable(96) ptr @_ZN3MIR15FunctionPointerdeEv(ptr noundef nonnull align 8 dereferenceable(8) %82)
          to label %736 unwind label %780

736:                                              ; preds = %730
  invoke void @_ZN10MirBuilderC1ERK4SpanRK18StaticTraitResolveRKN3HIR7TypeRefERKSt6vectorISt4pairINS6_7PatternES7_ESaISD_EERN3MIR8FunctionE(ptr noundef nonnull align 8 dereferenceable(440) %86, ptr noundef nonnull align 8 dereferenceable(8) %728, ptr noundef nonnull align 8 dereferenceable(424) %729, ptr noundef nonnull align 8 dereferenceable(8) %87, ptr noundef nonnull align 8 dereferenceable(24) %734, ptr noundef nonnull align 8 dereferenceable(96) %735)
          to label %737 unwind label %780

737:                                              ; preds = %736
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %87) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #11
  %738 = load ptr, ptr %24, align 8, !tbaa !5
  %739 = load ptr, ptr %35, align 8, !tbaa !5
  %740 = getelementptr inbounds %"struct.HIR::ExprNode_GeneratorWrapper", ptr %739, i32 0, i32 9
  %741 = call noundef i64 @_ZNKSt6vectorIN3HIR10ValueUsageESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %740) #11
  invoke void @_ZNK12_GLOBAL__N_116ExprVisitor_Conv19generator_make_dropERK4SpanR10MirBuildermRKSt3mapIjSt6vectorIN3MIR6LValue7WrapperESaISA_EESt4lessIjESaISt4pairIKjSC_EEE(ptr noundef nonnull align 8 dereferenceable(128) %27, ptr noundef nonnull align 8 dereferenceable(8) %738, ptr noundef nonnull align 8 dereferenceable(440) %86, i64 noundef %741, ptr noundef nonnull align 8 dereferenceable(48) %36)
          to label %742 unwind label %785

742:                                              ; preds = %737
  invoke void @_ZN10MirBuilder13final_cleanupEv(ptr noundef nonnull align 8 dereferenceable(440) %86)
          to label %743 unwind label %785

743:                                              ; preds = %742
  call void @_ZN10MirBuilderD2Ev(ptr noundef nonnull align 8 dereferenceable(440) %86) #11
  call void @llvm.lifetime.end.p0(i64 440, ptr %86) #11
  call void @_ZN8TraceLogD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %83) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr %83) #11
  %744 = load ptr, ptr %35, align 8, !tbaa !5
  %745 = getelementptr inbounds %"struct.HIR::ExprNode_GeneratorWrapper", ptr %744, i32 0, i32 8
  %746 = load ptr, ptr %745, align 8, !tbaa !56
  %747 = getelementptr inbounds %"class.HIR::Function", ptr %746, i32 0, i32 11
  %748 = getelementptr inbounds %"class.HIR::ExprPtr", ptr %747, i32 0, i32 3
  %749 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIR15FunctionPointeraSEOS0_(ptr noundef nonnull align 8 dereferenceable(8) %748, ptr noundef nonnull align 8 dereferenceable(8) %82)
          to label %750 unwind label %791

750:                                              ; preds = %743
  call void @_ZN3MIR15FunctionPointerD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %82) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #11
  call void @_ZNSt3setIjSt4lessIjESaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %53) #11
  call void @llvm.lifetime.end.p0(i64 48, ptr %53) #11
  call void @_ZNSt3mapIjSt6vectorIN3MIR6LValue7WrapperESaIS3_EESt4lessIjESaISt4pairIKjS5_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %36) #11
  call void @llvm.lifetime.end.p0(i64 48, ptr %36) #11
  br label %813

751:                                              ; preds = %716
  %752 = landingpad { ptr, i32 }
          cleanup
  %753 = extractvalue { ptr, i32 } %752, 0
  store ptr %753, ptr %16, align 8
  %754 = extractvalue { ptr, i32 } %752, 1
  store i32 %754, ptr %17, align 4
  br label %759

755:                                              ; preds = %717
  %756 = landingpad { ptr, i32 }
          cleanup
  %757 = extractvalue { ptr, i32 } %756, 0
  store ptr %757, ptr %16, align 8
  %758 = extractvalue { ptr, i32 } %756, 1
  store i32 %758, ptr %17, align 4
  call void @_ZZ8LowerMIRRK18StaticTraitResolveRKN3HIR8ItemPathERKNS2_7ExprPtrERKNS2_7TypeRefERKSt6vectorISt4pairINS2_7PatternES9_ESaISF_EEEN8RewriterD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %81) #11
  br label %759

759:                                              ; preds = %755, %751
  call void @llvm.lifetime.end.p0(i64 40, ptr %81) #11
  br label %797

760:                                              ; preds = %721, %718
  %761 = landingpad { ptr, i32 }
          cleanup
  %762 = extractvalue { ptr, i32 } %761, 0
  store ptr %762, ptr %16, align 8
  %763 = extractvalue { ptr, i32 } %761, 1
  store i32 %763, ptr %17, align 4
  br label %796

764:                                              ; preds = %720
  %765 = landingpad { ptr, i32 }
          cleanup
  %766 = extractvalue { ptr, i32 } %765, 0
  store ptr %766, ptr %16, align 8
  %767 = extractvalue { ptr, i32 } %765, 1
  store i32 %767, ptr %17, align 4
  call void @_ZdlPvm(ptr noundef %719, i64 noundef 96) #14
  br label %796

768:                                              ; preds = %722
  %769 = landingpad { ptr, i32 }
          cleanup
  %770 = extractvalue { ptr, i32 } %769, 0
  store ptr %770, ptr %16, align 8
  %771 = extractvalue { ptr, i32 } %769, 1
  store i32 %771, ptr %17, align 4
  br label %790

772:                                              ; preds = %724
  %773 = landingpad { ptr, i32 }
          cleanup
  %774 = extractvalue { ptr, i32 } %773, 0
  store ptr %774, ptr %16, align 8
  %775 = extractvalue { ptr, i32 } %773, 1
  store i32 %775, ptr %17, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %84) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %85) #11
  br label %790

776:                                              ; preds = %727
  %777 = landingpad { ptr, i32 }
          cleanup
  %778 = extractvalue { ptr, i32 } %777, 0
  store ptr %778, ptr %16, align 8
  %779 = extractvalue { ptr, i32 } %777, 1
  store i32 %779, ptr %17, align 4
  br label %784

780:                                              ; preds = %736, %730
  %781 = landingpad { ptr, i32 }
          cleanup
  %782 = extractvalue { ptr, i32 } %781, 0
  store ptr %782, ptr %16, align 8
  %783 = extractvalue { ptr, i32 } %781, 1
  store i32 %783, ptr %17, align 4
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %87) #11
  br label %784

784:                                              ; preds = %780, %776
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #11
  br label %789

785:                                              ; preds = %742, %737
  %786 = landingpad { ptr, i32 }
          cleanup
  %787 = extractvalue { ptr, i32 } %786, 0
  store ptr %787, ptr %16, align 8
  %788 = extractvalue { ptr, i32 } %786, 1
  store i32 %788, ptr %17, align 4
  call void @_ZN10MirBuilderD2Ev(ptr noundef nonnull align 8 dereferenceable(440) %86) #11
  br label %789

789:                                              ; preds = %785, %784
  call void @llvm.lifetime.end.p0(i64 440, ptr %86) #11
  call void @_ZN8TraceLogD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %83) #11
  br label %790

790:                                              ; preds = %789, %772, %768
  call void @llvm.lifetime.end.p0(i64 40, ptr %83) #11
  br label %795

791:                                              ; preds = %743
  %792 = landingpad { ptr, i32 }
          cleanup
  %793 = extractvalue { ptr, i32 } %792, 0
  store ptr %793, ptr %16, align 8
  %794 = extractvalue { ptr, i32 } %792, 1
  store i32 %794, ptr %17, align 4
  br label %795

795:                                              ; preds = %791, %790
  call void @_ZN3MIR15FunctionPointerD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %82) #11
  br label %796

796:                                              ; preds = %795, %764, %760
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #11
  br label %797

797:                                              ; preds = %796, %759, %692, %565
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #11
  br label %798

798:                                              ; preds = %797, %545, %541, %540, %531
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #11
  br label %799

799:                                              ; preds = %798, %519
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #11
  call void @_ZNSt3setIjSt4lessIjESaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %53) #11
  br label %800

800:                                              ; preds = %799, %515
  call void @llvm.lifetime.end.p0(i64 48, ptr %53) #11
  br label %801

801:                                              ; preds = %800, %443, %402, %366
  call void @_ZNSt3mapIjSt6vectorIN3MIR6LValue7WrapperESaIS3_EESt4lessIjESaISt4pairIKjS5_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %36) #11
  call void @llvm.lifetime.end.p0(i64 48, ptr %36) #11
  br label %830

802:                                              ; preds = %278
  %803 = load ptr, ptr %25, align 8, !tbaa !5
  %804 = load ptr, ptr %803, align 8, !tbaa !22
  %805 = getelementptr inbounds ptr, ptr %804, i64 0
  %806 = load ptr, ptr %805, align 8
  invoke void %806(ptr noundef nonnull align 8 dereferenceable(28) %803, ptr noundef nonnull align 8 dereferenceable(8) %27)
          to label %807 unwind label %809

807:                                              ; preds = %802
  invoke void @_ZN10MirBuilder13final_cleanupEv(ptr noundef nonnull align 8 dereferenceable(440) %26)
          to label %808 unwind label %809

808:                                              ; preds = %807
  br label %813

809:                                              ; preds = %807, %802
  %810 = landingpad { ptr, i32 }
          cleanup
  %811 = extractvalue { ptr, i32 } %810, 0
  store ptr %811, ptr %16, align 8
  %812 = extractvalue { ptr, i32 } %810, 1
  store i32 %812, ptr %17, align 4
  br label %830

813:                                              ; preds = %808, %750
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #11
  call void @_ZN12_GLOBAL__N_116ExprVisitor_ConvD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %27) #11
  call void @llvm.lifetime.end.p0(i64 128, ptr %27) #11
  call void @_ZN10MirBuilderD2Ev(ptr noundef nonnull align 8 dereferenceable(440) %26) #11
  call void @llvm.lifetime.end.p0(i64 440, ptr %26) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #11
  %814 = load ptr, ptr %8, align 8, !tbaa !5
  %815 = load ptr, ptr %9, align 8, !tbaa !5
  %816 = load ptr, ptr %12, align 8, !tbaa !5
  %817 = load ptr, ptr %11, align 8, !tbaa !5
  invoke void @_Z12MIR_ValidateRK18StaticTraitResolveRKN3HIR8ItemPathERKN3MIR8FunctionERKSt6vectorISt4pairINS2_7PatternENS2_7TypeRefEESaISE_EERKSD_(ptr noundef nonnull align 8 dereferenceable(424) %814, ptr noundef nonnull align 8 dereferenceable(56) %815, ptr noundef nonnull align 8 dereferenceable(96) %18, ptr noundef nonnull align 8 dereferenceable(24) %816, ptr noundef nonnull align 8 dereferenceable(8) %817)
          to label %818 unwind label %119

818:                                              ; preds = %813
  %819 = call ptr @getenv(ptr noundef @.str.6) #11
  %820 = icmp ne ptr %819, null
  br i1 %820, label %821, label %836

821:                                              ; preds = %818
  %822 = load ptr, ptr %8, align 8, !tbaa !5
  %823 = load ptr, ptr %9, align 8, !tbaa !5
  %824 = load ptr, ptr %12, align 8, !tbaa !5
  %825 = load ptr, ptr %10, align 8, !tbaa !5
  %826 = invoke noundef ptr @_ZNK3HIR7ExprPtrptEv(ptr noundef nonnull align 8 dereferenceable(72) %825)
          to label %827 unwind label %119

827:                                              ; preds = %821
  %828 = getelementptr inbounds %"class.HIR::ExprNode", ptr %826, i32 0, i32 2
  invoke void @_Z17MIR_Validate_FullRK18StaticTraitResolveRKN3HIR8ItemPathERKN3MIR8FunctionERKSt6vectorISt4pairINS2_7PatternENS2_7TypeRefEESaISE_EERKSD_(ptr noundef nonnull align 8 dereferenceable(424) %822, ptr noundef nonnull align 8 dereferenceable(56) %823, ptr noundef nonnull align 8 dereferenceable(96) %18, ptr noundef nonnull align 8 dereferenceable(24) %824, ptr noundef nonnull align 8 dereferenceable(8) %828)
          to label %829 unwind label %119

829:                                              ; preds = %827
  br label %836

830:                                              ; preds = %809, %801
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #11
  br label %831

831:                                              ; preds = %830, %271
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #11
  call void @_ZN12_GLOBAL__N_116ExprVisitor_ConvD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %27) #11
  br label %832

832:                                              ; preds = %831, %190
  call void @llvm.lifetime.end.p0(i64 128, ptr %27) #11
  call void @_ZN10MirBuilderD2Ev(ptr noundef nonnull align 8 dereferenceable(440) %26) #11
  br label %833

833:                                              ; preds = %832, %172
  call void @llvm.lifetime.end.p0(i64 440, ptr %26) #11
  br label %834

834:                                              ; preds = %833, %168
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #11
  br label %835

835:                                              ; preds = %834, %164
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #11
  br label %845

836:                                              ; preds = %829, %818
  %837 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 96) #13
          to label %838 unwind label %119

838:                                              ; preds = %836
  invoke void @_ZN3MIR8FunctionC2EOS0_(ptr noundef nonnull align 8 dereferenceable(96) %837, ptr noundef nonnull align 8 dereferenceable(96) %18)
          to label %839 unwind label %841

839:                                              ; preds = %838
  invoke void @_ZN3MIR15FunctionPointerC2EPNS_8FunctionE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef %837)
          to label %840 unwind label %119

840:                                              ; preds = %839
  call void @_ZN3MIR8FunctionD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %18) #11
  call void @llvm.lifetime.end.p0(i64 96, ptr %18) #11
  call void @_ZN8TraceLogD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %13) #11
  call void @llvm.lifetime.end.p0(i64 40, ptr %13) #11
  ret void

841:                                              ; preds = %838
  %842 = landingpad { ptr, i32 }
          cleanup
  %843 = extractvalue { ptr, i32 } %842, 0
  store ptr %843, ptr %16, align 8
  %844 = extractvalue { ptr, i32 } %842, 1
  store i32 %844, ptr %17, align 4
  call void @_ZdlPvm(ptr noundef %837, i64 noundef 96) #14
  br label %845

845:                                              ; preds = %841, %835, %139, %119
  call void @_ZN3MIR8FunctionD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %18) #11
  br label %846

846:                                              ; preds = %845, %115
  call void @llvm.lifetime.end.p0(i64 96, ptr %18) #11
  call void @_ZN8TraceLogD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %13) #11
  br label %847

847:                                              ; preds = %846, %111
  call void @llvm.lifetime.end.p0(i64 40, ptr %13) #11
  br label %848

848:                                              ; preds = %847
  %849 = load ptr, ptr %16, align 8
  %850 = load i32, ptr %17, align 4
  %851 = insertvalue { ptr, i32 } poison, ptr %849, 0
  %852 = insertvalue { ptr, i32 } %851, i32 %850, 1
  resume { ptr, i32 } %852

853:                                              ; preds = %596, %514
  unreachable
}

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

declare noundef zeroext i1 @_Z13debug_enabledv() #2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ8LowerMIRRK18StaticTraitResolveRKN3HIR8ItemPathERKNS7_7ExprPtrERKNS7_7TypeRefERKSt6vectorISt4pairINS7_7PatternESE_ESaISK_EEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #3 align 2

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(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(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8)) #3 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)) #0 align 2

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(28) ptr @_ZNK3HIR7ExprPtrdeEv(ptr noundef nonnull align 8 dereferenceable(72)) #3 align 2

declare void @_ZN10MirBuilderC1ERK4SpanRK18StaticTraitResolveRKN3HIR7TypeRefERKSt6vectorISt4pairINS6_7PatternES7_ESaISD_EERN3MIR8FunctionE(ptr noundef nonnull align 8 dereferenceable(440), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(424), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(96)) unnamed_addr #2

; Function Attrs: nounwind willreturn memory(read)
declare ptr @__dynamic_cast(ptr, ptr, ptr, i64) #6

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN12_GLOBAL__N_116ExprVisitor_ConvC2ER10MirBuilderRKSt6vectorIN3HIR7TypeRefESaIS5_EEPKNS4_25ExprNode_GeneratorWrapperE(ptr noundef nonnull align 8 dereferenceable(128), ptr noundef nonnull align 8 dereferenceable(440), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef) unnamed_addr #0 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9__gnu_cxxneIPKSt4pairIN3HIR7PatternENS2_7TypeRefEESt6vectorIS5_SaIS5_EEEEbRKNS_17__normal_iteratorIT_T0_EESG_(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_iteratorIPKSt4pairIN3HIR7PatternENS2_7TypeRefEESt6vectorIS5_SaIS5_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8)) #3 align 2

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

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

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

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIRlsERSoRKNS_7PatternE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(212)) #2

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #4

declare noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef, ptr noundef) #2

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

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(216) ptr @_ZSt3decRSt8ios_base(ptr noundef nonnull align 8 dereferenceable(216)) #4

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(ptr noundef nonnull align 8 dereferenceable(8)) #4

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN12_GLOBAL__N_116ExprVisitor_Conv16define_vars_fromERK4SpanRKN3HIR7PatternE(ptr noundef nonnull align 8 dereferenceable(128), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(212)) unnamed_addr #0 align 2

declare void @_Z16MIR_LowerHIR_LetR10MirBuilderR12MirConverterRK4SpanRKN3HIR7PatternEN3MIR6LValueEPKNS6_8ExprNodeE(ptr noundef nonnull align 8 dereferenceable(440), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(212), ptr noundef, ptr noundef) #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3MIR6LValue12new_ArgumentEj(ptr dead_on_unwind noalias writable sret(%"struct.MIR::LValue") align 8, i32 noundef) #0 align 2

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

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

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

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

declare void @_ZN10MirBuilder15define_variableEj(ptr noundef nonnull align 8 dereferenceable(440), i32 noundef) #2

declare void @_ZN10MirBuilder19mark_value_assignedERK4SpanRKN3MIR6LValueE(ptr noundef nonnull align 8 dereferenceable(440), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(32)) #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3MIR6LValue9new_LocalEj(ptr dead_on_unwind noalias writable sret(%"struct.MIR::LValue") align 8, i32 noundef) #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt3mapIjSt6vectorIN3MIR6LValue7WrapperESaIS3_EESt4lessIjESaISt4pairIKjS5_EEE6insertIS8_IjS5_EEENSt9enable_ifIXsr16is_constructibleISA_T_EE5valueES8_ISt17_Rb_tree_iteratorISA_EbEE4typeEOSG_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(32)) #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZSt9make_pairIRjSt6vectorIN3MIR6LValue7WrapperESaIS4_EEESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS8_INS9_IT0_E4typeEE6__typeEEOSA_OSF_(ptr dead_on_unwind noalias writable sret(%"struct.std::pair.168") align 8, ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 8 dereferenceable(24)) #0

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z9make_vec1IN3MIR6LValue7WrapperEESt6vectorIT_SaIS4_EEOS4_(ptr dead_on_unwind noalias writable sret(%"class.std::vector.9") align 8, ptr noundef nonnull align 4 dereferenceable(4)) #0

; Function Attrs: mustprogress uwtable
declare dso_local i32 @_ZN3MIR6LValue7Wrapper9new_FieldEj(i32 noundef) #0 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt3mapIjSt6vectorIN3MIR6LValue7WrapperESaIS3_EESt4lessIjESaISt4pairIKjS5_EEEixERS9_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 4 dereferenceable(4)) #0 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local i32 @_ZN3MIR6LValue7Wrapper9new_DerefEv() #0 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK10MirBuilder12block_activeEv(ptr noundef nonnull align 8 dereferenceable(440)) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK10MirBuilder10has_resultEv(ptr noundef nonnull align 8 dereferenceable(440)) #3 align 2

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

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

declare void @_ZN10MirBuilder19get_result_in_paramERK4SpanRKN3HIR7TypeRefEb(ptr dead_on_unwind writable sret(%"class.MIR::Param") align 8, ptr noundef nonnull align 8 dereferenceable(440), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), i1 noundef zeroext) #2

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

declare void @_ZN3HIR11GenericPathC1Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #2

declare void @_ZNK10MirBuilder13with_val_typeERK4SpanRKN3MIR6LValueESt8functionIFvRKN3HIR7TypeRefEEEPKNS4_7WrapperE(ptr noundef nonnull align 8 dereferenceable(440), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, ptr noundef) #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3MIR6LValue10new_ReturnEv(ptr dead_on_unwind noalias writable sret(%"struct.MIR::LValue") align 8) #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRKN3HIR7TypeRefEEEC2IZ8LowerMIRRK18StaticTraitResolveRKNS0_8ItemPathERKNS0_7ExprPtrES3_RKSt6vectorISt4pairINS0_7PatternES1_ESaISJ_EEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 align 2

declare void @_ZN10MirBuilder10set_resultERK4SpanN3MIR6RValueE(ptr noundef nonnull align 8 dereferenceable(440), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3MIR6RValue16make_EnumVariantENS0_16Data_EnumVariantE(ptr dead_on_unwind noalias writable sret(%"class.MIR::RValue") align 8, ptr noundef) #0 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

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

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

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

declare void @_ZN10MirBuilder13final_cleanupEv(ptr noundef nonnull align 8 dereferenceable(440)) #2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN12_GLOBAL__N_116ExprVisitor_Conv18generator_finaliseERK4SpanRN3HIR4EnumE(ptr dead_on_unwind noalias writable sret(%"class.std::set") align 8, ptr noundef nonnull align 8 dereferenceable(128), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(200)) #0 align 2

declare noundef nonnull align 8 dereferenceable(200) ptr @_ZNK3HIR5Crate16get_enum_by_pathERK4SpanRKNS_10SimplePathEbb(ptr noundef nonnull align 8 dereferenceable(944), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), i1 noundef zeroext, i1 noundef zeroext) #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 nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184)) #3 align 2

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

declare noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR5Crate17get_union_by_pathERK4SpanRKNS_10SimplePathE(ptr noundef nonnull align 8 dereferenceable(944), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #2

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR5Crate18get_lang_item_pathERK4SpanPKc(ptr noundef nonnull align 8 dereferenceable(944), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #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_EEEEZ8LowerMIRRK18StaticTraitResolveRKNS4_8ItemPathERKNS4_7ExprPtrERKS6_RKSB_IS2_INS4_7PatternES6_ESaISR_EEE3$_5ET_SX_SX_T0_"(ptr, ptr) #4

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ8LowerMIRRK18StaticTraitResolveRKN3HIR8ItemPathERKNS7_7ExprPtrERKNS7_7TypeRefERKSt6vectorISt4pairINS7_7PatternESE_ESaISK_EEE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #3 align 2

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

declare ptr @__cxa_allocate_exception(i64)

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

declare void @__cxa_free_exception(ptr)

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

declare void @__cxa_throw(ptr, ptr, ptr)

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ8LowerMIRRK18StaticTraitResolveRKN3HIR8ItemPathERKNS7_7ExprPtrERKNS7_7TypeRefERKSt6vectorISt4pairINS7_7PatternESE_ESaISK_EEE3$_3vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3HIR9Publicity8new_noneEv(ptr dead_on_unwind noalias writable sret(%"class.HIR::Publicity") align 8) #0 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local i32 @_ZN3MIR6LValue7Wrapper12new_DowncastEj(i32 noundef) #0 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIN3MIR6LValue7WrapperESaIS2_EEC2ESt16initializer_listIS2_ERKS3_(ptr noundef nonnull align 8 dereferenceable(24), ptr, i64, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #0 align 2

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZZ8LowerMIRRK18StaticTraitResolveRKN3HIR8ItemPathERKNS2_7ExprPtrERKNS2_7TypeRefERKSt6vectorISt4pairINS2_7PatternES9_ESaISF_EEEN8RewriterC2ERSt3mapIjSC_IN3MIR6LValue7WrapperESaISO_EESt4lessIjESaISD_IKjSQ_EEE(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZZ8LowerMIRRK18StaticTraitResolveRKN3HIR8ItemPathERKNS2_7ExprPtrERKNS2_7TypeRefERKSt6vectorISt4pairINS2_7PatternES9_ESaISF_EEEN8Rewriter11rewrite_fcnERN3MIR8FunctionE(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(96)) #0 align 2

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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #9

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

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ8LowerMIRRK18StaticTraitResolveRKN3HIR8ItemPathERKNS7_7ExprPtrERKNS7_7TypeRefERKSt6vectorISt4pairINS7_7PatternESE_ESaISK_EEE3$_4vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #3 align 2

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

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZNK12_GLOBAL__N_116ExprVisitor_Conv19generator_make_dropERK4SpanR10MirBuildermRKSt3mapIjSt6vectorIN3MIR6LValue7WrapperESaISA_EESt4lessIjESaISt4pairIKjSC_EEE(ptr noundef nonnull align 8 dereferenceable(128), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(440), i64 noundef, ptr noundef nonnull align 8 dereferenceable(48)) #0 align 2

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

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

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

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

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

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

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

declare void @_Z12MIR_ValidateRK18StaticTraitResolveRKN3HIR8ItemPathERKN3MIR8FunctionERKSt6vectorISt4pairINS2_7PatternENS2_7TypeRefEESaISE_EERKSD_(ptr noundef nonnull align 8 dereferenceable(424), ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(96), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8)) #2

; Function Attrs: nounwind
declare ptr @getenv(ptr noundef) #7

declare void @_Z17MIR_Validate_FullRK18StaticTraitResolveRKN3HIR8ItemPathERKN3MIR8FunctionERKSt6vectorISt4pairINS2_7PatternENS2_7TypeRefEESaISE_EERKSD_(ptr noundef nonnull align 8 dereferenceable(424), ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(96), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8)) #2

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

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

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

attributes #0 = { 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 #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress 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 #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 = { nounwind willreturn memory(read) }
attributes #7 = { 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 = { nobuiltin allocsize(0) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #10 = { nobuiltin nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #11 = { nounwind }
attributes #12 = { noreturn }
attributes #13 = { builtin allocsize(0) }
attributes #14 = { builtin nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !14, i64 4}
!12 = !{!"_ZTSN3HIR14PatternBindingE", !13, i64 0, !14, i64 4, !15, i64 8, !10, i64 16, !10, i64 20}
!13 = !{!"bool", !7, i64 0}
!14 = !{!"_ZTSN3HIR14PatternBinding4TypeE", !7, i64 0}
!15 = !{!"_ZTS8RcString", !6, i64 0}
!16 = !{!17, !17, i64 0}
!17 = !{!"long", !7, i64 0}
!18 = !{!19, !19, i64 0}
!19 = !{!"_ZTSN3HIR10ValueUsageE", !7, i64 0}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.mustprogress"}
!22 = !{!23, !23, i64 0}
!23 = !{!"vtable pointer", !8, i64 0}
!24 = !{!25, !10, i64 32}
!25 = !{!"_ZTSN3MIR6RValue16Data_EnumVariantE", !26, i64 0, !10, i64 32, !33, i64 40}
!26 = !{!"_ZTSN3HIR11GenericPathE", !27, i64 0, !29, i64 8}
!27 = !{!"_ZTSN3HIR10SimplePathE", !28, i64 0}
!28 = !{!"_ZTS10ThinVectorI8RcStringE", !6, i64 0}
!29 = !{!"_ZTSN3HIR10PathParamsE", !30, i64 0, !31, i64 8, !32, i64 16}
!30 = !{!"_ZTS10ThinVectorIN3HIR11LifetimeRefEE", !6, i64 0}
!31 = !{!"_ZTS10ThinVectorIN3HIR7TypeRefEE", !6, i64 0}
!32 = !{!"_ZTS10ThinVectorIN3HIR12ConstGenericEE", !6, i64 0}
!33 = !{!"_ZTSSt6vectorIN3MIR5ParamESaIS1_EE", !34, i64 0}
!34 = !{!"_ZTSSt12_Vector_baseIN3MIR5ParamESaIS1_EE", !35, i64 0}
!35 = !{!"_ZTSNSt12_Vector_baseIN3MIR5ParamESaIS1_EE12_Vector_implE", !36, i64 0}
!36 = !{!"_ZTSNSt12_Vector_baseIN3MIR5ParamESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!37 = !{!38, !6, i64 0}
!38 = !{!"_ZTS18TraitResolveCommon", !6, i64 0, !6, i64 8, !6, i64 16, !39, i64 24, !47, i64 72, !27, i64 104, !27, i64 112, !27, i64 120, !27, i64 128, !27, i64 136, !27, i64 144, !27, i64 152, !27, i64 160, !27, i64 168, !27, i64 176, !27, i64 184, !27, i64 192, !27, i64 200, !27, i64 208}
!39 = !{!"_ZTSSt3mapIN3HIR7TypeRefEN18TraitResolveCommon14CachedEqualityESt4lessIS1_ESaISt4pairIKS1_S3_EEE", !40, i64 0}
!40 = !{!"_ZTSSt8_Rb_treeIN3HIR7TypeRefESt4pairIKS1_N18TraitResolveCommon14CachedEqualityEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE", !41, i64 0}
!41 = !{!"_ZTSNSt8_Rb_treeIN3HIR7TypeRefESt4pairIKS1_N18TraitResolveCommon14CachedEqualityEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE13_Rb_tree_implISA_Lb1EEE", !42, i64 0, !44, i64 8}
!42 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIN3HIR7TypeRefEEE", !43, i64 0}
!43 = !{!"_ZTSSt4lessIN3HIR7TypeRefEE"}
!44 = !{!"_ZTSSt15_Rb_tree_header", !45, i64 0, !17, i64 32}
!45 = !{!"_ZTSSt18_Rb_tree_node_base", !46, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!46 = !{!"_ZTSSt14_Rb_tree_color", !7, i64 0}
!47 = !{!"_ZTS11RangeVecMapISt4pairIN3HIR7TypeRefENS1_11GenericPathEEN18TraitResolveCommon11CachedBoundENS5_14CachedBoundCmpEE", !48, i64 0, !52, i64 24}
!48 = !{!"_ZTSSt6vectorISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE", !49, i64 0}
!49 = !{!"_ZTSSt12_Vector_baseISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE", !50, i64 0}
!50 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE12_Vector_implE", !51, i64 0}
!51 = !{!"_ZTSNSt12_Vector_baseISt10unique_ptrISt4pairIS1_IN3HIR7TypeRefENS2_11GenericPathEEN18TraitResolveCommon11CachedBoundEESt14default_deleteIS8_EESaISB_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!52 = !{!"_ZTSN18TraitResolveCommon14CachedBoundCmpE"}
!53 = !{!54, !6, i64 0}
!54 = !{!"_ZTSSt16initializer_listIN3MIR6LValue7WrapperEE", !6, i64 0, !17, i64 8}
!55 = !{!54, !17, i64 8}
!56 = !{!57, !6, i64 112}
!57 = !{!"_ZTSN3HIR25ExprNode_GeneratorWrapperE", !58, i64 0, !60, i64 32, !60, i64 40, !61, i64 48, !6, i64 56, !26, i64 64, !60, i64 96, !27, i64 104, !6, i64 112, !67, i64 120}
!58 = !{!"_ZTSN3HIR8ExprNodeE", !59, i64 8, !60, i64 16, !19, i64 24}
!59 = !{!"_ZTS4Span", !6, i64 0}
!60 = !{!"_ZTSN3HIR7TypeRefE", !6, i64 0}
!61 = !{!"_ZTSSt10unique_ptrIN3HIR8ExprNodeESt14default_deleteIS1_EE", !62, i64 0}
!62 = !{!"_ZTSSt15__uniq_ptr_dataIN3HIR8ExprNodeESt14default_deleteIS1_ELb1ELb1EE", !63, i64 0}
!63 = !{!"_ZTSSt15__uniq_ptr_implIN3HIR8ExprNodeESt14default_deleteIS1_EE", !64, i64 0}
!64 = !{!"_ZTSSt5tupleIJPN3HIR8ExprNodeESt14default_deleteIS1_EEE", !65, i64 0}
!65 = !{!"_ZTSSt11_Tuple_implILm0EJPN3HIR8ExprNodeESt14default_deleteIS1_EEE", !66, i64 0}
!66 = !{!"_ZTSSt10_Head_baseILm0EPN3HIR8ExprNodeELb0EE", !6, i64 0}
!67 = !{!"_ZTSSt6vectorIN3HIR10ValueUsageESaIS1_EE", !68, i64 0}
!68 = !{!"_ZTSSt12_Vector_baseIN3HIR10ValueUsageESaIS1_EE", !69, i64 0}
!69 = !{!"_ZTSNSt12_Vector_baseIN3HIR10ValueUsageESaIS1_EE12_Vector_implE", !70, i64 0}
!70 = !{!"_ZTSNSt12_Vector_baseIN3HIR10ValueUsageESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}


; 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.MIR::FunctionPointer" = 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 = type { ptr }
%"class.MIR::Function" = type { %"class.std::vector", %"class.std::vector.0", %"class.std::vector.4", %"class.MIR::EnumCachePtr" }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = 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.std::vector.0" = 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.4" = type { %"struct.std::_Vector_base.5" }
%"struct.std::_Vector_base.5" = type { %"struct.std::_Vector_base<MIR::BasicBlock, std::allocator<MIR::BasicBlock>>::_Vector_impl" }
%"struct.std::_Vector_base<MIR::BasicBlock, std::allocator<MIR::BasicBlock>>::_Vector_impl" = type { %"struct.std::_Vector_base<MIR::BasicBlock, std::allocator<MIR::BasicBlock>>::_Vector_impl_data" }
%"struct.std::_Vector_base<MIR::BasicBlock, std::allocator<MIR::BasicBlock>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.MIR::EnumCachePtr" = type { ptr }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%"class.HIR::TypeRef" = type { ptr }
%class.MirBuilder = type { ptr, ptr, ptr, ptr, ptr, ptr, i32, i8, %"class.MIR::RValue", i8, [7 x i8], %class.VarState, %"class.std::vector.40", %"class.std::vector.40", i64, %"class.std::map", %"class.std::vector.56", %"class.std::vector.61", %class.ScopeHandle, %"class.std::vector.66", %"struct.MIR::LValue" }
%"class.MIR::RValue" = type { i32, %"union.MIR::RValue::DataUnion" }
%"union.MIR::RValue::DataUnion" = type { %"struct.MIR::RValue::Data_BinOp" }
%"struct.MIR::RValue::Data_BinOp" = type { %"class.MIR::Param", i32, %"class.MIR::Param" }
%"class.MIR::Param" = type { i32, %"union.MIR::Param::DataUnion" }
%"union.MIR::Param::DataUnion" = type { %"struct.MIR::Param::Data_Borrow" }
%"struct.MIR::Param::Data_Borrow" = type { i32, %"struct.MIR::LValue" }
%class.VarState = type { i32, [4 x i8], %"union.VarState::DataUnion" }
%"union.VarState::DataUnion" = type { i32, [28 x i8] }
%"class.std::vector.40" = type { %"struct.std::_Vector_base.41" }
%"struct.std::_Vector_base.41" = type { %"struct.std::_Vector_base<VarState, std::allocator<VarState>>::_Vector_impl" }
%"struct.std::_Vector_base<VarState, std::allocator<VarState>>::_Vector_impl" = type { %"struct.std::_Vector_base<VarState, std::allocator<VarState>>::_Vector_impl_data" }
%"struct.std::_Vector_base<VarState, std::allocator<VarState>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::map" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<unsigned int, std::pair<const unsigned int, unsigned int>, std::_Select1st<std::pair<const unsigned int, unsigned int>>, std::less<unsigned int>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<unsigned int, std::pair<const unsigned int, unsigned int>, std::_Select1st<std::pair<const unsigned int, unsigned int>>, std::less<unsigned int>>::_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.std::vector.56" = type { %"struct.std::_Vector_base.57" }
%"struct.std::_Vector_base.57" = type { %"struct.std::_Vector_base<MirBuilder::ScopeDef, std::allocator<MirBuilder::ScopeDef>>::_Vector_impl" }
%"struct.std::_Vector_base<MirBuilder::ScopeDef, std::allocator<MirBuilder::ScopeDef>>::_Vector_impl" = type { %"struct.std::_Vector_base<MirBuilder::ScopeDef, std::allocator<MirBuilder::ScopeDef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<MirBuilder::ScopeDef, std::allocator<MirBuilder::ScopeDef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.61" = type { %"struct.std::_Vector_base.62" }
%"struct.std::_Vector_base.62" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.ScopeHandle = type <{ ptr, i32, [4 x i8] }>
%"class.std::vector.66" = type { %"struct.std::_Vector_base.67" }
%"struct.std::_Vector_base.67" = type { %"struct.std::_Vector_base<std::pair<HIR::PatternBinding::Type, MIR::LValue>, std::allocator<std::pair<HIR::PatternBinding::Type, MIR::LValue>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<HIR::PatternBinding::Type, MIR::LValue>, std::allocator<std::pair<HIR::PatternBinding::Type, MIR::LValue>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<HIR::PatternBinding::Type, MIR::LValue>, std::allocator<std::pair<HIR::PatternBinding::Type, MIR::LValue>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<HIR::PatternBinding::Type, MIR::LValue>, std::allocator<std::pair<HIR::PatternBinding::Type, MIR::LValue>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.MIR::LValue" = type { %"class.MIR::LValue::Storage", %"class.std::vector.9" }
%"class.MIR::LValue::Storage" = type { i64 }
%"class.std::vector.9" = type { %"struct.std::_Vector_base.10" }
%"struct.std::_Vector_base.10" = type { %"struct.std::_Vector_base<MIR::LValue::Wrapper, std::allocator<MIR::LValue::Wrapper>>::_Vector_impl" }
%"struct.std::_Vector_base<MIR::LValue::Wrapper, std::allocator<MIR::LValue::Wrapper>>::_Vector_impl" = type { %"struct.std::_Vector_base<MIR::LValue::Wrapper, std::allocator<MIR::LValue::Wrapper>>::_Vector_impl_data" }
%"struct.std::_Vector_base<MIR::LValue::Wrapper, std::allocator<MIR::LValue::Wrapper>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.(anonymous namespace)::ExprVisitor_Conv" = type { %class.MirConverter, ptr, ptr, i8, %"class.std::vector.98", ptr, ptr, ptr, i8, %"struct.(anonymous namespace)::ExprVisitor_Conv::GeneratorState" }
%class.MirConverter = type { %"class.HIR::ExprVisitor" }
%"class.HIR::ExprVisitor" = type { ptr }
%"class.std::vector.98" = type { %"struct.std::_Vector_base.99" }
%"struct.std::_Vector_base.99" = type { %"struct.std::_Vector_base<(anonymous namespace)::ExprVisitor_Conv::LoopDesc, std::allocator<(anonymous namespace)::ExprVisitor_Conv::LoopDesc>>::_Vector_impl" }
%"struct.std::_Vector_base<(anonymous namespace)::ExprVisitor_Conv::LoopDesc, std::allocator<(anonymous namespace)::ExprVisitor_Conv::LoopDesc>>::_Vector_impl" = type { %"struct.std::_Vector_base<(anonymous namespace)::ExprVisitor_Conv::LoopDesc, std::allocator<(anonymous namespace)::ExprVisitor_Conv::LoopDesc>>::_Vector_impl_data" }
%"struct.std::_Vector_base<(anonymous namespace)::ExprVisitor_Conv::LoopDesc, std::allocator<(anonymous namespace)::ExprVisitor_Conv::LoopDesc>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.(anonymous namespace)::ExprVisitor_Conv::GeneratorState" = type { i32, %"class.std::vector.103", %"struct.HIR::SimplePath" }
%"class.std::vector.103" = type { %"struct.std::_Vector_base.104" }
%"struct.std::_Vector_base.104" = type { %"struct.std::_Vector_base<(anonymous namespace)::ExprVisitor_Conv::GeneratorState::State, std::allocator<(anonymous namespace)::ExprVisitor_Conv::GeneratorState::State>>::_Vector_impl" }
%"struct.std::_Vector_base<(anonymous namespace)::ExprVisitor_Conv::GeneratorState::State, std::allocator<(anonymous namespace)::ExprVisitor_Conv::GeneratorState::State>>::_Vector_impl" = type { %"struct.std::_Vector_base<(anonymous namespace)::ExprVisitor_Conv::GeneratorState::State, std::allocator<(anonymous namespace)::ExprVisitor_Conv::GeneratorState::State>>::_Vector_impl_data" }
%"struct.std::_Vector_base<(anonymous namespace)::ExprVisitor_Conv::GeneratorState::State, std::allocator<(anonymous namespace)::ExprVisitor_Conv::GeneratorState::State>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.HIR::SimplePath" = type { %class.ThinVector }
%class.ThinVector = type { ptr }
%"class.__gnu_cxx::__normal_iterator.108" = type { ptr }
%"class.std::map.148" = type { %"class.std::_Rb_tree.149" }
%"class.std::_Rb_tree.149" = type { %"struct.std::_Rb_tree<unsigned int, std::pair<const unsigned int, std::vector<MIR::LValue::Wrapper>>, std::_Select1st<std::pair<const unsigned int, std::vector<MIR::LValue::Wrapper>>>, std::less<unsigned int>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<unsigned int, std::pair<const unsigned int, std::vector<MIR::LValue::Wrapper>>, std::_Select1st<std::pair<const unsigned int, std::vector<MIR::LValue::Wrapper>>>, std::less<unsigned int>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::pair.168" = type { i32, %"class.std::vector.9" }
%"class.MIR::LValue::Wrapper" = type { i32 }
%"class.std::vector.32" = type { %"struct.std::_Vector_base.33" }
%"struct.std::_Vector_base.33" = type { %"struct.std::_Vector_base<MIR::Param, std::allocator<MIR::Param>>::_Vector_impl" }
%"struct.std::_Vector_base<MIR::Param, std::allocator<MIR::Param>>::_Vector_impl" = type { %"struct.std::_Vector_base<MIR::Param, std::allocator<MIR::Param>>::_Vector_impl_data" }
%"struct.std::_Vector_base<MIR::Param, std::allocator<MIR::Param>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.HIR::GenericPath" = type { %"struct.HIR::SimplePath", %"struct.HIR::PathParams" }
%"struct.HIR::PathParams" = type { %class.ThinVector.37, %class.ThinVector.38, %class.ThinVector.39 }
%class.ThinVector.37 = type { ptr }
%class.ThinVector.38 = type { ptr }
%class.ThinVector.39 = type { ptr }
%"class.std::function.170" = type { %"class.std::_Function_base", ptr }
%class.anon.173 = type { ptr, ptr }
%"struct.MIR::RValue::Data_EnumVariant" = type { %"class.HIR::GenericPath", i32, %"class.std::vector.32" }
%"class.std::set" = type { %"class.std::_Rb_tree.174" }
%"class.std::_Rb_tree.174" = type { %"struct.std::_Rb_tree<unsigned int, unsigned int, std::_Identity<unsigned int>, std::less<unsigned int>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<unsigned int, unsigned int, std::_Identity<unsigned int>, std::less<unsigned int>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.__gnu_cxx::__normal_iterator.402" = type { ptr }
%struct.Span = type { ptr }
%class.anon.404 = type { i8 }
%"struct.std::_Rb_tree_const_iterator" = type { ptr }
%class.anon.407 = type { ptr, ptr }
%"struct.HIR::VisEnt" = type { %"class.HIR::Publicity", %"class.HIR::TypeRef" }
%"class.HIR::Publicity" = type { %"class.std::shared_ptr.408" }
%"class.std::shared_ptr.408" = type { %"class.std::__shared_ptr.409" }
%"class.std::__shared_ptr.409" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }
%"class.std::allocator.11" = type { i8 }
%class.Rewriter = type { %"class.MIR::visit::VisitorMut", ptr, %"class.std::vector.411" }
%"class.MIR::visit::VisitorMut" = type { %"class.MIR::visit::VisitorBase" }
%"class.MIR::visit::VisitorBase" = type { ptr }
%"class.std::vector.411" = type { %"struct.std::_Vector_base.412" }
%"struct.std::_Vector_base.412" = type { %"struct.std::_Vector_base<MIR::Statement, std::allocator<MIR::Statement>>::_Vector_impl" }
%"struct.std::_Vector_base<MIR::Statement, std::allocator<MIR::Statement>>::_Vector_impl" = type { %"struct.std::_Vector_base<MIR::Statement, std::allocator<MIR::Statement>>::_Vector_impl_data" }
%"struct.std::_Vector_base<MIR::Statement, std::allocator<MIR::Statement>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.anon.416 = type { i8 }

@__func__._Z8LowerMIRRK18StaticTraitResolveRKN3HIR8ItemPathERKNS2_7ExprPtrERKNS2_7TypeRefERKSt6vectorISt4pairINS2_7PatternES9_ESaISF_EE = external hidden unnamed_addr constant [9 x i8], align 1
@_ZTIN3HIR8ExprNodeE = external constant ptr
@_ZTIN3HIR25ExprNode_GeneratorWrapperE = external constant ptr
@g_debug_indent_level = external local_unnamed_addr global i32, align 4
@.str = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [17 x i8], align 1
@_ZTISt13runtime_error = external constant ptr
@.str.4 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [27 x i8], align 1

; Function Attrs: mustprogress uwtable
define dso_local void @_Z8LowerMIRRK18StaticTraitResolveRKN3HIR8ItemPathERKNS2_7ExprPtrERKNS2_7TypeRefERKSt6vectorISt4pairINS2_7PatternES9_ESaISF_EE(ptr dead_on_unwind noalias writable sret(%"class.MIR::FunctionPointer") align 8 %0, ptr noundef nonnull align 8 dereferenceable(424) %1, ptr noundef nonnull align 8 dereferenceable(56) %2, ptr noundef nonnull align 8 dereferenceable(72) %3, ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull align 8 dereferenceable(24) %5) local_unnamed_addr #0 personality ptr @__gxx_personality_v0 {
  %7 = alloca %class.TraceLog, align 8
  %8 = alloca %"class.std::function", align 8
  %9 = alloca %class.anon, align 8
  %10 = alloca %"class.MIR::Function", align 8
  %11 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %12 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %13 = alloca %"class.HIR::TypeRef", align 8
  %14 = alloca %class.MirBuilder, align 8
  %15 = alloca %"class.(anonymous namespace)::ExprVisitor_Conv", align 8
  %16 = alloca %"class.__gnu_cxx::__normal_iterator.108", align 8
  %17 = alloca %"class.__gnu_cxx::__normal_iterator.108", align 8
  %18 = alloca %"struct.MIR::LValue", align 8
  %19 = alloca %"class.std::map.148", align 8
  %20 = alloca i32, align 4
  %21 = alloca %"struct.MIR::LValue", align 8
  %22 = alloca %"struct.std::pair.168", align 8
  %23 = alloca %"class.std::vector.9", align 8
  %24 = alloca %"class.MIR::LValue::Wrapper", align 4
  %25 = alloca %"class.MIR::LValue::Wrapper", align 4
  %26 = alloca %"class.std::vector.32", align 8
  %27 = alloca %"class.MIR::Param", align 8
  %28 = alloca %"class.HIR::GenericPath", align 8
  %29 = alloca %"struct.MIR::LValue", align 8
  %30 = alloca %"class.std::function.170", align 8
  %31 = alloca %class.anon.173, align 8
  %32 = alloca %"class.MIR::RValue", align 8
  %33 = alloca %"struct.MIR::RValue::Data_EnumVariant", align 8
  %34 = alloca %"class.std::set", align 8
  %35 = alloca %"class.__gnu_cxx::__normal_iterator.402", align 8
  %36 = alloca %"class.__gnu_cxx::__normal_iterator.402", align 8
  %37 = alloca %struct.Span, align 8
  %38 = alloca %"class.std::function", align 8
  %39 = alloca %class.anon.404, align 1
  %40 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %41 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
  %42 = alloca i32, align 4
  %43 = alloca %struct.Span, align 8
  %44 = alloca %"class.std::function", align 8
  %45 = alloca %class.anon.407, align 8
  %46 = alloca %"struct.HIR::VisEnt", align 8
  %47 = alloca %"struct.std::pair.168", align 8
  %48 = alloca %"class.std::vector.9", align 8
  %49 = alloca [4 x %"class.MIR::LValue::Wrapper"], align 4
  %50 = alloca %"class.std::allocator.11", align 1
  %51 = alloca %class.Rewriter, align 8
  %52 = alloca %"class.MIR::FunctionPointer", align 8
  %53 = alloca %class.TraceLog, align 8
  %54 = alloca %"class.std::function", align 8
  %55 = alloca %class.anon.416, align 1
  %56 = alloca %class.MirBuilder, align 8
  %57 = alloca %"class.HIR::TypeRef", align 8
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %7) #12
  %58 = tail call noundef zeroext i1 @_Z13debug_enabledv()
  %59 = select i1 %58, ptr @__func__._Z8LowerMIRRK18StaticTraitResolveRKN3HIR8ItemPathERKNS2_7ExprPtrERKNS2_7TypeRefERKSt6vectorISt4pairINS2_7PatternES9_ESaISF_EE, ptr null
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #12
  store ptr %2, ptr %9, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ8LowerMIRRK18StaticTraitResolveRKN3HIR8ItemPathERKNS7_7ExprPtrERKNS7_7TypeRefERKSt6vectorISt4pairINS7_7PatternESE_ESaISK_EEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull align 8 dereferenceable(8) %9) #12
  invoke void @_ZN8TraceLogC1EPKcSt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(40) %7, ptr noundef %59, ptr noundef nonnull %8)
          to label %60 unwind label %69

60:                                               ; preds = %6
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #12
  call void @llvm.lifetime.start.p0(i64 96, ptr nonnull %10) #12
  invoke void @_ZN3MIR8FunctionC2Ev(ptr noundef nonnull align 8 dereferenceable(96) %10)
          to label %61 unwind label %71

61:                                               ; preds = %60
  %62 = getelementptr inbounds i8, ptr %3, i64 8
  %63 = call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %62) #12
  invoke void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24) %10, i64 noundef %63)
          to label %64 unwind label %73

64:                                               ; preds = %61
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #12
  %65 = call ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %62) #12
  store ptr %65, ptr %11, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #12
  %66 = call ptr @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %62) #12
  store ptr %66, ptr %12, align 8
  %67 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(8) %12) #12
  br i1 %67, label %.lr.ph, label %._crit_edge

._crit_edge:                                      ; preds = %77, %64
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #12
  %68 = invoke noundef ptr @_ZNK3HIR7ExprPtrptEv(ptr noundef nonnull align 8 dereferenceable(72) %3)
          to label %85 unwind label %93

69:                                               ; preds = %6
  %70 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #12
  br label %467

71:                                               ; preds = %60
  %72 = landingpad { ptr, i32 }
          cleanup
  br label %466

73:                                               ; preds = %459, %454, %452, %449, %61
  %74 = landingpad { ptr, i32 }
          cleanup
  br label %465

.lr.ph:                                           ; preds = %64, %77
  %75 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %11) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #12
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %13, ptr noundef nonnull align 8 dereferenceable(8) %75)
          to label %76 unwind label %80

76:                                               ; preds = %.lr.ph
  invoke void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %10, ptr noundef nonnull align 8 dereferenceable(8) %13)
          to label %77 unwind label %82

77:                                               ; preds = %76
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %13) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #12
  %78 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %11) #12
  %79 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(8) %12) #12
  br i1 %79, label %.lr.ph, label %._crit_edge

80:                                               ; preds = %.lr.ph
  %81 = landingpad { ptr, i32 }
          cleanup
  br label %84

82:                                               ; preds = %76
  %83 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %13) #12
  br label %84

84:                                               ; preds = %82, %80
  %.pn179 = phi { ptr, i32 } [ %83, %82 ], [ %81, %80 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #12
  br label %465

85:                                               ; preds = %._crit_edge
  %86 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8ExprNode4spanEv(ptr noundef nonnull align 8 dereferenceable(28) %68)
  %87 = call noundef nonnull align 8 dereferenceable(28) ptr @_ZNK3HIR7ExprPtrdeEv(ptr noundef nonnull align 8 dereferenceable(72) %3)
  call void @llvm.lifetime.start.p0(i64 440, ptr nonnull %14) #12
  %88 = invoke noundef ptr @_ZNK3HIR7ExprPtrptEv(ptr noundef nonnull align 8 dereferenceable(72) %3)
          to label %89 unwind label %95

89:                                               ; preds = %85
  %90 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8ExprNode4spanEv(ptr noundef nonnull align 8 dereferenceable(28) %88)
  invoke void @_ZN10MirBuilderC1ERK4SpanRK18StaticTraitResolveRKN3HIR7TypeRefERKSt6vectorISt4pairINS6_7PatternES7_ESaISD_EERN3MIR8FunctionE(ptr noundef nonnull align 8 dereferenceable(440) %14, ptr noundef nonnull align 8 dereferenceable(8) %90, ptr noundef nonnull align 8 dereferenceable(424) %1, ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(96) %10)
          to label %91 unwind label %95

91:                                               ; preds = %89
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %15) #12
  %92 = call ptr @__dynamic_cast(ptr nonnull %87, ptr nonnull @_ZTIN3HIR8ExprNodeE, ptr nonnull @_ZTIN3HIR25ExprNode_GeneratorWrapperE, i64 0) #12
  invoke void @_ZN12_GLOBAL__N_116ExprVisitor_ConvC2ER10MirBuilderRKSt6vectorIN3HIR7TypeRefESaIS5_EEPKNS4_25ExprNode_GeneratorWrapperE(ptr noundef nonnull align 8 dereferenceable(128) %15, ptr noundef nonnull align 8 dereferenceable(440) %14, ptr noundef nonnull align 8 dereferenceable(24) %62, ptr noundef %92)
          to label %97 unwind label %102

93:                                               ; preds = %._crit_edge
  %94 = landingpad { ptr, i32 }
          cleanup
  br label %465

95:                                               ; preds = %89, %85
  %96 = landingpad { ptr, i32 }
          cleanup
  br label %458

97:                                               ; preds = %91
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #12
  %98 = call ptr @_ZNKSt6vectorISt4pairIN3HIR7PatternENS1_7TypeRefEESaIS4_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %5) #12
  store ptr %98, ptr %16, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #12
  %99 = call ptr @_ZNKSt6vectorISt4pairIN3HIR7PatternENS1_7TypeRefEESaIS4_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %5) #12
  store ptr %99, ptr %17, align 8
  %100 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKSt4pairIN3HIR7PatternENS2_7TypeRefEESt6vectorIS5_SaIS5_EEEEbRKNS_17__normal_iteratorIT_T0_EESG_(ptr noundef nonnull align 8 dereferenceable(8) %16, ptr noundef nonnull align 8 dereferenceable(8) %17) #12
  br i1 %100, label %.lr.ph193, label %._crit_edge194

._crit_edge194:                                   ; preds = %147, %97
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #12
  %101 = call ptr @__dynamic_cast(ptr nonnull %87, ptr nonnull @_ZTIN3HIR8ExprNodeE, ptr nonnull @_ZTIN3HIR25ExprNode_GeneratorWrapperE, i64 0) #12
  %.not = icmp eq ptr %101, null
  br i1 %.not, label %443, label %152

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

.lr.ph193:                                        ; preds = %97, %147
  %.0127191 = phi i32 [ %148, %147 ], [ 0, %97 ]
  %104 = call noundef nonnull align 8 dereferenceable(224) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKSt4pairIN3HIR7PatternENS2_7TypeRefEESt6vectorIS5_SaIS5_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %16) #12
  %105 = call noundef i64 @_ZNKSt6vectorIN3HIR14PatternBindingESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %104) #12
  %106 = icmp eq i64 %105, 1
  br i1 %106, label %107, label %117

107:                                              ; preds = %.lr.ph193
  %108 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNKSt6vectorIN3HIR14PatternBindingESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %104, i64 noundef 0) #12
  %109 = getelementptr inbounds i8, ptr %108, i64 4
  %110 = load i32, ptr %109, align 4, !tbaa !9
  %111 = icmp eq i32 %110, 0
  br i1 %111, label %112, label %117

112:                                              ; preds = %107
  %113 = getelementptr inbounds i8, ptr %104, i64 24
  %114 = call noundef zeroext i1 @_ZNK3HIR7Pattern4Data6is_AnyEv(ptr noundef nonnull align 8 dereferenceable(184) %113)
  br i1 %114, label %147, label %117

115:                                              ; preds = %141, %139, %137, %135, %133, %131, %129, %127, %125, %123, %120, %117
  %116 = landingpad { ptr, i32 }
          cleanup
  br label %151

117:                                              ; preds = %.lr.ph193, %107, %112
  %118 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %119 unwind label %115

119:                                              ; preds = %117
  br i1 %118, label %120, label %135

120:                                              ; preds = %119
  %121 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !15
  %122 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %121, ptr noundef nonnull @__func__._Z8LowerMIRRK18StaticTraitResolveRKN3HIR8ItemPathERKNS2_7ExprPtrERKNS2_7TypeRefERKSt6vectorISt4pairINS2_7PatternES9_ESaISF_EE)
          to label %123 unwind label %115

123:                                              ; preds = %120
  %124 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %122, ptr noundef nonnull @.str)
          to label %125 unwind label %115

125:                                              ; preds = %123
  %126 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %124, i32 noundef %.0127191)
          to label %127 unwind label %115

127:                                              ; preds = %125
  %128 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %126, ptr noundef nonnull @.str.1)
          to label %129 unwind label %115

129:                                              ; preds = %127
  %130 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIRlsERSoRKNS_7PatternE(ptr noundef nonnull align 8 dereferenceable(8) %128, ptr noundef nonnull align 8 dereferenceable(212) %104)
          to label %131 unwind label %115

131:                                              ; preds = %129
  %132 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %130, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %133 unwind label %115

133:                                              ; preds = %131
  %134 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %132, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %135 unwind label %115

135:                                              ; preds = %133, %119
  %136 = invoke noundef ptr @_ZNK3HIR7ExprPtrptEv(ptr noundef nonnull align 8 dereferenceable(72) %3)
          to label %137 unwind label %115

137:                                              ; preds = %135
  %138 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8ExprNode4spanEv(ptr noundef nonnull align 8 dereferenceable(28) %136)
  invoke void @_ZN12_GLOBAL__N_116ExprVisitor_Conv16define_vars_fromERK4SpanRKN3HIR7PatternE(ptr noundef nonnull align 8 dereferenceable(128) %15, ptr noundef nonnull align 8 dereferenceable(8) %138, ptr noundef nonnull align 8 dereferenceable(212) %104)
          to label %139 unwind label %115

139:                                              ; preds = %137
  %140 = invoke noundef ptr @_ZNK3HIR7ExprPtrptEv(ptr noundef nonnull align 8 dereferenceable(72) %3)
          to label %141 unwind label %115

141:                                              ; preds = %139
  %142 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8ExprNode4spanEv(ptr noundef nonnull align 8 dereferenceable(28) %140)
  invoke void @_ZN3MIR6LValue12new_ArgumentEj(ptr dead_on_unwind nonnull writable sret(%"struct.MIR::LValue") align 8 %18, i32 noundef %.0127191)
          to label %143 unwind label %115

143:                                              ; preds = %141
  invoke void @_Z16MIR_LowerHIR_LetR10MirBuilderR12MirConverterRK4SpanRKN3HIR7PatternEN3MIR6LValueEPKNS6_8ExprNodeE(ptr noundef nonnull align 8 dereferenceable(440) %14, ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(8) %142, ptr noundef nonnull align 8 dereferenceable(212) %104, ptr noundef nonnull %18, ptr noundef null)
          to label %144 unwind label %145

144:                                              ; preds = %143
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #12
  br label %147

145:                                              ; preds = %143
  %146 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #12
  br label %151

147:                                              ; preds = %112, %144
  %148 = add i32 %.0127191, 1
  %149 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKSt4pairIN3HIR7PatternENS2_7TypeRefEESt6vectorIS5_SaIS5_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %16) #12
  %150 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKSt4pairIN3HIR7PatternENS2_7TypeRefEESt6vectorIS5_SaIS5_EEEEbRKNS_17__normal_iteratorIT_T0_EESG_(ptr noundef nonnull align 8 dereferenceable(8) %16, ptr noundef nonnull align 8 dereferenceable(8) %17) #12
  br i1 %150, label %.lr.ph193, label %._crit_edge194

151:                                              ; preds = %145, %115
  %.pn173 = phi { ptr, i32 } [ %146, %145 ], [ %116, %115 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #12
  br label %456

152:                                              ; preds = %._crit_edge194
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %19) #12
  call void @_ZNSt3mapIjSt6vectorIN3MIR6LValue7WrapperESaIS3_EESt4lessIjESaISt4pairIKjS5_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %19) #12
  %153 = getelementptr inbounds i8, ptr %101, i64 120
  %154 = call noundef i64 @_ZNKSt6vectorIN3HIR10ValueUsageESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %153) #12
  %.not202 = icmp eq i64 %154, 0
  br i1 %.not202, label %._crit_edge198, label %.lr.ph197

._crit_edge198:                                   ; preds = %200, %152
  %155 = getelementptr inbounds i8, ptr %101, i64 48
  %156 = call noundef ptr @_ZNKSt10unique_ptrIN3HIR8ExprNodeESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %155) #12
  %157 = load ptr, ptr %156, align 8, !tbaa !16
  %158 = load ptr, ptr %157, align 8
  invoke void %158(ptr noundef nonnull align 8 dereferenceable(28) %156, ptr noundef nonnull align 8 dereferenceable(8) %15)
          to label %204 unwind label %222

.lr.ph197:                                        ; preds = %152, %200
  %.0128195 = phi i64 [ %167, %200 ], [ 0, %152 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %20) #12
  %159 = call noundef i64 @_ZNKSt6vectorISt4pairIN3HIR7PatternENS1_7TypeRefEESaIS4_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %5) #12
  %160 = add i64 %159, %.0128195
  %161 = trunc i64 %160 to i32
  store i32 %161, ptr %20, align 4, !tbaa !15
  invoke void @_ZN10MirBuilder15define_variableEj(ptr noundef nonnull align 8 dereferenceable(440) %14, i32 noundef %161)
          to label %162 unwind label %177

162:                                              ; preds = %.lr.ph197
  %163 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8ExprNode4spanEv(ptr noundef nonnull align 8 dereferenceable(28) %87)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %21) #12
  %164 = load i32, ptr %20, align 4, !tbaa !15
  invoke void @_ZN3MIR6LValue9new_LocalEj(ptr dead_on_unwind nonnull writable sret(%"struct.MIR::LValue") align 8 %21, i32 noundef %164)
          to label %165 unwind label %179

165:                                              ; preds = %162
  invoke void @_ZN10MirBuilder19mark_value_assignedERK4SpanRKN3MIR6LValueE(ptr noundef nonnull align 8 dereferenceable(440) %14, ptr noundef nonnull align 8 dereferenceable(8) %163, ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %166 unwind label %181

166:                                              ; preds = %165
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #12
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %22) #12
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %23) #12
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %24) #12
  %167 = add nuw i64 %.0128195, 1
  %168 = trunc i64 %167 to i32
  %169 = invoke i32 @_ZN3MIR6LValue7Wrapper9new_FieldEj(i32 noundef %168)
          to label %170 unwind label %184

170:                                              ; preds = %166
  store i32 %169, ptr %24, align 4
  invoke void @_Z9make_vec1IN3MIR6LValue7WrapperEESt6vectorIT_SaIS4_EEOS4_(ptr dead_on_unwind nonnull writable sret(%"class.std::vector.9") align 8 %23, ptr noundef nonnull align 4 dereferenceable(4) %24)
          to label %171 unwind label %184

171:                                              ; preds = %170
  invoke void @_ZSt9make_pairIRjSt6vectorIN3MIR6LValue7WrapperESaIS4_EEESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS8_INS9_IT0_E4typeEE6__typeEEOSA_OSF_(ptr dead_on_unwind nonnull writable sret(%"struct.std::pair.168") align 8 %22, ptr noundef nonnull align 4 dereferenceable(4) %20, ptr noundef nonnull align 8 dereferenceable(24) %23)
          to label %172 unwind label %186

172:                                              ; preds = %171
  %173 = invoke { ptr, i8 } @_ZNSt3mapIjSt6vectorIN3MIR6LValue7WrapperESaIS3_EESt4lessIjESaISt4pairIKjS5_EEE6insertIS8_IjS5_EEENSt9enable_ifIXsr16is_constructibleISA_T_EE5valueES8_ISt17_Rb_tree_iteratorISA_EbEE4typeEOSG_(ptr noundef nonnull align 8 dereferenceable(48) %19, ptr noundef nonnull align 8 dereferenceable(32) %22)
          to label %174 unwind label %188

174:                                              ; preds = %172
  call void @_ZNSt4pairIjSt6vectorIN3MIR6LValue7WrapperESaIS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #12
  call void @_ZNSt6vectorIN3MIR6LValue7WrapperESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #12
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %24) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %23) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #12
  %175 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIN3HIR10ValueUsageESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %153, i64 noundef %.0128195) #12
  %176 = load i32, ptr %175, align 4, !tbaa !18
  %.off = add i32 %176, -1
  %switch = icmp ult i32 %.off, 2
  br i1 %switch, label %192, label %200

177:                                              ; preds = %192, %.lr.ph197
  %178 = landingpad { ptr, i32 }
          cleanup
  br label %203

179:                                              ; preds = %162
  %180 = landingpad { ptr, i32 }
          cleanup
  br label %183

181:                                              ; preds = %165
  %182 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #12
  br label %183

183:                                              ; preds = %181, %179
  %.pn164 = phi { ptr, i32 } [ %182, %181 ], [ %180, %179 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #12
  br label %203

184:                                              ; preds = %170, %166
  %185 = landingpad { ptr, i32 }
          cleanup
  br label %191

186:                                              ; preds = %171
  %187 = landingpad { ptr, i32 }
          cleanup
  br label %190

188:                                              ; preds = %172
  %189 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt4pairIjSt6vectorIN3MIR6LValue7WrapperESaIS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #12
  br label %190

190:                                              ; preds = %188, %186
  %.pn166 = phi { ptr, i32 } [ %189, %188 ], [ %187, %186 ]
  call void @_ZNSt6vectorIN3MIR6LValue7WrapperESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #12
  br label %191

191:                                              ; preds = %190, %184
  %.pn166.pn = phi { ptr, i32 } [ %.pn166, %190 ], [ %185, %184 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %24) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %23) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #12
  br label %203

192:                                              ; preds = %174
  %193 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt3mapIjSt6vectorIN3MIR6LValue7WrapperESaIS3_EESt4lessIjESaISt4pairIKjS5_EEEixERS9_(ptr noundef nonnull align 8 dereferenceable(48) %19, ptr noundef nonnull align 4 dereferenceable(4) %20)
          to label %194 unwind label %177

194:                                              ; preds = %192
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %25) #12
  %195 = invoke i32 @_ZN3MIR6LValue7Wrapper9new_DerefEv()
          to label %196 unwind label %198

196:                                              ; preds = %194
  store i32 %195, ptr %25, align 4
  invoke void @_ZNSt6vectorIN3MIR6LValue7WrapperESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %193, ptr noundef nonnull align 4 dereferenceable(4) %25)
          to label %197 unwind label %198

197:                                              ; preds = %196
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %25) #12
  br label %200

198:                                              ; preds = %196, %194
  %199 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %25) #12
  br label %203

200:                                              ; preds = %174, %197
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #12
  %201 = call noundef i64 @_ZNKSt6vectorIN3HIR10ValueUsageESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %153) #12
  %202 = icmp ult i64 %167, %201
  br i1 %202, label %.lr.ph197, label %._crit_edge198, !llvm.loop !20

203:                                              ; preds = %198, %191, %183, %177
  %.pn169 = phi { ptr, i32 } [ %199, %198 ], [ %178, %177 ], [ %.pn166.pn, %191 ], [ %.pn164, %183 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #12
  br label %442

204:                                              ; preds = %._crit_edge198
  %205 = call noundef zeroext i1 @_ZNK10MirBuilder12block_activeEv(ptr noundef nonnull align 8 dereferenceable(440) %14)
  br i1 %205, label %206, label %246

206:                                              ; preds = %204
  %207 = call noundef zeroext i1 @_ZNK10MirBuilder10has_resultEv(ptr noundef nonnull align 8 dereferenceable(440) %14)
  br i1 %207, label %208, label %246

208:                                              ; preds = %206
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %26) #12
  call void @_ZNSt6vectorIN3MIR5ParamESaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %26) #12
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %27) #12
  %209 = call noundef ptr @_ZNKSt10unique_ptrIN3HIR8ExprNodeESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %155) #12
  %210 = getelementptr inbounds i8, ptr %209, i64 16
  invoke void @_ZN10MirBuilder19get_result_in_paramERK4SpanRKN3HIR7TypeRefEb(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Param") align 8 %27, ptr noundef nonnull align 8 dereferenceable(440) %14, ptr noundef nonnull align 8 dereferenceable(8) %86, ptr noundef nonnull align 8 dereferenceable(8) %210, i1 noundef zeroext false)
          to label %211 unwind label %224

211:                                              ; preds = %208
  invoke void @_ZNSt6vectorIN3MIR5ParamESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %26, ptr noundef nonnull align 8 dereferenceable(48) %27)
          to label %212 unwind label %226

212:                                              ; preds = %211
  call void @_ZN3MIR5ParamD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %27) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %27) #12
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %28) #12
  invoke void @_ZN3HIR11GenericPathC1Ev(ptr noundef nonnull align 8 dereferenceable(32) %28)
          to label %213 unwind label %229

213:                                              ; preds = %212
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %29) #12
  invoke void @_ZN3MIR6LValue10new_ReturnEv(ptr dead_on_unwind nonnull writable sret(%"struct.MIR::LValue") align 8 %29)
          to label %214 unwind label %231

214:                                              ; preds = %213
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %31) #12
  store ptr %28, ptr %31, align 8, !tbaa !5
  %215 = getelementptr inbounds i8, ptr %31, i64 8
  store ptr %86, ptr %215, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRKN3HIR7TypeRefEEEC2IZ8LowerMIRRK18StaticTraitResolveRKNS0_8ItemPathERKNS0_7ExprPtrES3_RKSt6vectorISt4pairINS0_7PatternES1_ESaISJ_EEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %30, ptr noundef nonnull align 8 dereferenceable(16) %31) #12
  invoke void @_ZNK10MirBuilder13with_val_typeERK4SpanRKN3MIR6LValueESt8functionIFvRKN3HIR7TypeRefEEEPKNS4_7WrapperE(ptr noundef nonnull align 8 dereferenceable(440) %14, ptr noundef nonnull align 8 dereferenceable(8) %86, ptr noundef nonnull align 8 dereferenceable(32) %29, ptr noundef nonnull %30, ptr noundef null)
          to label %216 unwind label %233

216:                                              ; preds = %214
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %31) #12
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #12
  invoke void @_ZN3HIR11GenericPathC2EOS0_(ptr noundef nonnull align 8 dereferenceable(32) %33, ptr noundef nonnull align 8 dereferenceable(32) %28)
          to label %217 unwind label %236

217:                                              ; preds = %216
  %218 = getelementptr inbounds i8, ptr %33, i64 32
  store i32 1, ptr %218, align 8, !tbaa !22
  %219 = getelementptr inbounds i8, ptr %33, i64 40
  call void @_ZNSt6vectorIN3MIR5ParamESaIS1_EEC2EOS3_(ptr noundef nonnull align 8 dereferenceable(24) %219, ptr noundef nonnull align 8 dereferenceable(24) %26) #12
  invoke void @_ZN3MIR6RValue16make_EnumVariantENS0_16Data_EnumVariantE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::RValue") align 8 %32, ptr noundef nonnull %33)
          to label %220 unwind label %238

220:                                              ; preds = %217
  invoke void @_ZN10MirBuilder10set_resultERK4SpanN3MIR6RValueE(ptr noundef nonnull align 8 dereferenceable(440) %14, ptr noundef nonnull align 8 dereferenceable(8) %86, ptr noundef nonnull %32)
          to label %221 unwind label %240

221:                                              ; preds = %220
  call void @_ZN3MIR6RValueD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %32) #12
  call void @_ZN3MIR6RValue16Data_EnumVariantD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %33) #12
  call void @_ZN3HIR11GenericPathD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %28) #12
  call void @_ZNSt6vectorIN3MIR5ParamESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %26) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %26) #12
  br label %246

222:                                              ; preds = %246, %._crit_edge198
  %223 = landingpad { ptr, i32 }
          cleanup
  br label %442

224:                                              ; preds = %208
  %225 = landingpad { ptr, i32 }
          cleanup
  br label %228

226:                                              ; preds = %211
  %227 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR5ParamD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %27) #12
  br label %228

228:                                              ; preds = %226, %224
  %.pn = phi { ptr, i32 } [ %227, %226 ], [ %225, %224 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %27) #12
  br label %245

229:                                              ; preds = %212
  %230 = landingpad { ptr, i32 }
          cleanup
  br label %244

231:                                              ; preds = %213
  %232 = landingpad { ptr, i32 }
          cleanup
  br label %235

233:                                              ; preds = %214
  %234 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %31) #12
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #12
  br label %235

235:                                              ; preds = %233, %231
  %.pn132 = phi { ptr, i32 } [ %234, %233 ], [ %232, %231 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #12
  br label %243

236:                                              ; preds = %216
  %237 = landingpad { ptr, i32 }
          cleanup
  br label %243

238:                                              ; preds = %217
  %239 = landingpad { ptr, i32 }
          cleanup
  br label %242

240:                                              ; preds = %220
  %241 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR6RValueD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %32) #12
  br label %242

242:                                              ; preds = %240, %238
  %.pn134 = phi { ptr, i32 } [ %241, %240 ], [ %239, %238 ]
  call void @_ZN3MIR6RValue16Data_EnumVariantD2Ev(ptr noundef nonnull align 8 dereferenceable(64) %33) #12
  br label %243

243:                                              ; preds = %242, %236, %235
  %.pn134.pn = phi { ptr, i32 } [ %.pn134, %242 ], [ %237, %236 ], [ %.pn132, %235 ]
  call void @_ZN3HIR11GenericPathD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #12
  br label %244

244:                                              ; preds = %243, %229
  %.pn134.pn.pn = phi { ptr, i32 } [ %.pn134.pn, %243 ], [ %230, %229 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %28) #12
  br label %245

245:                                              ; preds = %244, %228
  %.pn134.pn.pn.pn = phi { ptr, i32 } [ %.pn134.pn.pn, %244 ], [ %.pn, %228 ]
  call void @_ZNSt6vectorIN3MIR5ParamESaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %26) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %26) #12
  br label %442

246:                                              ; preds = %221, %206, %204
  invoke void @_ZN10MirBuilder13final_cleanupEv(ptr noundef nonnull align 8 dereferenceable(440) %14)
          to label %247 unwind label %222

247:                                              ; preds = %246
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %34) #12
  %248 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8ExprNode4spanEv(ptr noundef nonnull align 8 dereferenceable(28) %101)
  %249 = getelementptr inbounds i8, ptr %1, i64 8
  %250 = load ptr, ptr %249, align 8, !tbaa !35
  %251 = getelementptr inbounds i8, ptr %101, i64 104
  %252 = invoke noundef nonnull align 8 dereferenceable(200) ptr @_ZNK3HIR5Crate16get_enum_by_pathERK4SpanRKNS_10SimplePathEbb(ptr noundef nonnull align 8 dereferenceable(944) %250, ptr noundef nonnull align 8 dereferenceable(8) %86, ptr noundef nonnull align 8 dereferenceable(8) %251, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %253 unwind label %281

253:                                              ; preds = %247
  invoke void @_ZN12_GLOBAL__N_116ExprVisitor_Conv18generator_finaliseERK4SpanRN3HIR4EnumE(ptr dead_on_unwind nonnull writable sret(%"class.std::set") align 8 %34, ptr noundef nonnull align 8 dereferenceable(128) %15, ptr noundef nonnull align 8 dereferenceable(8) %248, ptr noundef nonnull align 8 dereferenceable(200) %252)
          to label %254 unwind label %281

254:                                              ; preds = %253
  %255 = getelementptr inbounds i8, ptr %101, i64 96
  %256 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %255)
  %257 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %256)
  %258 = getelementptr inbounds i8, ptr %257, i64 88
  %259 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR15TypePathBinding9as_StructEv(ptr noundef nonnull align 8 dereferenceable(16) %258)
  %260 = load ptr, ptr %259, align 8, !tbaa !5
  %261 = load ptr, ptr %249, align 8, !tbaa !35
  %262 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR8ExprNode4spanEv(ptr noundef nonnull align 8 dereferenceable(28) %101)
  %263 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR5Crate18get_lang_item_pathERK4SpanPKc(ptr noundef nonnull align 8 dereferenceable(944) %261, ptr noundef nonnull align 8 dereferenceable(8) %262, ptr noundef nonnull @.str.2)
          to label %264 unwind label %283

264:                                              ; preds = %254
  %265 = invoke noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR5Crate17get_union_by_pathERK4SpanRKNS_10SimplePathE(ptr noundef nonnull align 8 dereferenceable(944) %261, ptr noundef nonnull align 8 dereferenceable(8) %86, ptr noundef nonnull align 8 dereferenceable(8) %263)
          to label %266 unwind label %283

266:                                              ; preds = %264
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %35) #12
  %267 = getelementptr inbounds i8, ptr %265, i64 104
  %268 = call ptr @_ZNKSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %267) #12
  %269 = call ptr @_ZNKSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %267) #12
  %270 = invoke ptr @"_ZSt7find_ifIN9__gnu_cxx17__normal_iteratorIPKSt4pairI8RcStringN3HIR6VisEntINS4_7TypeRefEEEESt6vectorIS8_SaIS8_EEEEZ8LowerMIRRK18StaticTraitResolveRKNS4_8ItemPathERKNS4_7ExprPtrERKS6_RKSB_IS2_INS4_7PatternES6_ESaISR_EEE3$_5ET_SX_SX_T0_"(ptr %268, ptr %269)
          to label %271 unwind label %285

271:                                              ; preds = %266
  store ptr %270, ptr %35, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %36) #12
  %272 = call ptr @_ZNKSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %267) #12
  store ptr %272, ptr %36, align 8
  %273 = call noundef i64 @_ZN9__gnu_cxxmiIPKSt4pairI8RcStringN3HIR6VisEntINS3_7TypeRefEEEESt6vectorIS7_SaIS7_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSG_SJ_(ptr noundef nonnull align 8 dereferenceable(8) %35, ptr noundef nonnull align 8 dereferenceable(8) %36) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #12
  %274 = and i64 %273, 4294967295
  %275 = icmp eq i64 %274, 1
  br i1 %275, label %296, label %276

276:                                              ; preds = %271
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %37) #12
  invoke void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %37, ptr noundef nonnull align 8 dereferenceable(8) %86)
          to label %277 unwind label %287

277:                                              ; preds = %276
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %39) #12
  call void @"_ZNSt8functionIFvRSoEEC2IZ8LowerMIRRK18StaticTraitResolveRKN3HIR8ItemPathERKNS7_7ExprPtrERKNS7_7TypeRefERKSt6vectorISt4pairINS7_7PatternESE_ESaISK_EEE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %38, ptr noundef nonnull align 1 dereferenceable(1) %39) #12
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %37, ptr noundef nonnull %38)
          to label %278 unwind label %289

278:                                              ; preds = %277
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #12
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %39) #12
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %37) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #12
  %279 = call ptr @__cxa_allocate_exception(i64 16) #12
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %279, ptr noundef nonnull @.str.3)
          to label %280 unwind label %292

280:                                              ; preds = %278
  invoke void @__cxa_throw(ptr nonnull %279, ptr nonnull @_ZTISt13runtime_error, ptr nonnull @_ZNSt13runtime_errorD1Ev) #13
          to label %468 unwind label %294

281:                                              ; preds = %253, %247
  %282 = landingpad { ptr, i32 }
          cleanup
  br label %441

283:                                              ; preds = %264, %254
  %284 = landingpad { ptr, i32 }
          cleanup
  br label %440

285:                                              ; preds = %266
  %286 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #12
  br label %440

287:                                              ; preds = %276
  %288 = landingpad { ptr, i32 }
          cleanup
  br label %291

289:                                              ; preds = %277
  %290 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #12
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %39) #12
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %37) #12
  br label %291

291:                                              ; preds = %289, %287
  %.pn141 = phi { ptr, i32 } [ %290, %289 ], [ %288, %287 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #12
  br label %440

292:                                              ; preds = %278
  %293 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %279) #12
  br label %440

294:                                              ; preds = %280
  %295 = landingpad { ptr, i32 }
          cleanup
  br label %440

296:                                              ; preds = %271
  %297 = getelementptr inbounds i8, ptr %260, i64 104
  %298 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN3HIR6Struct4Data8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(32) %297)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %40) #12
  %299 = call ptr @_ZNKSt3setIjSt4lessIjESaIjEE5beginEv(ptr noundef nonnull align 8 dereferenceable(48) %34) #12
  store ptr %299, ptr %40, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %41) #12
  %300 = call ptr @_ZNKSt3setIjSt4lessIjESaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %34) #12
  store ptr %300, ptr %41, align 8
  %301 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorIjES2_(ptr noundef nonnull align 8 dereferenceable(8) %40, ptr noundef nonnull align 8 dereferenceable(8) %41) #12
  br i1 %301, label %.lr.ph200, label %._crit_edge201

.lr.ph200:                                        ; preds = %296
  %302 = getelementptr inbounds i8, ptr %46, i64 16
  %303 = getelementptr inbounds i8, ptr %49, i64 4
  %304 = getelementptr inbounds i8, ptr %49, i64 8
  %305 = getelementptr inbounds i8, ptr %49, i64 12
  br label %309

._crit_edge201:                                   ; preds = %377, %296
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %40) #12
  %306 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %380 unwind label %307

307:                                              ; preds = %392, %390, %388, %386, %384, %381, %._crit_edge201
  %308 = landingpad { ptr, i32 }
          cleanup
  br label %440

309:                                              ; preds = %.lr.ph200, %377
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %42) #12
  %310 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNKSt23_Rb_tree_const_iteratorIjEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %40) #12
  %311 = load i32, ptr %310, align 4, !tbaa !15
  store i32 %311, ptr %42, align 4, !tbaa !15
  %312 = zext i32 %311 to i64
  %313 = call noundef i64 @_ZNKSt6vectorIN3HIR10ValueUsageESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %153) #12
  %314 = add i64 %313, 1
  %315 = icmp ugt i64 %314, %312
  br i1 %315, label %377, label %316

316:                                              ; preds = %309
  %317 = call noundef i64 @_ZNKSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %298) #12
  %318 = load i32, ptr %42, align 4, !tbaa !15
  %319 = zext i32 %318 to i64
  %320 = call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %10) #12
  %321 = icmp ugt i64 %320, %319
  br i1 %321, label %337, label %322

322:                                              ; preds = %316
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %43) #12
  invoke void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %43, ptr noundef nonnull align 8 dereferenceable(8) %86)
          to label %323 unwind label %328

323:                                              ; preds = %322
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %45) #12
  store ptr %42, ptr %45, align 8, !tbaa !5
  %324 = getelementptr inbounds i8, ptr %45, i64 8
  store ptr %10, ptr %324, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ8LowerMIRRK18StaticTraitResolveRKN3HIR8ItemPathERKNS7_7ExprPtrERKNS7_7TypeRefERKSt6vectorISt4pairINS7_7PatternESE_ESaISK_EEE3$_3vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %44, ptr noundef nonnull align 8 dereferenceable(16) %45) #12
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %43, ptr noundef nonnull %44)
          to label %325 unwind label %330

325:                                              ; preds = %323
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %45) #12
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %43) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %43) #12
  %326 = call ptr @__cxa_allocate_exception(i64 16) #12
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %326, ptr noundef nonnull @.str.3)
          to label %327 unwind label %333

327:                                              ; preds = %325
  invoke void @__cxa_throw(ptr nonnull %326, ptr nonnull @_ZTISt13runtime_error, ptr nonnull @_ZNSt13runtime_errorD1Ev) #13
          to label %468 unwind label %335

328:                                              ; preds = %322
  %329 = landingpad { ptr, i32 }
          cleanup
  br label %332

330:                                              ; preds = %323
  %331 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %45) #12
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %43) #12
  br label %332

332:                                              ; preds = %330, %328
  %.pn152 = phi { ptr, i32 } [ %331, %330 ], [ %329, %328 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %43) #12
  br label %376

333:                                              ; preds = %325
  %334 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %326) #12
  br label %376

335:                                              ; preds = %327
  %336 = landingpad { ptr, i32 }
          cleanup
  br label %376

337:                                              ; preds = %316
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %46) #12
  invoke void @_ZN3HIR9Publicity8new_noneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::Publicity") align 8 %46)
          to label %338 unwind label %358

338:                                              ; preds = %337
  %339 = load i32, ptr %42, align 4, !tbaa !15
  %340 = zext i32 %339 to i64
  %341 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %10, i64 noundef %340)
          to label %342 unwind label %360

342:                                              ; preds = %338
  invoke void @_ZNK3HIR7TypeRef5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %302, ptr noundef nonnull align 8 dereferenceable(8) %341)
          to label %343 unwind label %360

343:                                              ; preds = %342
  invoke void @_ZNSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(24) %298, ptr noundef nonnull align 8 dereferenceable(24) %46)
          to label %344 unwind label %362

344:                                              ; preds = %343
  call void @_ZN3HIR6VisEntINS_7TypeRefEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %46) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %46) #12
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %47) #12
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %48) #12
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %49) #12
  %345 = invoke i32 @_ZN3MIR6LValue7Wrapper9new_FieldEj(i32 noundef 0)
          to label %346 unwind label %365

346:                                              ; preds = %344
  store i32 %345, ptr %49, align 4
  %347 = invoke i32 @_ZN3MIR6LValue7Wrapper12new_DowncastEj(i32 noundef 1)
          to label %348 unwind label %365

348:                                              ; preds = %346
  store i32 %347, ptr %303, align 4
  %349 = invoke i32 @_ZN3MIR6LValue7Wrapper9new_FieldEj(i32 noundef 0)
          to label %350 unwind label %365

350:                                              ; preds = %348
  store i32 %349, ptr %304, align 4
  %351 = trunc i64 %317 to i32
  %352 = invoke i32 @_ZN3MIR6LValue7Wrapper9new_FieldEj(i32 noundef %351)
          to label %353 unwind label %365

353:                                              ; preds = %350
  store i32 %352, ptr %305, align 4
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %50) #12
  call void @_ZNSaIN3MIR6LValue7WrapperEEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %50) #12
  invoke void @_ZNSt6vectorIN3MIR6LValue7WrapperESaIS2_EEC2ESt16initializer_listIS2_ERKS3_(ptr noundef nonnull align 8 dereferenceable(24) %48, ptr nonnull %49, i64 4, ptr noundef nonnull align 1 dereferenceable(1) %50)
          to label %354 unwind label %367

354:                                              ; preds = %353
  invoke void @_ZSt9make_pairIRjSt6vectorIN3MIR6LValue7WrapperESaIS4_EEESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS8_INS9_IT0_E4typeEE6__typeEEOSA_OSF_(ptr dead_on_unwind nonnull writable sret(%"struct.std::pair.168") align 8 %47, ptr noundef nonnull align 4 dereferenceable(4) %42, ptr noundef nonnull align 8 dereferenceable(24) %48)
          to label %355 unwind label %369

355:                                              ; preds = %354
  %356 = invoke { ptr, i8 } @_ZNSt3mapIjSt6vectorIN3MIR6LValue7WrapperESaIS3_EESt4lessIjESaISt4pairIKjS5_EEE6insertIS8_IjS5_EEENSt9enable_ifIXsr16is_constructibleISA_T_EE5valueES8_ISt17_Rb_tree_iteratorISA_EbEE4typeEOSG_(ptr noundef nonnull align 8 dereferenceable(48) %19, ptr noundef nonnull align 8 dereferenceable(32) %47)
          to label %357 unwind label %371

357:                                              ; preds = %355
  call void @_ZNSt4pairIjSt6vectorIN3MIR6LValue7WrapperESaIS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #12
  call void @_ZNSt6vectorIN3MIR6LValue7WrapperESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %48) #12
  call void @_ZNSt15__new_allocatorIN3MIR6LValue7WrapperEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %50) #12
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %50) #12
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %49) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %48) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %47) #12
  br label %377

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

360:                                              ; preds = %342, %338
  %361 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR9PublicityD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %46) #12
  br label %364

362:                                              ; preds = %343
  %363 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR6VisEntINS_7TypeRefEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %46) #12
  br label %364

364:                                              ; preds = %362, %360, %358
  %.pn154 = phi { ptr, i32 } [ %363, %362 ], [ %361, %360 ], [ %359, %358 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %46) #12
  br label %376

365:                                              ; preds = %350, %348, %346, %344
  %366 = landingpad { ptr, i32 }
          cleanup
  br label %375

367:                                              ; preds = %353
  %368 = landingpad { ptr, i32 }
          cleanup
  br label %374

369:                                              ; preds = %354
  %370 = landingpad { ptr, i32 }
          cleanup
  br label %373

371:                                              ; preds = %355
  %372 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt4pairIjSt6vectorIN3MIR6LValue7WrapperESaIS3_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #12
  br label %373

373:                                              ; preds = %371, %369
  %.pn156 = phi { ptr, i32 } [ %372, %371 ], [ %370, %369 ]
  call void @_ZNSt6vectorIN3MIR6LValue7WrapperESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %48) #12
  br label %374

374:                                              ; preds = %373, %367
  %.pn156.pn = phi { ptr, i32 } [ %.pn156, %373 ], [ %368, %367 ]
  call void @_ZNSt15__new_allocatorIN3MIR6LValue7WrapperEED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %50) #12
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %50) #12
  br label %375

375:                                              ; preds = %374, %365
  %.pn156.pn.pn = phi { ptr, i32 } [ %.pn156.pn, %374 ], [ %366, %365 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %49) #12
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %48) #12
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %47) #12
  br label %376

376:                                              ; preds = %375, %364, %335, %333, %332
  %.pn156.pn.pn.pn = phi { ptr, i32 } [ %.pn156.pn.pn, %375 ], [ %.pn154, %364 ], [ %336, %335 ], [ %334, %333 ], [ %.pn152, %332 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %42) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %40) #12
  br label %440

377:                                              ; preds = %309, %357
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %42) #12
  %378 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt23_Rb_tree_const_iteratorIjEppEv(ptr noundef nonnull align 8 dereferenceable(8) %40) #12
  %379 = call noundef zeroext i1 @_ZStneRKSt23_Rb_tree_const_iteratorIjES2_(ptr noundef nonnull align 8 dereferenceable(8) %40, ptr noundef nonnull align 8 dereferenceable(8) %41) #12
  br i1 %379, label %309, label %._crit_edge201

380:                                              ; preds = %._crit_edge201
  br i1 %306, label %381, label %394

381:                                              ; preds = %380
  %382 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !15
  %383 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %382, ptr noundef nonnull @__func__._Z8LowerMIRRK18StaticTraitResolveRKN3HIR8ItemPathERKNS2_7ExprPtrERKNS2_7TypeRefERKSt6vectorISt4pairINS2_7PatternES9_ESaISF_EE)
          to label %384 unwind label %307

384:                                              ; preds = %381
  %385 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %383, ptr noundef nonnull @.str.4)
          to label %386 unwind label %307

386:                                              ; preds = %384
  %387 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsIjSt6vectorIN3MIR6LValue7WrapperESaIS3_EESt4lessIjEERSoS8_RKSt3mapIT_T0_T1_SaISt4pairIKSA_SB_EEE(ptr noundef nonnull align 8 dereferenceable(8) %385, ptr noundef nonnull align 8 dereferenceable(48) %19)
          to label %388 unwind label %307

388:                                              ; preds = %386
  %389 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %387, ptr noundef nonnull @.str.5)
          to label %390 unwind label %307

390:                                              ; preds = %388
  %391 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %389, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %392 unwind label %307

392:                                              ; preds = %390
  %393 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %391, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %394 unwind label %307

394:                                              ; preds = %392, %380
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %51) #12
  call void @_ZZ8LowerMIRRK18StaticTraitResolveRKN3HIR8ItemPathERKNS2_7ExprPtrERKNS2_7TypeRefERKSt6vectorISt4pairINS2_7PatternES9_ESaISF_EEEN8RewriterC2ERSt3mapIjSC_IN3MIR6LValue7WrapperESaISO_EESt4lessIjESaISD_IKjSQ_EEE(ptr noundef nonnull align 8 dereferenceable(40) %51, ptr noundef nonnull align 8 dereferenceable(48) %19)
  invoke void @_ZZ8LowerMIRRK18StaticTraitResolveRKN3HIR8ItemPathERKNS2_7ExprPtrERKNS2_7TypeRefERKSt6vectorISt4pairINS2_7PatternES9_ESaISF_EEEN8Rewriter11rewrite_fcnERN3MIR8FunctionE(ptr noundef nonnull align 8 dereferenceable(40) %51, ptr noundef nonnull align 8 dereferenceable(96) %10)
          to label %395 unwind label %417

395:                                              ; preds = %394
  call void @_ZZ8LowerMIRRK18StaticTraitResolveRKN3HIR8ItemPathERKNS2_7ExprPtrERKNS2_7TypeRefERKSt6vectorISt4pairINS2_7PatternES9_ESaISF_EEEN8RewriterD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %51) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %51) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %52) #12
  %396 = invoke noalias noundef nonnull dereferenceable(96) ptr @_Znwm(i64 noundef 96) #14
          to label %397 unwind label %419

397:                                              ; preds = %395
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(96) %396, i8 0, i64 96, i1 false)
  invoke void @_ZN3MIR8FunctionC2Ev(ptr noundef nonnull align 8 dereferenceable(96) %396)
          to label %398 unwind label %421

398:                                              ; preds = %397
  call void @_ZN3MIR15FunctionPointerC2EPNS_8FunctionE(ptr noundef nonnull align 8 dereferenceable(8) %52, ptr noundef nonnull %396)
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %53) #12
  %399 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %400 unwind label %423

400:                                              ; preds = %398
  %401 = select i1 %399, ptr @__func__._Z8LowerMIRRK18StaticTraitResolveRKN3HIR8ItemPathERKNS2_7ExprPtrERKNS2_7TypeRefERKSt6vectorISt4pairINS2_7PatternES9_ESaISF_EE, ptr null
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %55) #12
  call void @"_ZNSt8functionIFvRSoEEC2IZ8LowerMIRRK18StaticTraitResolveRKN3HIR8ItemPathERKNS7_7ExprPtrERKNS7_7TypeRefERKSt6vectorISt4pairINS7_7PatternESE_ESaISK_EEE3$_4vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %54, ptr noundef nonnull align 1 dereferenceable(1) %55) #12
  invoke void @_ZN8TraceLogC1EPKcSt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(40) %53, ptr noundef %401, ptr noundef nonnull %54)
          to label %402 unwind label %425

402:                                              ; preds = %400
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #12
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %55) #12
  call void @llvm.lifetime.start.p0(i64 440, ptr nonnull %56) #12
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %57) #12
  invoke void @_ZN3HIR7TypeRef8new_unitEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %57)
          to label %403 unwind label %427

403:                                              ; preds = %402
  %404 = getelementptr inbounds i8, ptr %101, i64 112
  %405 = load ptr, ptr %404, align 8, !tbaa !52
  %406 = invoke noundef nonnull align 8 dereferenceable(96) ptr @_ZN3MIR15FunctionPointerdeEv(ptr noundef nonnull align 8 dereferenceable(8) %52)
          to label %407 unwind label %429

407:                                              ; preds = %403
  %408 = getelementptr inbounds i8, ptr %405, i64 208
  invoke void @_ZN10MirBuilderC1ERK4SpanRK18StaticTraitResolveRKN3HIR7TypeRefERKSt6vectorISt4pairINS6_7PatternES7_ESaISD_EERN3MIR8FunctionE(ptr noundef nonnull align 8 dereferenceable(440) %56, ptr noundef nonnull align 8 dereferenceable(8) %86, ptr noundef nonnull align 8 dereferenceable(424) %1, ptr noundef nonnull align 8 dereferenceable(8) %57, ptr noundef nonnull align 8 dereferenceable(24) %408, ptr noundef nonnull align 8 dereferenceable(96) %406)
          to label %409 unwind label %429

409:                                              ; preds = %407
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %57) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %57) #12
  %410 = call noundef i64 @_ZNKSt6vectorIN3HIR10ValueUsageESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %153) #12
  invoke void @_ZNK12_GLOBAL__N_116ExprVisitor_Conv19generator_make_dropERK4SpanR10MirBuildermRKSt3mapIjSt6vectorIN3MIR6LValue7WrapperESaISA_EESt4lessIjESaISt4pairIKjSC_EEE(ptr noundef nonnull align 8 dereferenceable(128) %15, ptr noundef nonnull align 8 dereferenceable(8) %86, ptr noundef nonnull align 8 dereferenceable(440) %56, i64 noundef %410, ptr noundef nonnull align 8 dereferenceable(48) %19)
          to label %411 unwind label %432

411:                                              ; preds = %409
  invoke void @_ZN10MirBuilder13final_cleanupEv(ptr noundef nonnull align 8 dereferenceable(440) %56)
          to label %412 unwind label %432

412:                                              ; preds = %411
  call void @_ZN10MirBuilderD2Ev(ptr noundef nonnull align 8 dereferenceable(440) %56) #12
  call void @llvm.lifetime.end.p0(i64 440, ptr nonnull %56) #12
  call void @_ZN8TraceLogD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %53) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %53) #12
  %413 = load ptr, ptr %404, align 8, !tbaa !52
  %414 = getelementptr inbounds i8, ptr %413, i64 304
  %415 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIR15FunctionPointeraSEOS0_(ptr noundef nonnull align 8 dereferenceable(8) %414, ptr noundef nonnull align 8 dereferenceable(8) %52)
          to label %416 unwind label %436

416:                                              ; preds = %412
  call void @_ZN3MIR15FunctionPointerD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %52) #12
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %52) #12
  call void @_ZNSt3setIjSt4lessIjESaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %34) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %34) #12
  call void @_ZNSt3mapIjSt6vectorIN3MIR6LValue7WrapperESaIS3_EESt4lessIjESaISt4pairIKjS5_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %19) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %19) #12
  br label %449

417:                                              ; preds = %394
  %418 = landingpad { ptr, i32 }
          cleanup
  call void @_ZZ8LowerMIRRK18StaticTraitResolveRKN3HIR8ItemPathERKNS2_7ExprPtrERKNS2_7TypeRefERKSt6vectorISt4pairINS2_7PatternES9_ESaISF_EEEN8RewriterD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %51) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %51) #12
  br label %440

419:                                              ; preds = %395
  %420 = landingpad { ptr, i32 }
          cleanup
  br label %439

421:                                              ; preds = %397
  %422 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %396, i64 noundef 96) #15
  br label %439

423:                                              ; preds = %398
  %424 = landingpad { ptr, i32 }
          cleanup
  br label %435

425:                                              ; preds = %400
  %426 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #12
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %55) #12
  br label %435

427:                                              ; preds = %402
  %428 = landingpad { ptr, i32 }
          cleanup
  br label %431

429:                                              ; preds = %407, %403
  %430 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %57) #12
  br label %431

431:                                              ; preds = %429, %427
  %.pn143 = phi { ptr, i32 } [ %430, %429 ], [ %428, %427 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %57) #12
  br label %434

432:                                              ; preds = %411, %409
  %433 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN10MirBuilderD2Ev(ptr noundef nonnull align 8 dereferenceable(440) %56) #12
  br label %434

434:                                              ; preds = %432, %431
  %.pn145 = phi { ptr, i32 } [ %433, %432 ], [ %.pn143, %431 ]
  call void @llvm.lifetime.end.p0(i64 440, ptr nonnull %56) #12
  call void @_ZN8TraceLogD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %53) #12
  br label %435

435:                                              ; preds = %434, %425, %423
  %.pn145.pn = phi { ptr, i32 } [ %.pn145, %434 ], [ %426, %425 ], [ %424, %423 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %53) #12
  br label %438

436:                                              ; preds = %412
  %437 = landingpad { ptr, i32 }
          cleanup
  br label %438

438:                                              ; preds = %436, %435
  %.pn148 = phi { ptr, i32 } [ %437, %436 ], [ %.pn145.pn, %435 ]
  call void @_ZN3MIR15FunctionPointerD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %52) #12
  br label %439

439:                                              ; preds = %438, %421, %419
  %.pn148.pn = phi { ptr, i32 } [ %.pn148, %438 ], [ %422, %421 ], [ %420, %419 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %52) #12
  br label %440

440:                                              ; preds = %307, %376, %417, %439, %283, %285, %294, %292, %291
  %.pn156.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %295, %294 ], [ %293, %292 ], [ %.pn141, %291 ], [ %286, %285 ], [ %284, %283 ], [ %.pn156.pn.pn.pn, %376 ], [ %.pn148.pn, %439 ], [ %418, %417 ], [ %308, %307 ]
  call void @_ZNSt3setIjSt4lessIjESaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %34) #12
  br label %441

441:                                              ; preds = %440, %281
  %.pn156.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn156.pn.pn.pn.pn.pn, %440 ], [ %282, %281 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %34) #12
  br label %442

442:                                              ; preds = %441, %245, %222, %203
  %.pn169.pn = phi { ptr, i32 } [ %.pn169, %203 ], [ %.pn156.pn.pn.pn.pn.pn.pn, %441 ], [ %223, %222 ], [ %.pn134.pn.pn.pn, %245 ]
  call void @_ZNSt3mapIjSt6vectorIN3MIR6LValue7WrapperESaIS3_EESt4lessIjESaISt4pairIKjS5_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %19) #12
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %19) #12
  br label %456

443:                                              ; preds = %._crit_edge194
  %444 = load ptr, ptr %87, align 8, !tbaa !16
  %445 = load ptr, ptr %444, align 8
  invoke void %445(ptr noundef nonnull align 8 dereferenceable(28) %87, ptr noundef nonnull align 8 dereferenceable(8) %15)
          to label %446 unwind label %447

446:                                              ; preds = %443
  invoke void @_ZN10MirBuilder13final_cleanupEv(ptr noundef nonnull align 8 dereferenceable(440) %14)
          to label %449 unwind label %447

447:                                              ; preds = %446, %443
  %448 = landingpad { ptr, i32 }
          cleanup
  br label %456

449:                                              ; preds = %446, %416
  call void @_ZN12_GLOBAL__N_116ExprVisitor_ConvD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %15) #12
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %15) #12
  call void @_ZN10MirBuilderD2Ev(ptr noundef nonnull align 8 dereferenceable(440) %14) #12
  call void @llvm.lifetime.end.p0(i64 440, ptr nonnull %14) #12
  invoke void @_Z12MIR_ValidateRK18StaticTraitResolveRKN3HIR8ItemPathERKN3MIR8FunctionERKSt6vectorISt4pairINS2_7PatternENS2_7TypeRefEESaISE_EERKSD_(ptr noundef nonnull align 8 dereferenceable(424) %1, ptr noundef nonnull align 8 dereferenceable(56) %2, ptr noundef nonnull align 8 dereferenceable(96) %10, ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %4)
          to label %450 unwind label %73

450:                                              ; preds = %449
  %451 = call ptr @getenv(ptr noundef nonnull @.str.6) #12
  %.not151 = icmp eq ptr %451, null
  br i1 %.not151, label %459, label %452

452:                                              ; preds = %450
  %453 = invoke noundef ptr @_ZNK3HIR7ExprPtrptEv(ptr noundef nonnull align 8 dereferenceable(72) %3)
          to label %454 unwind label %73

454:                                              ; preds = %452
  %455 = getelementptr inbounds i8, ptr %453, i64 16
  invoke void @_Z17MIR_Validate_FullRK18StaticTraitResolveRKN3HIR8ItemPathERKN3MIR8FunctionERKSt6vectorISt4pairINS2_7PatternENS2_7TypeRefEESaISE_EERKSD_(ptr noundef nonnull align 8 dereferenceable(424) %1, ptr noundef nonnull align 8 dereferenceable(56) %2, ptr noundef nonnull align 8 dereferenceable(96) %10, ptr noundef nonnull align 8 dereferenceable(24) %5, ptr noundef nonnull align 8 dereferenceable(8) %455)
          to label %459 unwind label %73

456:                                              ; preds = %442, %447, %151
  %.pn173.pn = phi { ptr, i32 } [ %.pn173, %151 ], [ %.pn169.pn, %442 ], [ %448, %447 ]
  call void @_ZN12_GLOBAL__N_116ExprVisitor_ConvD2Ev(ptr noundef nonnull align 8 dereferenceable(128) %15) #12
  br label %457

457:                                              ; preds = %456, %102
  %.pn173.pn.pn = phi { ptr, i32 } [ %.pn173.pn, %456 ], [ %103, %102 ]
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %15) #12
  call void @_ZN10MirBuilderD2Ev(ptr noundef nonnull align 8 dereferenceable(440) %14) #12
  br label %458

458:                                              ; preds = %457, %95
  %.pn173.pn.pn.pn = phi { ptr, i32 } [ %.pn173.pn.pn, %457 ], [ %96, %95 ]
  call void @llvm.lifetime.end.p0(i64 440, ptr nonnull %14) #12
  br label %465

459:                                              ; preds = %454, %450
  %460 = invoke noalias noundef nonnull dereferenceable(96) ptr @_Znwm(i64 noundef 96) #14
          to label %461 unwind label %73

461:                                              ; preds = %459
  invoke void @_ZN3MIR8FunctionC2EOS0_(ptr noundef nonnull align 8 dereferenceable(96) %460, ptr noundef nonnull align 8 dereferenceable(96) %10)
          to label %462 unwind label %463

462:                                              ; preds = %461
  call void @_ZN3MIR15FunctionPointerC2EPNS_8FunctionE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull %460)
  call void @_ZN3MIR8FunctionD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %10) #12
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %10) #12
  call void @_ZN8TraceLogD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %7) #12
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %7) #12
  ret void

463:                                              ; preds = %461
  %464 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %460, i64 noundef 96) #15
  br label %465

465:                                              ; preds = %93, %458, %463, %84, %73
  %.pn179.pn = phi { ptr, i32 } [ %.pn179, %84 ], [ %464, %463 ], [ %74, %73 ], [ %.pn173.pn.pn.pn, %458 ], [ %94, %93 ]
  call void @_ZN3MIR8FunctionD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %10) #12
  br label %466

466:                                              ; preds = %465, %71
  %.pn179.pn.pn = phi { ptr, i32 } [ %.pn179.pn, %465 ], [ %72, %71 ]
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %10) #12
  call void @_ZN8TraceLogD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %7) #12
  br label %467

467:                                              ; preds = %466, %69
  %.pn179.pn.pn.pn = phi { ptr, i32 } [ %.pn179.pn.pn, %466 ], [ %70, %69 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %7) #12
  resume { ptr, i32 } %.pn179.pn.pn.pn

468:                                              ; preds = %327, %280
  unreachable
}

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

declare noundef zeroext i1 @_Z13debug_enabledv() local_unnamed_addr #2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ8LowerMIRRK18StaticTraitResolveRKN3HIR8ItemPathERKNS7_7ExprPtrERKNS7_7TypeRefERKSt6vectorISt4pairINS7_7PatternESE_ESaISK_EEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #3 align 2

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

declare i32 @__gxx_personality_v0(...)

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EE7reserveEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #0 align 2

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(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(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #3 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 #0 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 #2

; 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: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3HIR7TypeRefESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #3 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(28) ptr @_ZNK3HIR7ExprPtrdeEv(ptr noundef nonnull align 8 dereferenceable(72)) local_unnamed_addr #3 align 2

declare void @_ZN10MirBuilderC1ERK4SpanRK18StaticTraitResolveRKN3HIR7TypeRefERKSt6vectorISt4pairINS6_7PatternES7_ESaISD_EERN3MIR8FunctionE(ptr noundef nonnull align 8 dereferenceable(440), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(424), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(96)) unnamed_addr #2

; Function Attrs: mustprogress nofree nounwind willreturn memory(read)
declare ptr @__dynamic_cast(ptr, ptr, ptr, i64) local_unnamed_addr #6

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN12_GLOBAL__N_116ExprVisitor_ConvC2ER10MirBuilderRKSt6vectorIN3HIR7TypeRefESaIS5_EEPKNS4_25ExprNode_GeneratorWrapperE(ptr noundef nonnull align 8 dereferenceable(128), ptr noundef nonnull align 8 dereferenceable(440), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef) unnamed_addr #0 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9__gnu_cxxneIPKSt4pairIN3HIR7PatternENS2_7TypeRefEESt6vectorIS5_SaIS5_EEEEbRKNS_17__normal_iteratorIT_T0_EESG_(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_iteratorIPKSt4pairIN3HIR7PatternENS2_7TypeRefEESt6vectorIS5_SaIS5_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #3 align 2

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

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

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

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIRlsERSoRKNS_7PatternE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(212)) local_unnamed_addr #2

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

declare noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8), i32 noundef) local_unnamed_addr #0 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(216) ptr @_ZSt3decRSt8ios_base(ptr noundef nonnull align 8 dereferenceable(216)) #4

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

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(ptr noundef nonnull align 8 dereferenceable(8)) #4

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN12_GLOBAL__N_116ExprVisitor_Conv16define_vars_fromERK4SpanRKN3HIR7PatternE(ptr noundef nonnull align 8 dereferenceable(128), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(212)) unnamed_addr #0 align 2

declare void @_Z16MIR_LowerHIR_LetR10MirBuilderR12MirConverterRK4SpanRKN3HIR7PatternEN3MIR6LValueEPKNS6_8ExprNodeE(ptr noundef nonnull align 8 dereferenceable(440), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(212), ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3MIR6LValue12new_ArgumentEj(ptr dead_on_unwind noalias writable sret(%"struct.MIR::LValue") align 8, i32 noundef) local_unnamed_addr #0 align 2

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

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

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

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

declare void @_ZN10MirBuilder15define_variableEj(ptr noundef nonnull align 8 dereferenceable(440), i32 noundef) local_unnamed_addr #2

declare void @_ZN10MirBuilder19mark_value_assignedERK4SpanRKN3MIR6LValueE(ptr noundef nonnull align 8 dereferenceable(440), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3MIR6LValue9new_LocalEj(ptr dead_on_unwind noalias writable sret(%"struct.MIR::LValue") align 8, i32 noundef) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt3mapIjSt6vectorIN3MIR6LValue7WrapperESaIS3_EESt4lessIjESaISt4pairIKjS5_EEE6insertIS8_IjS5_EEENSt9enable_ifIXsr16is_constructibleISA_T_EE5valueES8_ISt17_Rb_tree_iteratorISA_EbEE4typeEOSG_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZSt9make_pairIRjSt6vectorIN3MIR6LValue7WrapperESaIS4_EEESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS8_INS9_IT0_E4typeEE6__typeEEOSA_OSF_(ptr dead_on_unwind noalias writable sret(%"struct.std::pair.168") align 8, ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #0

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z9make_vec1IN3MIR6LValue7WrapperEESt6vectorIT_SaIS4_EEOS4_(ptr dead_on_unwind noalias writable sret(%"class.std::vector.9") align 8, ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #0

; Function Attrs: mustprogress uwtable
declare dso_local i32 @_ZN3MIR6LValue7Wrapper9new_FieldEj(i32 noundef) local_unnamed_addr #0 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt3mapIjSt6vectorIN3MIR6LValue7WrapperESaIS3_EESt4lessIjESaISt4pairIKjS5_EEEixERS9_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #0 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local i32 @_ZN3MIR6LValue7Wrapper9new_DerefEv() local_unnamed_addr #0 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK10MirBuilder12block_activeEv(ptr noundef nonnull align 8 dereferenceable(440)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK10MirBuilder10has_resultEv(ptr noundef nonnull align 8 dereferenceable(440)) local_unnamed_addr #3 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIN3MIR5ParamESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #0 align 2

declare void @_ZN10MirBuilder19get_result_in_paramERK4SpanRKN3HIR7TypeRefEb(ptr dead_on_unwind writable sret(%"class.MIR::Param") align 8, ptr noundef nonnull align 8 dereferenceable(440), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), i1 noundef zeroext) local_unnamed_addr #2

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

declare void @_ZN3HIR11GenericPathC1Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #2

declare void @_ZNK10MirBuilder13with_val_typeERK4SpanRKN3MIR6LValueESt8functionIFvRKN3HIR7TypeRefEEEPKNS4_7WrapperE(ptr noundef nonnull align 8 dereferenceable(440), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3MIR6LValue10new_ReturnEv(ptr dead_on_unwind noalias writable sret(%"struct.MIR::LValue") align 8) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRKN3HIR7TypeRefEEEC2IZ8LowerMIRRK18StaticTraitResolveRKNS0_8ItemPathERKNS0_7ExprPtrES3_RKSt6vectorISt4pairINS0_7PatternES1_ESaISJ_EEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 align 2

declare void @_ZN10MirBuilder10set_resultERK4SpanN3MIR6RValueE(ptr noundef nonnull align 8 dereferenceable(440), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3MIR6RValue16make_EnumVariantENS0_16Data_EnumVariantE(ptr dead_on_unwind noalias writable sret(%"class.MIR::RValue") align 8, ptr noundef) local_unnamed_addr #0 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

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

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

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

declare void @_ZN10MirBuilder13final_cleanupEv(ptr noundef nonnull align 8 dereferenceable(440)) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN12_GLOBAL__N_116ExprVisitor_Conv18generator_finaliseERK4SpanRN3HIR4EnumE(ptr dead_on_unwind noalias writable sret(%"class.std::set") align 8, ptr noundef nonnull align 8 dereferenceable(128), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(200)) local_unnamed_addr #0 align 2

declare noundef nonnull align 8 dereferenceable(200) ptr @_ZNK3HIR5Crate16get_enum_by_pathERK4SpanRKNS_10SimplePathEbb(ptr noundef nonnull align 8 dereferenceable(944), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), i1 noundef zeroext, i1 noundef zeroext) local_unnamed_addr #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 nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184)) local_unnamed_addr #3 align 2

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

declare noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR5Crate17get_union_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 #2

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR5Crate18get_lang_item_pathERK4SpanPKc(ptr noundef nonnull align 8 dereferenceable(944), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #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_EEEEZ8LowerMIRRK18StaticTraitResolveRKNS4_8ItemPathERKNS4_7ExprPtrERKS6_RKSB_IS2_INS4_7PatternES6_ESaISR_EEE3$_5ET_SX_SX_T0_"(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 #3 align 2

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ8LowerMIRRK18StaticTraitResolveRKN3HIR8ItemPathERKNS7_7ExprPtrERKNS7_7TypeRefERKSt6vectorISt4pairINS7_7PatternESE_ESaISK_EEE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #3 align 2

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

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZN3HIR6Struct4Data8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #3 align 2

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ8LowerMIRRK18StaticTraitResolveRKN3HIR8ItemPathERKNS7_7ExprPtrERKNS7_7TypeRefERKSt6vectorISt4pairINS7_7PatternESE_ESaISK_EEE3$_3vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #3 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3HIR9Publicity8new_noneEv(ptr dead_on_unwind noalias writable sret(%"class.HIR::Publicity") align 8) local_unnamed_addr #0 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIN3HIR7TypeRefESaIS1_EE2atEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #0 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local i32 @_ZN3MIR6LValue7Wrapper12new_DowncastEj(i32 noundef) local_unnamed_addr #0 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIN3MIR6LValue7WrapperESaIS2_EEC2ESt16initializer_listIS2_ERKS3_(ptr noundef nonnull align 8 dereferenceable(24), ptr, i64, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #0 align 2

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZZ8LowerMIRRK18StaticTraitResolveRKN3HIR8ItemPathERKNS2_7ExprPtrERKNS2_7TypeRefERKSt6vectorISt4pairINS2_7PatternES9_ESaISF_EEEN8RewriterC2ERSt3mapIjSC_IN3MIR6LValue7WrapperESaISO_EESt4lessIjESaISD_IKjSQ_EEE(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZZ8LowerMIRRK18StaticTraitResolveRKN3HIR8ItemPathERKNS2_7ExprPtrERKNS2_7TypeRefERKSt6vectorISt4pairINS2_7PatternES9_ESaISF_EEEN8Rewriter11rewrite_fcnERN3MIR8FunctionE(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(96)) local_unnamed_addr #0 align 2

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

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

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #9

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

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ8LowerMIRRK18StaticTraitResolveRKN3HIR8ItemPathERKNS7_7ExprPtrERKNS7_7TypeRefERKSt6vectorISt4pairINS7_7PatternESE_ESaISK_EEE3$_4vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #3 align 2

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

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZNK12_GLOBAL__N_116ExprVisitor_Conv19generator_make_dropERK4SpanR10MirBuildermRKSt3mapIjSt6vectorIN3MIR6LValue7WrapperESaISA_EESt4lessIjESaISt4pairIKjSC_EEE(ptr noundef nonnull align 8 dereferenceable(128), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(440), i64 noundef, ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #0 align 2

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

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

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

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

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

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

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

declare void @_Z12MIR_ValidateRK18StaticTraitResolveRKN3HIR8ItemPathERKN3MIR8FunctionERKSt6vectorISt4pairINS2_7PatternENS2_7TypeRefEESaISE_EERKSD_(ptr noundef nonnull align 8 dereferenceable(424), ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(96), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #2

; Function Attrs: nofree nounwind memory(read)
declare noundef ptr @getenv(ptr nocapture noundef) local_unnamed_addr #11

declare void @_Z17MIR_Validate_FullRK18StaticTraitResolveRKN3HIR8ItemPathERKN3MIR8FunctionERKSt6vectorISt4pairINS2_7PatternENS2_7TypeRefEESaISE_EERKSD_(ptr noundef nonnull align 8 dereferenceable(424), ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(96), ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #2

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

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

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

attributes #0 = { 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 #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress 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 #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 nofree nounwind willreturn memory(read) }
attributes #7 = { 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 = { nobuiltin allocsize(0) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #10 = { nobuiltin nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #11 = { nofree nounwind memory(read) "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 #12 = { nounwind }
attributes #13 = { noreturn }
attributes #14 = { builtin allocsize(0) }
attributes #15 = { builtin nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !12, i64 4}
!10 = !{!"_ZTSN3HIR14PatternBindingE", !11, i64 0, !12, i64 4, !13, i64 8, !14, i64 16, !14, i64 20}
!11 = !{!"bool", !7, i64 0}
!12 = !{!"_ZTSN3HIR14PatternBinding4TypeE", !7, i64 0}
!13 = !{!"_ZTS8RcString", !6, i64 0}
!14 = !{!"int", !7, i64 0}
!15 = !{!14, !14, i64 0}
!16 = !{!17, !17, i64 0}
!17 = !{!"vtable pointer", !8, i64 0}
!18 = !{!19, !19, i64 0}
!19 = !{!"_ZTSN3HIR10ValueUsageE", !7, i64 0}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.mustprogress"}
!22 = !{!23, !14, i64 32}
!23 = !{!"_ZTSN3MIR6RValue16Data_EnumVariantE", !24, i64 0, !14, i64 32, !31, i64 40}
!24 = !{!"_ZTSN3HIR11GenericPathE", !25, i64 0, !27, i64 8}
!25 = !{!"_ZTSN3HIR10SimplePathE", !26, i64 0}
!26 = !{!"_ZTS10ThinVectorI8RcStringE", !6, i64 0}
!27 = !{!"_ZTSN3HIR10PathParamsE", !28, i64 0, !29, i64 8, !30, i64 16}
!28 = !{!"_ZTS10ThinVectorIN3HIR11LifetimeRefEE", !6, i64 0}
!29 = !{!"_ZTS10ThinVectorIN3HIR7TypeRefEE", !6, i64 0}
!30 = !{!"_ZTS10ThinVectorIN3HIR12ConstGenericEE", !6, i64 0}
!31 = !{!"_ZTSSt6vectorIN3MIR5ParamESaIS1_EE", !32, i64 0}
!32 = !{!"_ZTSSt12_Vector_baseIN3MIR5ParamESaIS1_EE", !33, i64 0}
!33 = !{!"_ZTSNSt12_Vector_baseIN3MIR5ParamESaIS1_EE12_Vector_implE", !34, i64 0}
!34 = !{!"_ZTSNSt12_Vector_baseIN3MIR5ParamESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!35 = !{!36, !6, i64 0}
!36 = !{!"_ZTS18TraitResolveCommon", !6, i64 0, !6, i64 8, !6, i64 16, !37, i64 24, !46, i64 72, !25, i64 104, !25, i64 112, !25, i64 120, !25, i64 128, !25, i64 136, !25, i64 144, !25, i64 152, !25, i64 160, !25, i64 168, !25, i64 176, !25, i64 184, !25, i64 192, !25, i64 200, !25, 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 = !{!53, !6, i64 112}
!53 = !{!"_ZTSN3HIR25ExprNode_GeneratorWrapperE", !54, i64 0, !56, i64 32, !56, i64 40, !57, i64 48, !6, i64 56, !24, i64 64, !56, i64 96, !25, i64 104, !6, i64 112, !63, i64 120}
!54 = !{!"_ZTSN3HIR8ExprNodeE", !55, i64 8, !56, i64 16, !19, i64 24}
!55 = !{!"_ZTS4Span", !6, i64 0}
!56 = !{!"_ZTSN3HIR7TypeRefE", !6, i64 0}
!57 = !{!"_ZTSSt10unique_ptrIN3HIR8ExprNodeESt14default_deleteIS1_EE", !58, i64 0}
!58 = !{!"_ZTSSt15__uniq_ptr_dataIN3HIR8ExprNodeESt14default_deleteIS1_ELb1ELb1EE", !59, i64 0}
!59 = !{!"_ZTSSt15__uniq_ptr_implIN3HIR8ExprNodeESt14default_deleteIS1_EE", !60, i64 0}
!60 = !{!"_ZTSSt5tupleIJPN3HIR8ExprNodeESt14default_deleteIS1_EEE", !61, i64 0}
!61 = !{!"_ZTSSt11_Tuple_implILm0EJPN3HIR8ExprNodeESt14default_deleteIS1_EEE", !62, i64 0}
!62 = !{!"_ZTSSt10_Head_baseILm0EPN3HIR8ExprNodeELb0EE", !6, i64 0}
!63 = !{!"_ZTSSt6vectorIN3HIR10ValueUsageESaIS1_EE", !64, i64 0}
!64 = !{!"_ZTSSt12_Vector_baseIN3HIR10ValueUsageESaIS1_EE", !65, i64 0}
!65 = !{!"_ZTSNSt12_Vector_baseIN3HIR10ValueUsageESaIS1_EE12_Vector_implE", !66, i64 0}
!66 = !{!"_ZTSNSt12_Vector_baseIN3HIR10ValueUsageESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}


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