; LLVM IR from thepowersgang/mrustc :: src/hir/visitor.ll (ZN3HIR7Visitor11visit_traitENS_8ItemPathERNS_5TraitE)

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

%"class.HIR::TypeRef" = type { ptr }
%"class.HIR::ItemPath" = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%"struct.HIR::SimplePath" = type { %class.ThinVector }
%class.ThinVector = type { ptr }
%"struct.HIR::PathParams" = type { %class.ThinVector.388, %class.ThinVector.389, %class.ThinVector.390 }
%class.ThinVector.388 = type { ptr }
%class.ThinVector.389 = type { ptr }
%class.ThinVector.390 = type { ptr }
%class.TraceLog = type { ptr, %"class.std::function.179" }
%"class.std::function.179" = 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.__gnu_cxx::__normal_iterator" = type { ptr }
%"struct.std::__detail::_Node_iterator.446" = type { %"struct.std::__detail::_Node_iterator_base.447" }
%"struct.std::__detail::_Node_iterator_base.447" = type { ptr }
%"struct.std::__detail::_Node_iterator.450" = type { %"struct.std::__detail::_Node_iterator_base.451" }
%"struct.std::__detail::_Node_iterator_base.451" = type { ptr }
%"class.HIR::Visitor" = type { ptr, ptr }
%"class.HIR::Trait" = type { %"class.HIR::GenericParams", %"struct.HIR::LifetimeRef", %"class.std::vector.208", i8, %"class.std::unordered_map.238", %"class.std::unordered_map.252", %"class.std::unordered_multimap", %"class.std::unordered_map.279", i32, %"class.std::vector.208", %"struct.HIR::SimplePath" }
%"class.HIR::GenericParams" = type { %"class.std::vector.188", %"class.std::vector.193", %"class.std::vector.198", %"class.std::vector.203" }
%"class.std::vector.188" = type { %"struct.std::_Vector_base.189" }
%"struct.std::_Vector_base.189" = 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.193" = type { %"struct.std::_Vector_base.194" }
%"struct.std::_Vector_base.194" = 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.198" = type { %"struct.std::_Vector_base.199" }
%"struct.std::_Vector_base.199" = 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.203" = type { %"struct.std::_Vector_base.204" }
%"struct.std::_Vector_base.204" = 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 }
%"struct.HIR::LifetimeRef" = type { i32 }
%"class.std::unordered_map.238" = type { %"class.std::_Hashtable.239" }
%"class.std::_Hashtable.239" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%"class.std::unordered_map.252" = type { %"class.std::_Hashtable.253" }
%"class.std::_Hashtable.253" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_multimap" = type { %"class.std::_Hashtable.266" }
%"class.std::_Hashtable.266" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::unordered_map.279" = type { %"class.std::_Hashtable.280" }
%"class.std::_Hashtable.280" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"class.std::vector.208" = type { %"struct.std::_Vector_base.209" }
%"struct.std::_Vector_base.209" = type { %"struct.std::_Vector_base<HIR::TraitPath, std::allocator<HIR::TraitPath>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::TraitPath, std::allocator<HIR::TraitPath>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::TraitPath, std::allocator<HIR::TraitPath>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::TraitPath, std::allocator<HIR::TraitPath>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.std::pair.448" = type { %class.RcString, %"struct.HIR::AssociatedType" }
%class.RcString = type { ptr }
%"struct.HIR::AssociatedType" = type { %"class.HIR::GenericParams", i8, %"struct.HIR::LifetimeRef", %"class.std::vector.208", %"class.HIR::TypeRef" }
%"struct.std::pair.452" = type { %class.RcString, %"class.HIR::TraitValueItem" }
%"class.HIR::TraitValueItem" = type { i32, %"union.HIR::TraitValueItem::DataUnion" }
%"union.HIR::TraitValueItem::DataUnion" = type { %"class.HIR::Static" }
%"class.HIR::Static" = type { %"class.HIR::GenericParams", %"struct.HIR::Linkage", i8, %"class.HIR::TypeRef", %"class.HIR::ExprPtr", %struct.EncodedLiteral, i8, i8, i8, %"class.std::map.329" }
%"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.HIR::ExprPtr" = type { %"class.HIR::ExprPtrInner", %"class.std::vector.314", %"class.std::vector.314", %"class.MIR::FunctionPointer", %"class.HIR::ExprStatePtr" }
%"class.HIR::ExprPtrInner" = type { ptr }
%"class.std::vector.314" = type { %"struct.std::_Vector_base.315" }
%"struct.std::_Vector_base.315" = 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.MIR::FunctionPointer" = type { ptr }
%"class.HIR::ExprStatePtr" = type { ptr }
%struct.EncodedLiteral = type { %"class.std::vector.319", %"class.std::vector.324" }
%"class.std::vector.319" = type { %"struct.std::_Vector_base.320" }
%"struct.std::_Vector_base.320" = type { %"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.324" = type { %"struct.std::_Vector_base.325" }
%"struct.std::_Vector_base.325" = type { %"struct.std::_Vector_base<Reloc, std::allocator<Reloc>>::_Vector_impl" }
%"struct.std::_Vector_base<Reloc, std::allocator<Reloc>>::_Vector_impl" = type { %"struct.std::_Vector_base<Reloc, std::allocator<Reloc>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Reloc, std::allocator<Reloc>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::map.329" = type { %"class.std::_Rb_tree.330" }
%"class.std::_Rb_tree.330" = type { %"struct.std::_Rb_tree<HIR::Path, std::pair<const HIR::Path, EncodedLiteral>, std::_Select1st<std::pair<const HIR::Path, EncodedLiteral>>, std::less<HIR::Path>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<HIR::Path, std::pair<const HIR::Path, EncodedLiteral>, std::_Select1st<std::pair<const HIR::Path, EncodedLiteral>>, std::less<HIR::Path>>::_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 }

@__dso_handle = external hidden global i8
@.str = external hidden unnamed_addr constant [39 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [74 x i8], align 1
@g_debug_indent_level = external global i32, align 4
@.str.3 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [8 x i8], align 1
@_ZZN3HIR7Visitor11visit_traitENS_8ItemPathERNS_5TraitEE7ty_Self = external hidden global %"class.HIR::TypeRef", align 8
@_ZGVZN3HIR7Visitor11visit_traitENS_8ItemPathERNS_5TraitEE7ty_Self = external hidden global i64, align 8
@__func__._ZN3HIR7Visitor11visit_traitENS_8ItemPathERNS_5TraitE = external hidden unnamed_addr constant [12 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [6 x i8], align 1
@__PRETTY_FUNCTION__._ZN3HIR7Visitor11visit_traitENS_8ItemPathERNS_5TraitE = external hidden unnamed_addr constant [72 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [10 x i8], align 1

; Function Attrs: nounwind
declare i32 @__cxa_atexit(ptr, ptr, ptr) #0

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

declare i32 @__gxx_personality_v0(...)

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

declare noundef zeroext i1 @_Z13debug_enabledv() #2

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

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

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZlsRSoRK8RcString(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #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) #5

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 @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #6 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)) #5

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #6 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)) #5

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN18StaticTraitResolve21set_impl_generics_rawE12MetadataTypeRKN3HIR13GenericParamsE(ptr noundef nonnull align 8 dereferenceable(424), i32 noundef, ptr noundef nonnull align 8 dereferenceable(96)) #6 align 2

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3HIR7Visitor11visit_traitENS_8ItemPathERNS_5TraitE(ptr noundef nonnull align 8 dereferenceable(16) %0, ptr noundef byval(%"class.HIR::ItemPath") align 8 %1, ptr noundef nonnull align 8 dereferenceable(400) %2) unnamed_addr #6 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca %"struct.HIR::SimplePath", align 8
  %7 = alloca %"struct.HIR::PathParams", align 8
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca %"class.HIR::ItemPath", align 8
  %11 = alloca %class.TraceLog, align 8
  %12 = alloca ptr, align 8
  %13 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %14 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %18 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca %"struct.std::__detail::_Node_iterator.446", align 8
  %22 = alloca %"struct.std::__detail::_Node_iterator.446", align 8
  %23 = alloca ptr, align 8
  %24 = alloca %"class.HIR::ItemPath", align 8
  %25 = alloca %"class.HIR::ItemPath", align 8
  %26 = alloca ptr, align 8
  %27 = alloca %"struct.std::__detail::_Node_iterator.450", align 8
  %28 = alloca %"struct.std::__detail::_Node_iterator.450", align 8
  %29 = alloca ptr, align 8
  %30 = alloca %"class.HIR::ItemPath", align 8
  %31 = alloca ptr, align 8
  %32 = alloca %"class.HIR::ItemPath", align 8
  %33 = alloca ptr, align 8
  %34 = alloca %"class.HIR::ItemPath", align 8
  %35 = alloca ptr, align 8
  %36 = alloca %"class.HIR::ItemPath", align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %2, ptr %5, align 8, !tbaa !5
  %37 = load ptr, ptr %4, align 8
  %38 = getelementptr inbounds %"class.HIR::Visitor", ptr %37, i32 0, i32 1
  %39 = load ptr, ptr %38, align 8, !tbaa !9
  %40 = icmp ne ptr %39, null
  br i1 %40, label %41, label %46

41:                                               ; preds = %3
  %42 = getelementptr inbounds %"class.HIR::Visitor", ptr %37, i32 0, i32 1
  %43 = load ptr, ptr %42, align 8, !tbaa !9
  %44 = load ptr, ptr %5, align 8, !tbaa !5
  %45 = getelementptr inbounds %"class.HIR::Trait", ptr %44, i32 0, i32 0
  call void @_ZN18StaticTraitResolve21set_impl_generics_rawE12MetadataTypeRKN3HIR13GenericParamsE(ptr noundef nonnull align 8 dereferenceable(424) %43, i32 noundef 0, ptr noundef nonnull align 8 dereferenceable(96) %45)
  br label %46

46:                                               ; preds = %41, %3
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #0
  call void @_ZNK3HIR8ItemPath15get_simple_pathEv(ptr dead_on_unwind writable sret(%"struct.HIR::SimplePath") align 8 %6, ptr noundef nonnull align 8 dereferenceable(56) %1)
  call void @llvm.lifetime.start.p0(i64 24, ptr %7) #0
  %47 = load ptr, ptr %5, align 8, !tbaa !5
  %48 = getelementptr inbounds %"class.HIR::Trait", ptr %47, i32 0, i32 0
  invoke void @_ZNK3HIR13GenericParams15make_nop_paramsEjb(ptr dead_on_unwind writable sret(%"struct.HIR::PathParams") align 8 %7, ptr noundef nonnull align 8 dereferenceable(96) %48, i32 noundef 0, i1 noundef zeroext false)
          to label %49 unwind label %82

49:                                               ; preds = %46
  %50 = load atomic i8, ptr @_ZGVZN3HIR7Visitor11visit_traitENS_8ItemPathERNS_5TraitEE7ty_Self acquire, align 8
  %51 = icmp eq i8 %50, 0
  br i1 %51, label %52, label %58, !prof !11

52:                                               ; preds = %49
  %53 = call i32 @__cxa_guard_acquire(ptr @_ZGVZN3HIR7Visitor11visit_traitENS_8ItemPathERNS_5TraitEE7ty_Self) #0
  %54 = icmp ne i32 %53, 0
  br i1 %54, label %55, label %58

55:                                               ; preds = %52
  invoke void @_ZN3HIR7TypeRef8new_selfEv(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 @_ZZN3HIR7Visitor11visit_traitENS_8ItemPathERNS_5TraitEE7ty_Self)
          to label %56 unwind label %86

56:                                               ; preds = %55
  %57 = call i32 @__cxa_atexit(ptr @_ZN3HIR7TypeRefD2Ev, ptr @_ZZN3HIR7Visitor11visit_traitENS_8ItemPathERNS_5TraitEE7ty_Self, ptr @__dso_handle) #0
  call void @__cxa_guard_release(ptr @_ZGVZN3HIR7Visitor11visit_traitENS_8ItemPathERNS_5TraitEE7ty_Self) #0
  br label %58

58:                                               ; preds = %56, %52, %49
  call void @llvm.lifetime.start.p0(i64 56, ptr %10) #0
  invoke void @_ZN3HIR8ItemPathC2ERKNS_7TypeRefERKNS_10SimplePathERKNS_10PathParamsE(ptr noundef nonnull align 8 dereferenceable(56) %10, ptr noundef nonnull align 8 dereferenceable(8) @_ZZN3HIR7Visitor11visit_traitENS_8ItemPathERNS_5TraitEE7ty_Self, ptr noundef nonnull align 8 dereferenceable(8) %6, ptr noundef nonnull align 8 dereferenceable(24) %7)
          to label %59 unwind label %90

59:                                               ; preds = %58
  call void @llvm.lifetime.start.p0(i64 40, ptr %11) #0
  %60 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %61 unwind label %94

61:                                               ; preds = %59
  %62 = zext i1 %60 to i64
  %63 = select i1 %60, ptr @__func__._ZN3HIR7Visitor11visit_traitENS_8ItemPathERNS_5TraitE, ptr null
  invoke void @_ZN8TraceLogC1EPKc(ptr noundef nonnull align 8 dereferenceable(40) %11, ptr noundef %63)
          to label %64 unwind label %94

64:                                               ; preds = %61
  %65 = load ptr, ptr %5, align 8, !tbaa !5
  %66 = getelementptr inbounds %"class.HIR::Trait", ptr %65, i32 0, i32 0
  %67 = load ptr, ptr %37, align 8, !tbaa !12
  %68 = getelementptr inbounds ptr, ptr %67, i64 17
  %69 = load ptr, ptr %68, align 8
  invoke void %69(ptr noundef nonnull align 8 dereferenceable(16) %37, ptr noundef nonnull align 8 dereferenceable(96) %66)
          to label %70 unwind label %98

70:                                               ; preds = %64
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #0
  %71 = load ptr, ptr %5, align 8, !tbaa !5
  %72 = getelementptr inbounds %"class.HIR::Trait", ptr %71, i32 0, i32 2
  store ptr %72, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #0
  %73 = load ptr, ptr %12, align 8, !tbaa !5
  %74 = call ptr @_ZNSt6vectorIN3HIR9TraitPathESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %73) #0
  %75 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %13, i32 0, i32 0
  store ptr %74, ptr %75, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #0
  %76 = load ptr, ptr %12, align 8, !tbaa !5
  %77 = call ptr @_ZNSt6vectorIN3HIR9TraitPathESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %76) #0
  %78 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %14, i32 0, i32 0
  store ptr %77, ptr %78, align 8
  br label %79

79:                                               ; preds = %109, %70
  %80 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %14) #0
  br i1 %80, label %102, label %81

81:                                               ; preds = %79
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #0
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #0
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #0
  br label %115

82:                                               ; preds = %46
  %83 = landingpad { ptr, i32 }
          cleanup
  %84 = extractvalue { ptr, i32 } %83, 0
  store ptr %84, ptr %8, align 8
  %85 = extractvalue { ptr, i32 } %83, 1
  store i32 %85, ptr %9, align 4
  br label %345

86:                                               ; preds = %55
  %87 = landingpad { ptr, i32 }
          cleanup
  %88 = extractvalue { ptr, i32 } %87, 0
  store ptr %88, ptr %8, align 8
  %89 = extractvalue { ptr, i32 } %87, 1
  store i32 %89, ptr %9, align 4
  call void @__cxa_guard_abort(ptr @_ZGVZN3HIR7Visitor11visit_traitENS_8ItemPathERNS_5TraitEE7ty_Self) #0
  br label %344

90:                                               ; preds = %58
  %91 = landingpad { ptr, i32 }
          cleanup
  %92 = extractvalue { ptr, i32 } %91, 0
  store ptr %92, ptr %8, align 8
  %93 = extractvalue { ptr, i32 } %91, 1
  store i32 %93, ptr %9, align 4
  br label %343

94:                                               ; preds = %61, %59
  %95 = landingpad { ptr, i32 }
          cleanup
  %96 = extractvalue { ptr, i32 } %95, 0
  store ptr %96, ptr %8, align 8
  %97 = extractvalue { ptr, i32 } %95, 1
  store i32 %97, ptr %9, align 4
  br label %342

98:                                               ; preds = %336, %64
  %99 = landingpad { ptr, i32 }
          cleanup
  %100 = extractvalue { ptr, i32 } %99, 0
  store ptr %100, ptr %8, align 8
  %101 = extractvalue { ptr, i32 } %99, 1
  store i32 %101, ptr %9, align 4
  br label %341

102:                                              ; preds = %79
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #0
  %103 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %13) #0
  store ptr %103, ptr %15, align 8, !tbaa !5
  %104 = load ptr, ptr %15, align 8, !tbaa !5
  %105 = load ptr, ptr %37, align 8, !tbaa !12
  %106 = getelementptr inbounds ptr, ptr %105, i64 23
  %107 = load ptr, ptr %106, align 8
  invoke void %107(ptr noundef nonnull align 8 dereferenceable(16) %37, ptr noundef nonnull align 8 dereferenceable(144) %104)
          to label %108 unwind label %111

108:                                              ; preds = %102
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #0
  br label %109

109:                                              ; preds = %108
  %110 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %13) #0
  br label %79

111:                                              ; preds = %102
  %112 = landingpad { ptr, i32 }
          cleanup
  %113 = extractvalue { ptr, i32 } %112, 0
  store ptr %113, ptr %8, align 8
  %114 = extractvalue { ptr, i32 } %112, 1
  store i32 %114, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #0
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #0
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #0
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #0
  br label %341

115:                                              ; preds = %81
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #0
  %116 = load ptr, ptr %5, align 8, !tbaa !5
  %117 = getelementptr inbounds %"class.HIR::Trait", ptr %116, i32 0, i32 9
  store ptr %117, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #0
  %118 = load ptr, ptr %16, align 8, !tbaa !5
  %119 = call ptr @_ZNSt6vectorIN3HIR9TraitPathESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %118) #0
  %120 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %17, i32 0, i32 0
  store ptr %119, ptr %120, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #0
  %121 = load ptr, ptr %16, align 8, !tbaa !5
  %122 = call ptr @_ZNSt6vectorIN3HIR9TraitPathESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %121) #0
  %123 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %18, i32 0, i32 0
  store ptr %122, ptr %123, align 8
  br label %124

124:                                              ; preds = %134, %115
  %125 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef nonnull align 8 dereferenceable(8) %18) #0
  br i1 %125, label %127, label %126

126:                                              ; preds = %124
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #0
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #0
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #0
  br label %140

127:                                              ; preds = %124
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #0
  %128 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %17) #0
  store ptr %128, ptr %19, align 8, !tbaa !5
  %129 = load ptr, ptr %19, align 8, !tbaa !5
  %130 = load ptr, ptr %37, align 8, !tbaa !12
  %131 = getelementptr inbounds ptr, ptr %130, i64 23
  %132 = load ptr, ptr %131, align 8
  invoke void %132(ptr noundef nonnull align 8 dereferenceable(16) %37, ptr noundef nonnull align 8 dereferenceable(144) %129)
          to label %133 unwind label %136

133:                                              ; preds = %127
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #0
  br label %134

134:                                              ; preds = %133
  %135 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %17) #0
  br label %124

136:                                              ; preds = %127
  %137 = landingpad { ptr, i32 }
          cleanup
  %138 = extractvalue { ptr, i32 } %137, 0
  store ptr %138, ptr %8, align 8
  %139 = extractvalue { ptr, i32 } %137, 1
  store i32 %139, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #0
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #0
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #0
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #0
  br label %341

140:                                              ; preds = %126
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #0
  %141 = load ptr, ptr %5, align 8, !tbaa !5
  %142 = getelementptr inbounds %"class.HIR::Trait", ptr %141, i32 0, i32 4
  store ptr %142, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #0
  %143 = load ptr, ptr %20, align 8, !tbaa !5
  %144 = call ptr @_ZNSt13unordered_mapI8RcStringN3HIR14AssociatedTypeESt4hashIS0_ESt8equal_toIS0_ESaISt4pairIKS0_S2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(56) %143) #0
  %145 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.446", ptr %21, i32 0, i32 0
  %146 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.447", ptr %145, i32 0, i32 0
  store ptr %144, ptr %146, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #0
  %147 = load ptr, ptr %20, align 8, !tbaa !5
  %148 = call ptr @_ZNSt13unordered_mapI8RcStringN3HIR14AssociatedTypeESt4hashIS0_ESt8equal_toIS0_ESaISt4pairIKS0_S2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %147) #0
  %149 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.446", ptr %22, i32 0, i32 0
  %150 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.447", ptr %149, i32 0, i32 0
  store ptr %148, ptr %150, align 8
  br label %151

151:                                              ; preds = %191, %140
  %152 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseISt4pairIK8RcStringN3HIR14AssociatedTypeEELb0EEES9_(ptr noundef nonnull align 8 dereferenceable(8) %21, ptr noundef nonnull align 8 dereferenceable(8) %22) #0
  br i1 %152, label %154, label %153

153:                                              ; preds = %151
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #0
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #0
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #0
  br label %193

154:                                              ; preds = %151
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #0
  %155 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNKSt8__detail14_Node_iteratorISt4pairIK8RcStringN3HIR14AssociatedTypeEELb0ELb0EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %21) #0
  store ptr %155, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 56, ptr %24) #0
  %156 = load ptr, ptr %23, align 8, !tbaa !5
  %157 = getelementptr inbounds %"struct.std::pair.448", ptr %156, i32 0, i32 0
  %158 = invoke noundef ptr @_ZNK8RcString5c_strEv(ptr noundef nonnull align 8 dereferenceable(8) %157)
          to label %159 unwind label %178

159:                                              ; preds = %154
  invoke void @_ZN3HIR8ItemPathC2ERKS0_PKc(ptr noundef nonnull align 8 dereferenceable(56) %24, ptr noundef nonnull align 8 dereferenceable(56) %10, ptr noundef %158)
          to label %160 unwind label %178

160:                                              ; preds = %159
  br label %161

161:                                              ; preds = %160
  %162 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %163 unwind label %178

163:                                              ; preds = %161
  br i1 %162, label %164, label %182

164:                                              ; preds = %163
  %165 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !14
  %166 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %165, ptr noundef @__func__._ZN3HIR7Visitor11visit_traitENS_8ItemPathERNS_5TraitE)
          to label %167 unwind label %178

167:                                              ; preds = %164
  %168 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %166, ptr noundef @.str.6)
          to label %169 unwind label %178

169:                                              ; preds = %167
  %170 = load ptr, ptr %23, align 8, !tbaa !5
  %171 = getelementptr inbounds %"struct.std::pair.448", ptr %170, i32 0, i32 0
  %172 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZlsRSoRK8RcString(ptr noundef nonnull align 8 dereferenceable(8) %168, ptr noundef nonnull align 8 dereferenceable(8) %171)
          to label %173 unwind label %178

173:                                              ; preds = %169
  %174 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %172, ptr noundef @_ZSt3decRSt8ios_base)
          to label %175 unwind label %178

175:                                              ; preds = %173
  %176 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %174, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %177 unwind label %178

177:                                              ; preds = %175
  br label %182

178:                                              ; preds = %184, %175, %173, %169, %167, %164, %161, %159, %154
  %179 = landingpad { ptr, i32 }
          cleanup
  %180 = extractvalue { ptr, i32 } %179, 0
  store ptr %180, ptr %8, align 8
  %181 = extractvalue { ptr, i32 } %179, 1
  store i32 %181, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 56, ptr %24) #0
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #0
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #0
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #0
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #0
  br label %341

182:                                              ; preds = %177, %163
  br label %183

183:                                              ; preds = %182
  br label %184

184:                                              ; preds = %183
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %25, ptr align 8 %24, i64 56, i1 false), !tbaa.struct !16
  %185 = load ptr, ptr %23, align 8, !tbaa !5
  %186 = getelementptr inbounds %"struct.std::pair.448", ptr %185, i32 0, i32 1
  %187 = load ptr, ptr %37, align 8, !tbaa !12
  %188 = getelementptr inbounds ptr, ptr %187, i64 13
  %189 = load ptr, ptr %188, align 8
  invoke void %189(ptr noundef nonnull align 8 dereferenceable(16) %37, ptr noundef byval(%"class.HIR::ItemPath") align 8 %25, ptr noundef nonnull align 8 dereferenceable(136) %186)
          to label %190 unwind label %178

190:                                              ; preds = %184
  call void @llvm.lifetime.end.p0(i64 56, ptr %24) #0
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #0
  br label %191

191:                                              ; preds = %190
  %192 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8__detail14_Node_iteratorISt4pairIK8RcStringN3HIR14AssociatedTypeEELb0ELb0EEppEv(ptr noundef nonnull align 8 dereferenceable(8) %21) #0
  br label %151

193:                                              ; preds = %153
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #0
  %194 = load ptr, ptr %5, align 8, !tbaa !5
  %195 = getelementptr inbounds %"class.HIR::Trait", ptr %194, i32 0, i32 5
  store ptr %195, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #0
  %196 = load ptr, ptr %26, align 8, !tbaa !5
  %197 = call ptr @_ZNSt13unordered_mapI8RcStringN3HIR14TraitValueItemESt4hashIS0_ESt8equal_toIS0_ESaISt4pairIKS0_S2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(56) %196) #0
  %198 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.450", ptr %27, i32 0, i32 0
  %199 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.451", ptr %198, i32 0, i32 0
  store ptr %197, ptr %199, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #0
  %200 = load ptr, ptr %26, align 8, !tbaa !5
  %201 = call ptr @_ZNSt13unordered_mapI8RcStringN3HIR14TraitValueItemESt4hashIS0_ESt8equal_toIS0_ESaISt4pairIKS0_S2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %200) #0
  %202 = getelementptr inbounds %"struct.std::__detail::_Node_iterator.450", ptr %28, i32 0, i32 0
  %203 = getelementptr inbounds %"struct.std::__detail::_Node_iterator_base.451", ptr %202, i32 0, i32 0
  store ptr %201, ptr %203, align 8
  br label %204

204:                                              ; preds = %329, %193
  %205 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseISt4pairIK8RcStringN3HIR14TraitValueItemEELb0EEES9_(ptr noundef nonnull align 8 dereferenceable(8) %27, ptr noundef nonnull align 8 dereferenceable(8) %28) #0
  br i1 %205, label %207, label %206

206:                                              ; preds = %204
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #0
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #0
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #0
  br label %332

207:                                              ; preds = %204
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #0
  %208 = call noundef nonnull align 8 dereferenceable(376) ptr @_ZNKSt8__detail14_Node_iteratorISt4pairIK8RcStringN3HIR14TraitValueItemEELb0ELb0EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %27) #0
  store ptr %208, ptr %29, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 56, ptr %30) #0
  %209 = load ptr, ptr %29, align 8, !tbaa !5
  %210 = getelementptr inbounds %"struct.std::pair.452", ptr %209, i32 0, i32 0
  %211 = invoke noundef ptr @_ZNK8RcString5c_strEv(ptr noundef nonnull align 8 dereferenceable(8) %210)
          to label %212 unwind label %218

212:                                              ; preds = %207
  invoke void @_ZN3HIR8ItemPathC2ERKS0_PKc(ptr noundef nonnull align 8 dereferenceable(56) %30, ptr noundef nonnull align 8 dereferenceable(56) %10, ptr noundef %211)
          to label %213 unwind label %218

213:                                              ; preds = %212
  %214 = load ptr, ptr %29, align 8, !tbaa !5
  %215 = getelementptr inbounds %"struct.std::pair.452", ptr %214, i32 0, i32 1
  %216 = invoke noundef i32 @_ZNK3HIR14TraitValueItem3tagEv(ptr noundef nonnull align 8 dereferenceable(368) %215)
          to label %217 unwind label %218

217:                                              ; preds = %213
  switch i32 %216, label %328 [
    i32 0, label %222
    i32 1, label %223
    i32 2, label %258
    i32 3, label %293
  ]

218:                                              ; preds = %213, %212, %207
  %219 = landingpad { ptr, i32 }
          cleanup
  %220 = extractvalue { ptr, i32 } %219, 0
  store ptr %220, ptr %8, align 8
  %221 = extractvalue { ptr, i32 } %219, 1
  store i32 %221, ptr %9, align 4
  br label %331

222:                                              ; preds = %217
  call void @__assert_fail(ptr noundef @.str, ptr noundef @.str.1, i32 noundef 258, ptr noundef @__PRETTY_FUNCTION__._ZN3HIR7Visitor11visit_traitENS_8ItemPathERNS_5TraitE) #10
  unreachable

223:                                              ; preds = %217
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #0
  %224 = load ptr, ptr %29, align 8, !tbaa !5
  %225 = getelementptr inbounds %"struct.std::pair.452", ptr %224, i32 0, i32 1
  %226 = invoke noundef nonnull align 8 dereferenceable(280) ptr @_ZN3HIR14TraitValueItem11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(368) %225)
          to label %227 unwind label %246

227:                                              ; preds = %223
  store ptr %226, ptr %31, align 8, !tbaa !5
  %228 = load ptr, ptr %31, align 8, !tbaa !5
  br label %229

229:                                              ; preds = %227
  %230 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %231 unwind label %246

231:                                              ; preds = %229
  br i1 %230, label %232, label %250

232:                                              ; preds = %231
  %233 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !14
  %234 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %233, ptr noundef @__func__._ZN3HIR7Visitor11visit_traitENS_8ItemPathERNS_5TraitE)
          to label %235 unwind label %246

235:                                              ; preds = %232
  %236 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %234, ptr noundef @.str.7)
          to label %237 unwind label %246

237:                                              ; preds = %235
  %238 = load ptr, ptr %29, align 8, !tbaa !5
  %239 = getelementptr inbounds %"struct.std::pair.452", ptr %238, i32 0, i32 0
  %240 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZlsRSoRK8RcString(ptr noundef nonnull align 8 dereferenceable(8) %236, ptr noundef nonnull align 8 dereferenceable(8) %239)
          to label %241 unwind label %246

241:                                              ; preds = %237
  %242 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %240, ptr noundef @_ZSt3decRSt8ios_base)
          to label %243 unwind label %246

243:                                              ; preds = %241
  %244 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %242, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %245 unwind label %246

245:                                              ; preds = %243
  br label %250

246:                                              ; preds = %252, %243, %241, %237, %235, %232, %229, %223
  %247 = landingpad { ptr, i32 }
          cleanup
  %248 = extractvalue { ptr, i32 } %247, 0
  store ptr %248, ptr %8, align 8
  %249 = extractvalue { ptr, i32 } %247, 1
  store i32 %249, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #0
  br label %331

250:                                              ; preds = %245, %231
  br label %251

251:                                              ; preds = %250
  br label %252

252:                                              ; preds = %251
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %32, ptr align 8 %30, i64 56, i1 false), !tbaa.struct !16
  %253 = load ptr, ptr %31, align 8, !tbaa !5
  %254 = load ptr, ptr %37, align 8, !tbaa !12
  %255 = getelementptr inbounds ptr, ptr %254, i64 16
  %256 = load ptr, ptr %255, align 8
  invoke void %256(ptr noundef nonnull align 8 dereferenceable(16) %37, ptr noundef byval(%"class.HIR::ItemPath") align 8 %32, ptr noundef nonnull align 8 dereferenceable(280) %253)
          to label %257 unwind label %246

257:                                              ; preds = %252
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #0
  br label %328

258:                                              ; preds = %217
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #0
  %259 = load ptr, ptr %29, align 8, !tbaa !5
  %260 = getelementptr inbounds %"struct.std::pair.452", ptr %259, i32 0, i32 1
  %261 = invoke noundef nonnull align 8 dereferenceable(360) ptr @_ZN3HIR14TraitValueItem9as_StaticEv(ptr noundef nonnull align 8 dereferenceable(368) %260)
          to label %262 unwind label %281

262:                                              ; preds = %258
  store ptr %261, ptr %33, align 8, !tbaa !5
  %263 = load ptr, ptr %33, align 8, !tbaa !5
  br label %264

264:                                              ; preds = %262
  %265 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %266 unwind label %281

266:                                              ; preds = %264
  br i1 %265, label %267, label %285

267:                                              ; preds = %266
  %268 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !14
  %269 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %268, ptr noundef @__func__._ZN3HIR7Visitor11visit_traitENS_8ItemPathERNS_5TraitE)
          to label %270 unwind label %281

270:                                              ; preds = %267
  %271 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %269, ptr noundef @.str.3)
          to label %272 unwind label %281

272:                                              ; preds = %270
  %273 = load ptr, ptr %29, align 8, !tbaa !5
  %274 = getelementptr inbounds %"struct.std::pair.452", ptr %273, i32 0, i32 0
  %275 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZlsRSoRK8RcString(ptr noundef nonnull align 8 dereferenceable(8) %271, ptr noundef nonnull align 8 dereferenceable(8) %274)
          to label %276 unwind label %281

276:                                              ; preds = %272
  %277 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %275, ptr noundef @_ZSt3decRSt8ios_base)
          to label %278 unwind label %281

278:                                              ; preds = %276
  %279 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %277, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %280 unwind label %281

280:                                              ; preds = %278
  br label %285

281:                                              ; preds = %287, %278, %276, %272, %270, %267, %264, %258
  %282 = landingpad { ptr, i32 }
          cleanup
  %283 = extractvalue { ptr, i32 } %282, 0
  store ptr %283, ptr %8, align 8
  %284 = extractvalue { ptr, i32 } %282, 1
  store i32 %284, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #0
  br label %331

285:                                              ; preds = %280, %266
  br label %286

286:                                              ; preds = %285
  br label %287

287:                                              ; preds = %286
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %34, ptr align 8 %30, i64 56, i1 false), !tbaa.struct !16
  %288 = load ptr, ptr %33, align 8, !tbaa !5
  %289 = load ptr, ptr %37, align 8, !tbaa !12
  %290 = getelementptr inbounds ptr, ptr %289, i64 15
  %291 = load ptr, ptr %290, align 8
  invoke void %291(ptr noundef nonnull align 8 dereferenceable(16) %37, ptr noundef byval(%"class.HIR::ItemPath") align 8 %34, ptr noundef nonnull align 8 dereferenceable(360) %288)
          to label %292 unwind label %281

292:                                              ; preds = %287
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #0
  br label %328

293:                                              ; preds = %217
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #0
  %294 = load ptr, ptr %29, align 8, !tbaa !5
  %295 = getelementptr inbounds %"struct.std::pair.452", ptr %294, i32 0, i32 1
  %296 = invoke noundef nonnull align 8 dereferenceable(352) ptr @_ZN3HIR14TraitValueItem11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(368) %295)
          to label %297 unwind label %316

297:                                              ; preds = %293
  store ptr %296, ptr %35, align 8, !tbaa !5
  %298 = load ptr, ptr %35, align 8, !tbaa !5
  br label %299

299:                                              ; preds = %297
  %300 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %301 unwind label %316

301:                                              ; preds = %299
  br i1 %300, label %302, label %320

302:                                              ; preds = %301
  %303 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !14
  %304 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %303, ptr noundef @__func__._ZN3HIR7Visitor11visit_traitENS_8ItemPathERNS_5TraitE)
          to label %305 unwind label %316

305:                                              ; preds = %302
  %306 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %304, ptr noundef @.str.5)
          to label %307 unwind label %316

307:                                              ; preds = %305
  %308 = load ptr, ptr %29, align 8, !tbaa !5
  %309 = getelementptr inbounds %"struct.std::pair.452", ptr %308, i32 0, i32 0
  %310 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZlsRSoRK8RcString(ptr noundef nonnull align 8 dereferenceable(8) %306, ptr noundef nonnull align 8 dereferenceable(8) %309)
          to label %311 unwind label %316

311:                                              ; preds = %307
  %312 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %310, ptr noundef @_ZSt3decRSt8ios_base)
          to label %313 unwind label %316

313:                                              ; preds = %311
  %314 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %312, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %315 unwind label %316

315:                                              ; preds = %313
  br label %320

316:                                              ; preds = %322, %313, %311, %307, %305, %302, %299, %293
  %317 = landingpad { ptr, i32 }
          cleanup
  %318 = extractvalue { ptr, i32 } %317, 0
  store ptr %318, ptr %8, align 8
  %319 = extractvalue { ptr, i32 } %317, 1
  store i32 %319, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #0
  br label %331

320:                                              ; preds = %315, %301
  br label %321

321:                                              ; preds = %320
  br label %322

322:                                              ; preds = %321
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %36, ptr align 8 %30, i64 56, i1 false), !tbaa.struct !16
  %323 = load ptr, ptr %35, align 8, !tbaa !5
  %324 = load ptr, ptr %37, align 8, !tbaa !12
  %325 = getelementptr inbounds ptr, ptr %324, i64 14
  %326 = load ptr, ptr %325, align 8
  invoke void %326(ptr noundef nonnull align 8 dereferenceable(16) %37, ptr noundef byval(%"class.HIR::ItemPath") align 8 %36, ptr noundef nonnull align 8 dereferenceable(352) %323)
          to label %327 unwind label %316

327:                                              ; preds = %322
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #0
  br label %328

328:                                              ; preds = %327, %292, %257, %217
  call void @llvm.lifetime.end.p0(i64 56, ptr %30) #0
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #0
  br label %329

329:                                              ; preds = %328
  %330 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8__detail14_Node_iteratorISt4pairIK8RcStringN3HIR14TraitValueItemEELb0ELb0EEppEv(ptr noundef nonnull align 8 dereferenceable(8) %27) #0
  br label %204

331:                                              ; preds = %316, %281, %246, %218
  call void @llvm.lifetime.end.p0(i64 56, ptr %30) #0
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #0
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #0
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #0
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #0
  br label %341

332:                                              ; preds = %206
  %333 = getelementptr inbounds %"class.HIR::Visitor", ptr %37, i32 0, i32 1
  %334 = load ptr, ptr %333, align 8, !tbaa !9
  %335 = icmp ne ptr %334, null
  br i1 %335, label %336, label %340

336:                                              ; preds = %332
  %337 = getelementptr inbounds %"class.HIR::Visitor", ptr %37, i32 0, i32 1
  %338 = load ptr, ptr %337, align 8, !tbaa !9
  invoke void @_ZN18StaticTraitResolve19clear_impl_genericsEv(ptr noundef nonnull align 8 dereferenceable(424) %338)
          to label %339 unwind label %98

339:                                              ; preds = %336
  br label %340

340:                                              ; preds = %339, %332
  call void @_ZN8TraceLogD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %11) #0
  call void @llvm.lifetime.end.p0(i64 40, ptr %11) #0
  call void @llvm.lifetime.end.p0(i64 56, ptr %10) #0
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #0
  call void @llvm.lifetime.end.p0(i64 24, ptr %7) #0
  call void @_ZN3HIR10SimplePathD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %6) #0
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #0
  ret void

341:                                              ; preds = %331, %178, %136, %111, %98
  call void @_ZN8TraceLogD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %11) #0
  br label %342

342:                                              ; preds = %341, %94
  call void @llvm.lifetime.end.p0(i64 40, ptr %11) #0
  br label %343

343:                                              ; preds = %342, %90
  call void @llvm.lifetime.end.p0(i64 56, ptr %10) #0
  br label %344

344:                                              ; preds = %343, %86
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #0
  br label %345

345:                                              ; preds = %344, %82
  call void @llvm.lifetime.end.p0(i64 24, ptr %7) #0
  call void @_ZN3HIR10SimplePathD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %6) #0
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #0
  br label %346

346:                                              ; preds = %345
  %347 = load ptr, ptr %8, align 8
  %348 = load i32, ptr %9, align 4
  %349 = insertvalue { ptr, i32 } poison, ptr %347, 0
  %350 = insertvalue { ptr, i32 } %349, i32 %348, 1
  resume { ptr, i32 } %350
}

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3HIR8ItemPath15get_simple_pathEv(ptr dead_on_unwind noalias writable sret(%"struct.HIR::SimplePath") align 8, ptr noundef nonnull align 8 dereferenceable(56)) #6 align 2

declare void @_ZNK3HIR13GenericParams15make_nop_paramsEjb(ptr dead_on_unwind writable sret(%"struct.HIR::PathParams") align 8, ptr noundef nonnull align 8 dereferenceable(96), i32 noundef, i1 noundef zeroext) #2

; Function Attrs: nounwind
declare i32 @__cxa_guard_acquire(ptr) #0

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

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

; Function Attrs: nounwind
declare void @__cxa_guard_abort(ptr) #0

; Function Attrs: nounwind
declare void @__cxa_guard_release(ptr) #0

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3HIR14TraitValueItem3tagEv(ptr noundef nonnull align 8 dereferenceable(368)) #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(280) ptr @_ZN3HIR14TraitValueItem11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(368)) #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(360) ptr @_ZN3HIR14TraitValueItem9as_StaticEv(ptr noundef nonnull align 8 dereferenceable(368)) #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(352) ptr @_ZN3HIR14TraitValueItem11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(368)) #7 align 2

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !6, i64 8}
!10 = !{!"_ZTSN3HIR7VisitorE", !6, i64 8}
!11 = !{!"branch_weights", i32 1, i32 1048575}
!12 = !{!13, !13, i64 0}
!13 = !{!"vtable pointer", !8, i64 0}
!14 = !{!15, !15, i64 0}
!15 = !{!"int", !7, i64 0}
!16 = !{i64 0, i64 8, !5, i64 8, i64 8, !5, i64 16, i64 8, !5, i64 24, i64 8, !5, i64 32, i64 8, !5, i64 40, i64 8, !5, i64 48, i64 8, !5}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"class.HIR::TypeRef" = type { ptr }
%"class.HIR::ItemPath" = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%"struct.HIR::SimplePath" = type { %class.ThinVector }
%class.ThinVector = type { ptr }
%"struct.HIR::PathParams" = type { %class.ThinVector.388, %class.ThinVector.389, %class.ThinVector.390 }
%class.ThinVector.388 = type { ptr }
%class.ThinVector.389 = type { ptr }
%class.ThinVector.390 = type { ptr }
%class.TraceLog = type { ptr, %"class.std::function.179" }
%"class.std::function.179" = 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.__gnu_cxx::__normal_iterator" = type { ptr }
%"struct.std::__detail::_Node_iterator.446" = type { %"struct.std::__detail::_Node_iterator_base.447" }
%"struct.std::__detail::_Node_iterator_base.447" = type { ptr }
%"struct.std::__detail::_Node_iterator.450" = type { %"struct.std::__detail::_Node_iterator_base.451" }
%"struct.std::__detail::_Node_iterator_base.451" = type { ptr }

@__dso_handle = external hidden global i8
@.str = external hidden unnamed_addr constant [39 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [74 x i8], align 1
@g_debug_indent_level = external local_unnamed_addr global i32, align 4
@.str.3 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [8 x i8], align 1
@_ZZN3HIR7Visitor11visit_traitENS_8ItemPathERNS_5TraitEE7ty_Self = external hidden global %"class.HIR::TypeRef", align 8
@_ZGVZN3HIR7Visitor11visit_traitENS_8ItemPathERNS_5TraitEE7ty_Self = external hidden global i64, align 8
@__func__._ZN3HIR7Visitor11visit_traitENS_8ItemPathERNS_5TraitE = external hidden unnamed_addr constant [12 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [6 x i8], align 1
@__PRETTY_FUNCTION__._ZN3HIR7Visitor11visit_traitENS_8ItemPathERNS_5TraitE = external hidden unnamed_addr constant [72 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [10 x i8], align 1

; Function Attrs: nofree nounwind
declare i32 @__cxa_atexit(ptr, ptr, ptr) local_unnamed_addr #0

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

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

declare noundef zeroext i1 @_Z13debug_enabledv() local_unnamed_addr #2

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

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

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZlsRSoRK8RcString(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) 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 #5

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 @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #6 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)) #5

; 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 #6 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)) #5

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN18StaticTraitResolve21set_impl_generics_rawE12MetadataTypeRKN3HIR13GenericParamsE(ptr noundef nonnull align 8 dereferenceable(424), i32 noundef, ptr noundef nonnull align 8 dereferenceable(96)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN18StaticTraitResolve19clear_impl_genericsEv(ptr noundef nonnull align 8 dereferenceable(424)) local_unnamed_addr #6 align 2

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3HIR7Visitor11visit_traitENS_8ItemPathERNS_5TraitE(ptr noundef nonnull align 8 dereferenceable(16) %0, ptr noundef byval(%"class.HIR::ItemPath") align 8 %1, ptr noundef nonnull align 8 dereferenceable(400) %2) unnamed_addr #6 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca %"struct.HIR::SimplePath", align 8
  %5 = alloca %"struct.HIR::PathParams", align 8
  %6 = alloca %"class.HIR::ItemPath", align 8
  %7 = alloca %class.TraceLog, align 8
  %8 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %9 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %10 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %11 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %12 = alloca %"struct.std::__detail::_Node_iterator.446", align 8
  %13 = alloca %"struct.std::__detail::_Node_iterator.446", align 8
  %14 = alloca %"class.HIR::ItemPath", align 8
  %15 = alloca %"struct.std::__detail::_Node_iterator.450", align 8
  %16 = alloca %"struct.std::__detail::_Node_iterator.450", align 8
  %17 = alloca %"class.HIR::ItemPath", align 8
  %18 = getelementptr inbounds i8, ptr %0, i64 8
  %19 = load ptr, ptr %18, align 8, !tbaa !5
  %.not = icmp eq ptr %19, null
  br i1 %.not, label %21, label %20

20:                                               ; preds = %3
  tail call void @_ZN18StaticTraitResolve21set_impl_generics_rawE12MetadataTypeRKN3HIR13GenericParamsE(ptr noundef nonnull align 8 dereferenceable(424) %19, i32 noundef 0, ptr noundef nonnull align 8 dereferenceable(96) %2)
  br label %21

21:                                               ; preds = %20, %3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #9
  call void @_ZNK3HIR8ItemPath15get_simple_pathEv(ptr dead_on_unwind nonnull writable sret(%"struct.HIR::SimplePath") align 8 %4, ptr noundef nonnull align 8 dereferenceable(56) %1)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) #9
  invoke void @_ZNK3HIR13GenericParams15make_nop_paramsEjb(ptr dead_on_unwind nonnull writable sret(%"struct.HIR::PathParams") align 8 %5, ptr noundef nonnull align 8 dereferenceable(96) %2, i32 noundef 0, i1 noundef zeroext false)
          to label %22 unwind label %47

22:                                               ; preds = %21
  %23 = load atomic i8, ptr @_ZGVZN3HIR7Visitor11visit_traitENS_8ItemPathERNS_5TraitEE7ty_Self acquire, align 8
  %24 = icmp eq i8 %23, 0
  br i1 %24, label %25, label %30, !prof !10

25:                                               ; preds = %22
  %26 = call i32 @__cxa_guard_acquire(ptr nonnull @_ZGVZN3HIR7Visitor11visit_traitENS_8ItemPathERNS_5TraitEE7ty_Self) #9
  %.not43 = icmp eq i32 %26, 0
  br i1 %.not43, label %30, label %27

27:                                               ; preds = %25
  invoke void @_ZN3HIR7TypeRef8new_selfEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 @_ZZN3HIR7Visitor11visit_traitENS_8ItemPathERNS_5TraitEE7ty_Self)
          to label %28 unwind label %49

28:                                               ; preds = %27
  %29 = call i32 @__cxa_atexit(ptr nonnull @_ZN3HIR7TypeRefD2Ev, ptr nonnull @_ZZN3HIR7Visitor11visit_traitENS_8ItemPathERNS_5TraitEE7ty_Self, ptr nonnull @__dso_handle) #9
  call void @__cxa_guard_release(ptr nonnull @_ZGVZN3HIR7Visitor11visit_traitENS_8ItemPathERNS_5TraitEE7ty_Self) #9
  br label %30

30:                                               ; preds = %28, %25, %22
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %6) #9
  call void @_ZN3HIR8ItemPathC2ERKNS_7TypeRefERKNS_10SimplePathERKNS_10PathParamsE(ptr noundef nonnull align 8 dereferenceable(56) %6, ptr noundef nonnull align 8 dereferenceable(8) @_ZZN3HIR7Visitor11visit_traitENS_8ItemPathERNS_5TraitEE7ty_Self, ptr noundef nonnull align 8 dereferenceable(8) %4, ptr noundef nonnull align 8 dereferenceable(24) %5)
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %7) #9
  %31 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %32 unwind label %51

32:                                               ; preds = %30
  %33 = select i1 %31, ptr @__func__._ZN3HIR7Visitor11visit_traitENS_8ItemPathERNS_5TraitE, ptr null
  invoke void @_ZN8TraceLogC1EPKc(ptr noundef nonnull align 8 dereferenceable(40) %7, ptr noundef %33)
          to label %34 unwind label %51

34:                                               ; preds = %32
  %35 = load ptr, ptr %0, align 8, !tbaa !11
  %36 = getelementptr inbounds i8, ptr %35, i64 136
  %37 = load ptr, ptr %36, align 8
  invoke void %37(ptr noundef nonnull align 8 dereferenceable(16) %0, ptr noundef nonnull align 8 dereferenceable(96) %2)
          to label %38 unwind label %53

38:                                               ; preds = %34
  %39 = getelementptr inbounds i8, ptr %2, i64 104
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #9
  %40 = call ptr @_ZNSt6vectorIN3HIR9TraitPathESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %39) #9
  store ptr %40, ptr %8, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #9
  %41 = call ptr @_ZNSt6vectorIN3HIR9TraitPathESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %39) #9
  store ptr %41, ptr %9, align 8
  %42 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %9) #9
  br i1 %42, label %.lr.ph, label %._crit_edge

._crit_edge:                                      ; preds = %59, %38
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #9
  %43 = getelementptr inbounds i8, ptr %2, i64 368
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #9
  %44 = call ptr @_ZNSt6vectorIN3HIR9TraitPathESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %43) #9
  store ptr %44, ptr %10, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #9
  %45 = call ptr @_ZNSt6vectorIN3HIR9TraitPathESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %43) #9
  store ptr %45, ptr %11, align 8
  %46 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %10, ptr noundef nonnull align 8 dereferenceable(8) %11) #9
  br i1 %46, label %.lr.ph52, label %._crit_edge53

47:                                               ; preds = %21
  %48 = landingpad { ptr, i32 }
          cleanup
  br label %184

49:                                               ; preds = %27
  %50 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_guard_abort(ptr nonnull @_ZGVZN3HIR7Visitor11visit_traitENS_8ItemPathERNS_5TraitEE7ty_Self) #9
  br label %183

51:                                               ; preds = %32, %30
  %52 = landingpad { ptr, i32 }
          cleanup
  br label %182

53:                                               ; preds = %179, %34
  %54 = landingpad { ptr, i32 }
          cleanup
  br label %181

.lr.ph:                                           ; preds = %38, %59
  %55 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %8) #9
  %56 = load ptr, ptr %0, align 8, !tbaa !11
  %57 = getelementptr inbounds i8, ptr %56, i64 184
  %58 = load ptr, ptr %57, align 8
  invoke void %58(ptr noundef nonnull align 8 dereferenceable(16) %0, ptr noundef nonnull align 8 dereferenceable(144) %55)
          to label %59 unwind label %62

59:                                               ; preds = %.lr.ph
  %60 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %8) #9
  %61 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %9) #9
  br i1 %61, label %.lr.ph, label %._crit_edge

62:                                               ; preds = %.lr.ph
  %63 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #9
  br label %181

._crit_edge53:                                    ; preds = %72, %._crit_edge
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #9
  %64 = getelementptr inbounds i8, ptr %2, i64 136
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #9
  %65 = call ptr @_ZNSt13unordered_mapI8RcStringN3HIR14AssociatedTypeESt4hashIS0_ESt8equal_toIS0_ESaISt4pairIKS0_S2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(56) %64) #9
  store ptr %65, ptr %12, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #9
  %66 = call ptr @_ZNSt13unordered_mapI8RcStringN3HIR14AssociatedTypeESt4hashIS0_ESt8equal_toIS0_ESaISt4pairIKS0_S2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %64) #9
  store ptr %66, ptr %13, align 8
  %67 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseISt4pairIK8RcStringN3HIR14AssociatedTypeEELb0EEES9_(ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef nonnull align 8 dereferenceable(8) %13) #9
  br i1 %67, label %.lr.ph55, label %._crit_edge56

.lr.ph52:                                         ; preds = %._crit_edge, %72
  %68 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %10) #9
  %69 = load ptr, ptr %0, align 8, !tbaa !11
  %70 = getelementptr inbounds i8, ptr %69, i64 184
  %71 = load ptr, ptr %70, align 8
  invoke void %71(ptr noundef nonnull align 8 dereferenceable(16) %0, ptr noundef nonnull align 8 dereferenceable(144) %68)
          to label %72 unwind label %75

72:                                               ; preds = %.lr.ph52
  %73 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %10) #9
  %74 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR9TraitPathESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %10, ptr noundef nonnull align 8 dereferenceable(8) %11) #9
  br i1 %74, label %.lr.ph52, label %._crit_edge53

75:                                               ; preds = %.lr.ph52
  %76 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #9
  br label %181

._crit_edge56:                                    ; preds = %103, %._crit_edge53
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #9
  %77 = getelementptr inbounds i8, ptr %2, i64 192
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #9
  %78 = call ptr @_ZNSt13unordered_mapI8RcStringN3HIR14TraitValueItemESt4hashIS0_ESt8equal_toIS0_ESaISt4pairIKS0_S2_EEE5beginEv(ptr noundef nonnull align 8 dereferenceable(56) %77) #9
  store ptr %78, ptr %15, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #9
  %79 = call ptr @_ZNSt13unordered_mapI8RcStringN3HIR14TraitValueItemESt4hashIS0_ESt8equal_toIS0_ESaISt4pairIKS0_S2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(56) %77) #9
  store ptr %79, ptr %16, align 8
  %80 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseISt4pairIK8RcStringN3HIR14TraitValueItemEELb0EEES9_(ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(8) %16) #9
  br i1 %80, label %.lr.ph58, label %._crit_edge59

.lr.ph55:                                         ; preds = %._crit_edge53, %103
  %81 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNKSt8__detail14_Node_iteratorISt4pairIK8RcStringN3HIR14AssociatedTypeEELb0ELb0EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %12) #9
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %14) #9
  %82 = call noundef ptr @_ZNK8RcString5c_strEv(ptr noundef nonnull align 8 dereferenceable(8) %81)
  call void @_ZN3HIR8ItemPathC2ERKS0_PKc(ptr noundef nonnull align 8 dereferenceable(56) %14, ptr noundef nonnull align 8 dereferenceable(56) %6, ptr noundef %82)
  %83 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %84 unwind label %96

84:                                               ; preds = %.lr.ph55
  br i1 %83, label %85, label %98

85:                                               ; preds = %84
  %86 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !13
  %87 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %86, ptr noundef nonnull @__func__._ZN3HIR7Visitor11visit_traitENS_8ItemPathERNS_5TraitE)
          to label %88 unwind label %96

88:                                               ; preds = %85
  %89 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %87, ptr noundef nonnull @.str.6)
          to label %90 unwind label %96

90:                                               ; preds = %88
  %91 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZlsRSoRK8RcString(ptr noundef nonnull align 8 dereferenceable(8) %89, ptr noundef nonnull align 8 dereferenceable(8) %81)
          to label %92 unwind label %96

92:                                               ; preds = %90
  %93 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %91, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %94 unwind label %96

94:                                               ; preds = %92
  %95 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %93, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %98 unwind label %96

96:                                               ; preds = %98, %94, %92, %90, %88, %85, %.lr.ph55
  %97 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %14) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #9
  br label %181

98:                                               ; preds = %94, %84
  %99 = getelementptr inbounds i8, ptr %81, i64 8
  %100 = load ptr, ptr %0, align 8, !tbaa !11
  %101 = getelementptr inbounds i8, ptr %100, i64 104
  %102 = load ptr, ptr %101, align 8
  invoke void %102(ptr noundef nonnull align 8 dereferenceable(16) %0, ptr noundef nonnull byval(%"class.HIR::ItemPath") align 8 %14, ptr noundef nonnull align 8 dereferenceable(136) %99)
          to label %103 unwind label %96

103:                                              ; preds = %98
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %14) #9
  %104 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8__detail14_Node_iteratorISt4pairIK8RcStringN3HIR14AssociatedTypeEELb0ELb0EEppEv(ptr noundef nonnull align 8 dereferenceable(8) %12) #9
  %105 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseISt4pairIK8RcStringN3HIR14AssociatedTypeEELb0EEES9_(ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef nonnull align 8 dereferenceable(8) %13) #9
  br i1 %105, label %.lr.ph55, label %._crit_edge56

._crit_edge59:                                    ; preds = %175, %._crit_edge56
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #9
  %106 = load ptr, ptr %18, align 8, !tbaa !5
  %.not44 = icmp eq ptr %106, null
  br i1 %.not44, label %180, label %179

.lr.ph58:                                         ; preds = %._crit_edge56, %175
  %107 = call noundef nonnull align 8 dereferenceable(376) ptr @_ZNKSt8__detail14_Node_iteratorISt4pairIK8RcStringN3HIR14TraitValueItemEELb0ELb0EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %15) #9
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %17) #9
  %108 = call noundef ptr @_ZNK8RcString5c_strEv(ptr noundef nonnull align 8 dereferenceable(8) %107)
  call void @_ZN3HIR8ItemPathC2ERKS0_PKc(ptr noundef nonnull align 8 dereferenceable(56) %17, ptr noundef nonnull align 8 dereferenceable(56) %6, ptr noundef %108)
  %109 = getelementptr inbounds i8, ptr %107, i64 8
  %110 = call noundef i32 @_ZNK3HIR14TraitValueItem3tagEv(ptr noundef nonnull align 8 dereferenceable(368) %109)
  switch i32 %110, label %175 [
    i32 0, label %111
    i32 1, label %112
    i32 2, label %133
    i32 3, label %154
  ]

111:                                              ; preds = %.lr.ph58
  call void @__assert_fail(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 258, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3HIR7Visitor11visit_traitENS_8ItemPathERNS_5TraitE) #10
  unreachable

112:                                              ; preds = %.lr.ph58
  %113 = call noundef nonnull align 8 dereferenceable(280) ptr @_ZN3HIR14TraitValueItem11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(368) %109)
  %114 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %115 unwind label %127

115:                                              ; preds = %112
  br i1 %114, label %116, label %129

116:                                              ; preds = %115
  %117 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !13
  %118 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %117, ptr noundef nonnull @__func__._ZN3HIR7Visitor11visit_traitENS_8ItemPathERNS_5TraitE)
          to label %119 unwind label %127

119:                                              ; preds = %116
  %120 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %118, ptr noundef nonnull @.str.7)
          to label %121 unwind label %127

121:                                              ; preds = %119
  %122 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZlsRSoRK8RcString(ptr noundef nonnull align 8 dereferenceable(8) %120, ptr noundef nonnull align 8 dereferenceable(8) %107)
          to label %123 unwind label %127

123:                                              ; preds = %121
  %124 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %122, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %125 unwind label %127

125:                                              ; preds = %123
  %126 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %124, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %129 unwind label %127

127:                                              ; preds = %129, %125, %123, %121, %119, %116, %112
  %128 = landingpad { ptr, i32 }
          cleanup
  br label %178

129:                                              ; preds = %125, %115
  %130 = load ptr, ptr %0, align 8, !tbaa !11
  %131 = getelementptr inbounds i8, ptr %130, i64 128
  %132 = load ptr, ptr %131, align 8
  invoke void %132(ptr noundef nonnull align 8 dereferenceable(16) %0, ptr noundef nonnull byval(%"class.HIR::ItemPath") align 8 %17, ptr noundef nonnull align 8 dereferenceable(280) %113)
          to label %175 unwind label %127

133:                                              ; preds = %.lr.ph58
  %134 = call noundef nonnull align 8 dereferenceable(360) ptr @_ZN3HIR14TraitValueItem9as_StaticEv(ptr noundef nonnull align 8 dereferenceable(368) %109)
  %135 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %136 unwind label %148

136:                                              ; preds = %133
  br i1 %135, label %137, label %150

137:                                              ; preds = %136
  %138 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !13
  %139 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %138, ptr noundef nonnull @__func__._ZN3HIR7Visitor11visit_traitENS_8ItemPathERNS_5TraitE)
          to label %140 unwind label %148

140:                                              ; preds = %137
  %141 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %139, ptr noundef nonnull @.str.3)
          to label %142 unwind label %148

142:                                              ; preds = %140
  %143 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZlsRSoRK8RcString(ptr noundef nonnull align 8 dereferenceable(8) %141, ptr noundef nonnull align 8 dereferenceable(8) %107)
          to label %144 unwind label %148

144:                                              ; preds = %142
  %145 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %143, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %146 unwind label %148

146:                                              ; preds = %144
  %147 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %145, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %150 unwind label %148

148:                                              ; preds = %150, %146, %144, %142, %140, %137, %133
  %149 = landingpad { ptr, i32 }
          cleanup
  br label %178

150:                                              ; preds = %146, %136
  %151 = load ptr, ptr %0, align 8, !tbaa !11
  %152 = getelementptr inbounds i8, ptr %151, i64 120
  %153 = load ptr, ptr %152, align 8
  invoke void %153(ptr noundef nonnull align 8 dereferenceable(16) %0, ptr noundef nonnull byval(%"class.HIR::ItemPath") align 8 %17, ptr noundef nonnull align 8 dereferenceable(360) %134)
          to label %175 unwind label %148

154:                                              ; preds = %.lr.ph58
  %155 = call noundef nonnull align 8 dereferenceable(352) ptr @_ZN3HIR14TraitValueItem11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(368) %109)
  %156 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %157 unwind label %169

157:                                              ; preds = %154
  br i1 %156, label %158, label %171

158:                                              ; preds = %157
  %159 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !13
  %160 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %159, ptr noundef nonnull @__func__._ZN3HIR7Visitor11visit_traitENS_8ItemPathERNS_5TraitE)
          to label %161 unwind label %169

161:                                              ; preds = %158
  %162 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %160, ptr noundef nonnull @.str.5)
          to label %163 unwind label %169

163:                                              ; preds = %161
  %164 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZlsRSoRK8RcString(ptr noundef nonnull align 8 dereferenceable(8) %162, ptr noundef nonnull align 8 dereferenceable(8) %107)
          to label %165 unwind label %169

165:                                              ; preds = %163
  %166 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %164, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %167 unwind label %169

167:                                              ; preds = %165
  %168 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %166, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %171 unwind label %169

169:                                              ; preds = %171, %167, %165, %163, %161, %158, %154
  %170 = landingpad { ptr, i32 }
          cleanup
  br label %178

171:                                              ; preds = %167, %157
  %172 = load ptr, ptr %0, align 8, !tbaa !11
  %173 = getelementptr inbounds i8, ptr %172, i64 112
  %174 = load ptr, ptr %173, align 8
  invoke void %174(ptr noundef nonnull align 8 dereferenceable(16) %0, ptr noundef nonnull byval(%"class.HIR::ItemPath") align 8 %17, ptr noundef nonnull align 8 dereferenceable(352) %155)
          to label %175 unwind label %169

175:                                              ; preds = %171, %150, %129, %.lr.ph58
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %17) #9
  %176 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt8__detail14_Node_iteratorISt4pairIK8RcStringN3HIR14TraitValueItemEELb0ELb0EEppEv(ptr noundef nonnull align 8 dereferenceable(8) %15) #9
  %177 = call noundef zeroext i1 @_ZNSt8__detailneERKNS_19_Node_iterator_baseISt4pairIK8RcStringN3HIR14TraitValueItemEELb0EEES9_(ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(8) %16) #9
  br i1 %177, label %.lr.ph58, label %._crit_edge59

178:                                              ; preds = %169, %148, %127
  %.pn = phi { ptr, i32 } [ %170, %169 ], [ %149, %148 ], [ %128, %127 ]
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %17) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #9
  br label %181

179:                                              ; preds = %._crit_edge59
  invoke void @_ZN18StaticTraitResolve19clear_impl_genericsEv(ptr noundef nonnull align 8 dereferenceable(424) %106)
          to label %180 unwind label %53

180:                                              ; preds = %179, %._crit_edge59
  call void @_ZN8TraceLogD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %7) #9
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %7) #9
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %6) #9
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #9
  call void @_ZN3HIR10SimplePathD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %4) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #9
  ret void

181:                                              ; preds = %178, %96, %75, %62, %53
  %.pn46 = phi { ptr, i32 } [ %63, %62 ], [ %76, %75 ], [ %97, %96 ], [ %.pn, %178 ], [ %54, %53 ]
  call void @_ZN8TraceLogD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %7) #9
  br label %182

182:                                              ; preds = %181, %51
  %.pn46.pn = phi { ptr, i32 } [ %.pn46, %181 ], [ %52, %51 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %7) #9
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %6) #9
  br label %183

183:                                              ; preds = %182, %49
  %.pn46.pn.pn = phi { ptr, i32 } [ %.pn46.pn, %182 ], [ %50, %49 ]
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #9
  br label %184

184:                                              ; preds = %183, %47
  %.pn46.pn.pn.pn = phi { ptr, i32 } [ %.pn46.pn.pn, %183 ], [ %48, %47 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #9
  call void @_ZN3HIR10SimplePathD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %4) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #9
  resume { ptr, i32 } %.pn46.pn.pn.pn
}

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3HIR8ItemPath15get_simple_pathEv(ptr dead_on_unwind noalias writable sret(%"struct.HIR::SimplePath") align 8, ptr noundef nonnull align 8 dereferenceable(56)) local_unnamed_addr #6 align 2

declare void @_ZNK3HIR13GenericParams15make_nop_paramsEjb(ptr dead_on_unwind writable sret(%"struct.HIR::PathParams") align 8, ptr noundef nonnull align 8 dereferenceable(96), i32 noundef, i1 noundef zeroext) local_unnamed_addr #2

; Function Attrs: nofree nounwind
declare i32 @__cxa_guard_acquire(ptr) local_unnamed_addr #0

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

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

; Function Attrs: nofree nounwind
declare void @__cxa_guard_abort(ptr) local_unnamed_addr #0

; Function Attrs: nofree nounwind
declare void @__cxa_guard_release(ptr) local_unnamed_addr #0

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3HIR14TraitValueItem3tagEv(ptr noundef nonnull align 8 dereferenceable(368)) local_unnamed_addr #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(280) ptr @_ZN3HIR14TraitValueItem11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(368)) local_unnamed_addr #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(360) ptr @_ZN3HIR14TraitValueItem9as_StaticEv(ptr noundef nonnull align 8 dereferenceable(368)) local_unnamed_addr #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(352) ptr @_ZN3HIR14TraitValueItem11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(368)) local_unnamed_addr #7 align 2

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

attributes #0 = { nofree nounwind }
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 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { nounwind }
attributes #10 = { noreturn nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 8}
!6 = !{!"_ZTSN3HIR7VisitorE", !7, i64 8}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"branch_weights", i32 1, i32 1048575}
!11 = !{!12, !12, i64 0}
!12 = !{!"vtable pointer", !9, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"int", !8, i64 0}


; Effective O3 passes: DSEPass,EarlyCSEPass,GlobalOptPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,MemCpyOptPass,SROAPass,SimplifyCFGPass,TailCallElimPass