; LLVM IR from thepowersgang/mrustc :: src/hir/deserialise.ll (ZN15HirDeserialiser18deserialise_structEv)

; 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::serialise::Reader::CloseOnDrop" = type { ptr }
%"class.HIR::GenericParams" = type { %"class.std::vector.53", %"class.std::vector.58", %"class.std::vector.63", %"class.std::vector.68" }
%"class.std::vector.53" = type { %"struct.std::_Vector_base.54" }
%"struct.std::_Vector_base.54" = 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.58" = type { %"struct.std::_Vector_base.59" }
%"struct.std::_Vector_base.59" = 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.63" = type { %"struct.std::_Vector_base.64" }
%"struct.std::_Vector_base.64" = 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.68" = type { %"struct.std::_Vector_base.69" }
%"struct.std::_Vector_base.69" = 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::TraitMarkings" = type { i8, i8, i8, %"class.std::map.93" }
%"class.std::map.93" = type { %"class.std::_Rb_tree.94" }
%"class.std::_Rb_tree.94" = type { %"struct.std::_Rb_tree<HIR::SimplePath, std::pair<const HIR::SimplePath, HIR::TraitMarkings::AutoMarking>, std::_Select1st<std::pair<const HIR::SimplePath, HIR::TraitMarkings::AutoMarking>>, std::less<HIR::SimplePath>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<HIR::SimplePath, std::pair<const HIR::SimplePath, HIR::TraitMarkings::AutoMarking>, std::_Select1st<std::pair<const HIR::SimplePath, HIR::TraitMarkings::AutoMarking>>, std::less<HIR::SimplePath>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"class.std::vector.99" = type { %"struct.std::_Vector_base.100" }
%"struct.std::_Vector_base.100" = type { %"struct.std::_Vector_base<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>, std::allocator<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>, std::allocator<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>, std::allocator<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>, std::allocator<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.HIR::Struct" = type <{ %"class.HIR::GenericParams", i32, [4 x i8], %"class.HIR::Struct::Data", i32, i32, %"struct.HIR::TraitMarkings", %"struct.HIR::StructMarkings", i32, [4 x i8] }>
%"class.HIR::Struct::Data" = type { i32, %"union.HIR::Struct::Data::DataUnion" }
%"union.HIR::Struct::Data::DataUnion" = type { %"class.std::vector.104" }
%"class.std::vector.104" = type { %"struct.std::_Vector_base.105" }
%"struct.std::_Vector_base.105" = type { %"struct.std::_Vector_base<HIR::VisEnt<HIR::TypeRef>, std::allocator<HIR::VisEnt<HIR::TypeRef>>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::VisEnt<HIR::TypeRef>, std::allocator<HIR::VisEnt<HIR::TypeRef>>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::VisEnt<HIR::TypeRef>, std::allocator<HIR::VisEnt<HIR::TypeRef>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::VisEnt<HIR::TypeRef>, std::allocator<HIR::VisEnt<HIR::TypeRef>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.HIR::StructMarkings" = type { i8, i32, i32, i32, i32, i32, i32, i8, i8, %class.U128 }
%class.U128 = type { i64, i64 }
%class.TraceLog = type { ptr, %"class.std::function" }
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%"class.std::_Function_base" = type { %"union.std::_Any_data", ptr }
%"union.std::_Any_data" = type { %"union.std::_Nocopy_types" }
%"union.std::_Nocopy_types" = type { { i64, i64 } }
%class.anon.109 = type { i8 }
%class.anon.111 = type { ptr }
%"struct.HIR::GenericParams::PrintArgs" = type { ptr }
%"struct.HIR::GenericParams::PrintBounds" = type { ptr }
%"struct.HIR::Struct::Data::Data_Unit" = type { i8 }
%struct.Span = type { ptr }
%class.anon.112 = type { ptr }
%class.HirDeserialiser = type { %class.RcString, %"class.std::vector", ptr }
%class.RcString = type { ptr }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl_data" = type { ptr, ptr, ptr }

@g_debug_indent_level = external global i32, align 4
@.str.2 = external hidden unnamed_addr constant [17 x i8], align 1
@_ZTISt13runtime_error = external constant ptr
@.str.28 = external hidden unnamed_addr constant [10 x i8], align 1
@__func__._ZN15HirDeserialiser18deserialise_structEv = external hidden unnamed_addr constant [19 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [9 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

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

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

declare noundef zeroext i1 @_Z13debug_enabledv() #2

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZN12_GLOBAL__N_117des_debug_enabledEv() #3

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

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

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

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

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

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

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

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

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

declare ptr @__cxa_allocate_exception(i64)

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

declare void @__cxa_free_exception(ptr)

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

declare void @__cxa_throw(ptr, ptr, ptr)

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3HIR9serialise6Reader11open_objectEPKc(ptr dead_on_unwind noalias writable sret(%"class.HIR::serialise::Reader::CloseOnDrop") align 8, ptr noundef nonnull align 8 dereferenceable(96), ptr noundef) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN15HirDeserialiser25deserialise_genericparamsEv(ptr dead_on_unwind noalias writable sret(%"class.HIR::GenericParams") align 8, ptr noundef nonnull align 8 dereferenceable(40)) #1 align 2

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN15HirDeserialiser20deserialise_markingsEv(ptr dead_on_unwind noalias writable sret(%"struct.HIR::TraitMarkings") align 8, ptr noundef nonnull align 8 dereferenceable(40)) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN15HirDeserialiser15deserialise_vecISt4pairI8RcStringN3HIR6VisEntINS3_7TypeRefEEEEEESt6vectorIT_SaIS9_EEv(ptr dead_on_unwind noalias writable sret(%"class.std::vector.99") align 8, ptr noundef nonnull align 8 dereferenceable(40)) #1 align 2

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN15HirDeserialiser18deserialise_structEv(ptr dead_on_unwind noalias writable sret(%"class.HIR::Struct") align 8 %0, ptr noundef nonnull align 8 dereferenceable(40) %1) #1 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca %class.TraceLog, align 8
  %6 = alloca %"class.std::function", align 8
  %7 = alloca %class.anon.109, align 1
  %8 = alloca %"class.std::function", align 8
  %9 = alloca %class.anon.111, align 8
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca %"class.HIR::serialise::Reader::CloseOnDrop", align 8
  %13 = alloca %"class.HIR::GenericParams", align 8
  %14 = alloca %"struct.HIR::GenericParams::PrintArgs", align 8
  %15 = alloca %"struct.HIR::GenericParams::PrintBounds", align 8
  %16 = alloca i32, align 4
  %17 = alloca %"class.HIR::Struct::Data", align 8
  %18 = alloca i32, align 4
  %19 = alloca %"class.HIR::Struct::Data", align 8
  %20 = alloca %"struct.HIR::Struct::Data::Data_Unit", align 1
  %21 = alloca i32, align 4
  %22 = alloca %"class.HIR::Struct::Data", align 8
  %23 = alloca %"class.std::vector.104", align 8
  %24 = alloca %"class.HIR::Struct::Data", align 8
  %25 = alloca %"class.std::vector.99", align 8
  %26 = alloca %struct.Span, align 8
  %27 = alloca %"class.std::function", align 8
  %28 = alloca %class.anon.112, align 8
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca %"struct.HIR::TraitMarkings", align 8
  %32 = alloca %"struct.HIR::StructMarkings", align 8
  %33 = alloca i1, align 1
  %34 = alloca %"class.HIR::GenericParams", align 8
  %35 = alloca %"class.HIR::Struct::Data", align 8
  %36 = alloca %"struct.HIR::TraitMarkings", align 8
  %37 = alloca %"struct.HIR::StructMarkings", align 8
  store ptr %0, ptr %3, align 8
  store ptr %1, ptr %4, align 8, !tbaa !5
  %38 = load ptr, ptr %4, align 8
  call void @llvm.lifetime.start.p0(i64 40, ptr %5) #8
  %39 = call noundef zeroext i1 @_Z13debug_enabledv()
  br i1 %39, label %40, label %42

40:                                               ; preds = %2
  %41 = call noundef zeroext i1 @_ZN12_GLOBAL__N_117des_debug_enabledEv()
  br label %42

42:                                               ; preds = %40, %2
  %43 = phi i1 [ false, %2 ], [ %41, %40 ]
  %44 = zext i1 %43 to i64
  %45 = select i1 %43, ptr @__func__._ZN15HirDeserialiser18deserialise_structEv, ptr null
  call void @llvm.lifetime.start.p0(i64 1, ptr %7) #8
  call void @"_ZNSt8functionIFvRSoEEC2IZN15HirDeserialiser18deserialise_structEvE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 1 dereferenceable(1) %7) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #8
  %46 = getelementptr inbounds %class.anon.111, ptr %9, i32 0, i32 0
  store ptr %38, ptr %46, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZN15HirDeserialiser18deserialise_structEvE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull align 8 dereferenceable(8) %9) #8
  invoke void @_ZN8TraceLogC1EPKcSt8functionIFvRSoEES5_(ptr noundef nonnull align 8 dereferenceable(40) %5, ptr noundef %45, ptr noundef %6, ptr noundef %8)
          to label %47 unwind label %78

47:                                               ; preds = %42
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #8
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %7) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #8
  %48 = getelementptr inbounds %class.HirDeserialiser, ptr %38, i32 0, i32 2
  %49 = load ptr, ptr %48, align 8, !tbaa !11
  invoke void @_ZN3HIR9serialise6Reader11open_objectEPKc(ptr dead_on_unwind writable sret(%"class.HIR::serialise::Reader::CloseOnDrop") align 8 %12, ptr noundef nonnull align 8 dereferenceable(96) %49, ptr noundef @.str.36)
          to label %50 unwind label %82

50:                                               ; preds = %47
  call void @llvm.lifetime.start.p0(i64 96, ptr %13) #8
  invoke void @_ZN15HirDeserialiser25deserialise_genericparamsEv(ptr dead_on_unwind writable sret(%"class.HIR::GenericParams") align 8 %13, ptr noundef nonnull align 8 dereferenceable(40) %38)
          to label %51 unwind label %86

51:                                               ; preds = %50
  br label %52

52:                                               ; preds = %51
  %53 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %54 unwind label %90

54:                                               ; preds = %52
  br i1 %53, label %55, label %103

55:                                               ; preds = %54
  %56 = invoke noundef zeroext i1 @_ZN12_GLOBAL__N_117des_debug_enabledEv()
          to label %57 unwind label %90

57:                                               ; preds = %55
  br i1 %56, label %58, label %103

58:                                               ; preds = %57
  %59 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !18
  %60 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %59, ptr noundef @__func__._ZN15HirDeserialiser18deserialise_structEv)
          to label %61 unwind label %90

61:                                               ; preds = %58
  %62 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %60, ptr noundef @.str.28)
          to label %63 unwind label %90

63:                                               ; preds = %61
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #8
  %64 = invoke ptr @_ZNK3HIR13GenericParams8fmt_argsEv(ptr noundef nonnull align 8 dereferenceable(96) %13)
          to label %65 unwind label %94

65:                                               ; preds = %63
  %66 = getelementptr inbounds %"struct.HIR::GenericParams::PrintArgs", ptr %14, i32 0, i32 0
  store ptr %64, ptr %66, align 8
  %67 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIRlsERSoRKNS_13GenericParams9PrintArgsE(ptr noundef nonnull align 8 dereferenceable(8) %62, ptr noundef nonnull align 8 dereferenceable(8) %14)
          to label %68 unwind label %94

68:                                               ; preds = %65
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #8
  %69 = invoke ptr @_ZNK3HIR13GenericParams10fmt_boundsEv(ptr noundef nonnull align 8 dereferenceable(96) %13)
          to label %70 unwind label %98

70:                                               ; preds = %68
  %71 = getelementptr inbounds %"struct.HIR::GenericParams::PrintBounds", ptr %15, i32 0, i32 0
  store ptr %69, ptr %71, align 8
  %72 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIRlsERSoRKNS_13GenericParams11PrintBoundsE(ptr noundef nonnull align 8 dereferenceable(8) %67, ptr noundef nonnull align 8 dereferenceable(8) %15)
          to label %73 unwind label %98

73:                                               ; preds = %70
  %74 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %72, ptr noundef @_ZSt3decRSt8ios_base)
          to label %75 unwind label %98

75:                                               ; preds = %73
  %76 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %74, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %77 unwind label %98

77:                                               ; preds = %75
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  br label %103

78:                                               ; preds = %42
  %79 = landingpad { ptr, i32 }
          cleanup
  %80 = extractvalue { ptr, i32 } %79, 0
  store ptr %80, ptr %10, align 8
  %81 = extractvalue { ptr, i32 } %79, 1
  store i32 %81, ptr %11, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #8
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %7) #8
  br label %335

82:                                               ; preds = %47
  %83 = landingpad { ptr, i32 }
          cleanup
  %84 = extractvalue { ptr, i32 } %83, 0
  store ptr %84, ptr %10, align 8
  %85 = extractvalue { ptr, i32 } %83, 1
  store i32 %85, ptr %11, align 4
  br label %334

86:                                               ; preds = %50
  %87 = landingpad { ptr, i32 }
          cleanup
  %88 = extractvalue { ptr, i32 } %87, 0
  store ptr %88, ptr %10, align 8
  %89 = extractvalue { ptr, i32 } %87, 1
  store i32 %89, ptr %11, align 4
  br label %333

90:                                               ; preds = %61, %58, %55, %52
  %91 = landingpad { ptr, i32 }
          cleanup
  %92 = extractvalue { ptr, i32 } %91, 0
  store ptr %92, ptr %10, align 8
  %93 = extractvalue { ptr, i32 } %91, 1
  store i32 %93, ptr %11, align 4
  br label %332

94:                                               ; preds = %65, %63
  %95 = landingpad { ptr, i32 }
          cleanup
  %96 = extractvalue { ptr, i32 } %95, 0
  store ptr %96, ptr %10, align 8
  %97 = extractvalue { ptr, i32 } %95, 1
  store i32 %97, ptr %11, align 4
  br label %102

98:                                               ; preds = %75, %73, %70, %68
  %99 = landingpad { ptr, i32 }
          cleanup
  %100 = extractvalue { ptr, i32 } %99, 0
  store ptr %100, ptr %10, align 8
  %101 = extractvalue { ptr, i32 } %99, 1
  store i32 %101, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  br label %102

102:                                              ; preds = %98, %94
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  br label %332

103:                                              ; preds = %77, %57, %54
  br label %104

104:                                              ; preds = %103
  br label %105

105:                                              ; preds = %104
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #8
  %106 = getelementptr inbounds %class.HirDeserialiser, ptr %38, i32 0, i32 2
  %107 = load ptr, ptr %106, align 8, !tbaa !11
  %108 = invoke noundef i32 @_ZN3HIR9serialise6Reader8read_tagEv(ptr noundef nonnull align 8 dereferenceable(96) %107)
          to label %109 unwind label %116

109:                                              ; preds = %105
  store i32 %108, ptr %16, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 32, ptr %17) #8
  invoke void @_ZN3HIR6Struct4DataC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17)
          to label %110 unwind label %120

110:                                              ; preds = %109
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #8
  %111 = getelementptr inbounds %class.HirDeserialiser, ptr %38, i32 0, i32 2
  %112 = load ptr, ptr %111, align 8, !tbaa !11
  %113 = invoke noundef i32 @_ZN3HIR9serialise6Reader8read_tagEv(ptr noundef nonnull align 8 dereferenceable(96) %112)
          to label %114 unwind label %124

114:                                              ; preds = %110
  store i32 %113, ptr %18, align 4, !tbaa !18
  %115 = load i32, ptr %18, align 4, !tbaa !18
  switch i32 %115, label %236 [
    i32 1, label %128
    i32 2, label %160
    i32 3, label %198
  ]

116:                                              ; preds = %105
  %117 = landingpad { ptr, i32 }
          cleanup
  %118 = extractvalue { ptr, i32 } %117, 0
  store ptr %118, ptr %10, align 8
  %119 = extractvalue { ptr, i32 } %117, 1
  store i32 %119, ptr %11, align 4
  br label %331

120:                                              ; preds = %109
  %121 = landingpad { ptr, i32 }
          cleanup
  %122 = extractvalue { ptr, i32 } %121, 0
  store ptr %122, ptr %10, align 8
  %123 = extractvalue { ptr, i32 } %121, 1
  store i32 %123, ptr %11, align 4
  br label %330

124:                                              ; preds = %242, %212, %210, %208, %205, %202, %199, %174, %172, %170, %167, %164, %161, %142, %140, %138, %135, %132, %129, %110
  %125 = landingpad { ptr, i32 }
          cleanup
  %126 = extractvalue { ptr, i32 } %125, 0
  store ptr %126, ptr %10, align 8
  %127 = extractvalue { ptr, i32 } %125, 1
  store i32 %127, ptr %11, align 4
  br label %291

128:                                              ; preds = %114
  br label %129

129:                                              ; preds = %128
  %130 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %131 unwind label %124

131:                                              ; preds = %129
  br i1 %130, label %132, label %145

132:                                              ; preds = %131
  %133 = invoke noundef zeroext i1 @_ZN12_GLOBAL__N_117des_debug_enabledEv()
          to label %134 unwind label %124

134:                                              ; preds = %132
  br i1 %133, label %135, label %145

135:                                              ; preds = %134
  %136 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !18
  %137 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %136, ptr noundef @__func__._ZN15HirDeserialiser18deserialise_structEv)
          to label %138 unwind label %124

138:                                              ; preds = %135
  %139 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %137, ptr noundef @.str.37)
          to label %140 unwind label %124

140:                                              ; preds = %138
  %141 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %139, ptr noundef @_ZSt3decRSt8ios_base)
          to label %142 unwind label %124

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

144:                                              ; preds = %142
  br label %145

145:                                              ; preds = %144, %134, %131
  br label %146

146:                                              ; preds = %145
  br label %147

147:                                              ; preds = %146
  call void @llvm.lifetime.start.p0(i64 32, ptr %19) #8
  invoke void @_ZN3HIR6Struct4Data9make_UnitENS1_9Data_UnitE(ptr dead_on_unwind writable sret(%"class.HIR::Struct::Data") align 8 %19)
          to label %148 unwind label %151

148:                                              ; preds = %147
  %149 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZN3HIR6Struct4DataaSEOS1_(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 8 dereferenceable(32) %19)
          to label %150 unwind label %155

150:                                              ; preds = %148
  call void @_ZN3HIR6Struct4DataD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %19) #8
  store i32 4, ptr %21, align 4
  br label %258

151:                                              ; preds = %147
  %152 = landingpad { ptr, i32 }
          cleanup
  %153 = extractvalue { ptr, i32 } %152, 0
  store ptr %153, ptr %10, align 8
  %154 = extractvalue { ptr, i32 } %152, 1
  store i32 %154, ptr %11, align 4
  br label %159

155:                                              ; preds = %148
  %156 = landingpad { ptr, i32 }
          cleanup
  %157 = extractvalue { ptr, i32 } %156, 0
  store ptr %157, ptr %10, align 8
  %158 = extractvalue { ptr, i32 } %156, 1
  store i32 %158, ptr %11, align 4
  call void @_ZN3HIR6Struct4DataD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #8
  br label %159

159:                                              ; preds = %155, %151
  call void @llvm.lifetime.end.p0(i64 32, ptr %19) #8
  br label %291

160:                                              ; preds = %114
  br label %161

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

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

164:                                              ; preds = %163
  %165 = invoke noundef zeroext i1 @_ZN12_GLOBAL__N_117des_debug_enabledEv()
          to label %166 unwind label %124

166:                                              ; preds = %164
  br i1 %165, label %167, label %177

167:                                              ; preds = %166
  %168 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !18
  %169 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %168, ptr noundef @__func__._ZN15HirDeserialiser18deserialise_structEv)
          to label %170 unwind label %124

170:                                              ; preds = %167
  %171 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %169, ptr noundef @.str.38)
          to label %172 unwind label %124

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

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

176:                                              ; preds = %174
  br label %177

177:                                              ; preds = %176, %166, %163
  br label %178

178:                                              ; preds = %177
  br label %179

179:                                              ; preds = %178
  call void @llvm.lifetime.start.p0(i64 32, ptr %22) #8
  invoke void @_ZN15HirDeserialiser15deserialise_vecIN3HIR6VisEntINS1_7TypeRefEEEEESt6vectorIT_SaIS6_EEv(ptr dead_on_unwind writable sret(%"class.std::vector.104") align 8 %23, ptr noundef nonnull align 8 dereferenceable(40) %38)
          to label %180 unwind label %184

180:                                              ; preds = %179
  invoke void @_ZN3HIR6Struct4DataC2ESt6vectorINS_6VisEntINS_7TypeRefEEESaIS5_EE(ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef %23)
          to label %181 unwind label %188

181:                                              ; preds = %180
  %182 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZN3HIR6Struct4DataaSEOS1_(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 8 dereferenceable(32) %22)
          to label %183 unwind label %192

183:                                              ; preds = %181
  call void @_ZN3HIR6Struct4DataD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #8
  call void @_ZNSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %22) #8
  store i32 4, ptr %21, align 4
  br label %258

184:                                              ; preds = %179
  %185 = landingpad { ptr, i32 }
          cleanup
  %186 = extractvalue { ptr, i32 } %185, 0
  store ptr %186, ptr %10, align 8
  %187 = extractvalue { ptr, i32 } %185, 1
  store i32 %187, ptr %11, align 4
  br label %197

188:                                              ; preds = %180
  %189 = landingpad { ptr, i32 }
          cleanup
  %190 = extractvalue { ptr, i32 } %189, 0
  store ptr %190, ptr %10, align 8
  %191 = extractvalue { ptr, i32 } %189, 1
  store i32 %191, ptr %11, align 4
  br label %196

192:                                              ; preds = %181
  %193 = landingpad { ptr, i32 }
          cleanup
  %194 = extractvalue { ptr, i32 } %193, 0
  store ptr %194, ptr %10, align 8
  %195 = extractvalue { ptr, i32 } %193, 1
  store i32 %195, ptr %11, align 4
  call void @_ZN3HIR6Struct4DataD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #8
  br label %196

196:                                              ; preds = %192, %188
  call void @_ZNSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #8
  br label %197

197:                                              ; preds = %196, %184
  call void @llvm.lifetime.end.p0(i64 32, ptr %22) #8
  br label %291

198:                                              ; preds = %114
  br label %199

199:                                              ; preds = %198
  %200 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %201 unwind label %124

201:                                              ; preds = %199
  br i1 %200, label %202, label %215

202:                                              ; preds = %201
  %203 = invoke noundef zeroext i1 @_ZN12_GLOBAL__N_117des_debug_enabledEv()
          to label %204 unwind label %124

204:                                              ; preds = %202
  br i1 %203, label %205, label %215

205:                                              ; preds = %204
  %206 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !18
  %207 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %206, ptr noundef @__func__._ZN15HirDeserialiser18deserialise_structEv)
          to label %208 unwind label %124

208:                                              ; preds = %205
  %209 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %207, ptr noundef @.str.39)
          to label %210 unwind label %124

210:                                              ; preds = %208
  %211 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %209, ptr noundef @_ZSt3decRSt8ios_base)
          to label %212 unwind label %124

212:                                              ; preds = %210
  %213 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %211, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %214 unwind label %124

214:                                              ; preds = %212
  br label %215

215:                                              ; preds = %214, %204, %201
  br label %216

216:                                              ; preds = %215
  br label %217

217:                                              ; preds = %216
  call void @llvm.lifetime.start.p0(i64 32, ptr %24) #8
  invoke void @_ZN15HirDeserialiser15deserialise_vecISt4pairI8RcStringN3HIR6VisEntINS3_7TypeRefEEEEEESt6vectorIT_SaIS9_EEv(ptr dead_on_unwind writable sret(%"class.std::vector.99") align 8 %25, ptr noundef nonnull align 8 dereferenceable(40) %38)
          to label %218 unwind label %222

218:                                              ; preds = %217
  invoke void @_ZN3HIR6Struct4DataC2ESt6vectorISt4pairI8RcStringNS_6VisEntINS_7TypeRefEEEESaIS8_EE(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef %25)
          to label %219 unwind label %226

219:                                              ; preds = %218
  %220 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZN3HIR6Struct4DataaSEOS1_(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 8 dereferenceable(32) %24)
          to label %221 unwind label %230

221:                                              ; preds = %219
  call void @_ZN3HIR6Struct4DataD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #8
  call void @_ZNSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %25) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %24) #8
  store i32 4, ptr %21, align 4
  br label %258

222:                                              ; preds = %217
  %223 = landingpad { ptr, i32 }
          cleanup
  %224 = extractvalue { ptr, i32 } %223, 0
  store ptr %224, ptr %10, align 8
  %225 = extractvalue { ptr, i32 } %223, 1
  store i32 %225, ptr %11, align 4
  br label %235

226:                                              ; preds = %218
  %227 = landingpad { ptr, i32 }
          cleanup
  %228 = extractvalue { ptr, i32 } %227, 0
  store ptr %228, ptr %10, align 8
  %229 = extractvalue { ptr, i32 } %227, 1
  store i32 %229, ptr %11, align 4
  br label %234

230:                                              ; preds = %219
  %231 = landingpad { ptr, i32 }
          cleanup
  %232 = extractvalue { ptr, i32 } %231, 0
  store ptr %232, ptr %10, align 8
  %233 = extractvalue { ptr, i32 } %231, 1
  store i32 %233, ptr %11, align 4
  call void @_ZN3HIR6Struct4DataD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #8
  br label %234

234:                                              ; preds = %230, %226
  call void @_ZNSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %25) #8
  br label %235

235:                                              ; preds = %234, %222
  call void @llvm.lifetime.end.p0(i64 32, ptr %24) #8
  br label %291

236:                                              ; preds = %114
  br label %237

237:                                              ; preds = %236
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #8
  invoke void @_ZN4SpanC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %26)
          to label %238 unwind label %243

238:                                              ; preds = %237
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #8
  %239 = getelementptr inbounds %class.anon.112, ptr %28, i32 0, i32 0
  store ptr %18, ptr %239, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZN15HirDeserialiser18deserialise_structEvE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 8 dereferenceable(8) %28) #8
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %26, ptr noundef %27)
          to label %240 unwind label %247

240:                                              ; preds = %238
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %26) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  %241 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %241, ptr noundef @.str.2)
          to label %242 unwind label %252

242:                                              ; preds = %240
  invoke void @__cxa_throw(ptr %241, ptr @_ZTISt13runtime_error, ptr @_ZNSt13runtime_errorD1Ev) #9
          to label %341 unwind label %124

243:                                              ; preds = %237
  %244 = landingpad { ptr, i32 }
          cleanup
  %245 = extractvalue { ptr, i32 } %244, 0
  store ptr %245, ptr %10, align 8
  %246 = extractvalue { ptr, i32 } %244, 1
  store i32 %246, ptr %11, align 4
  br label %251

247:                                              ; preds = %238
  %248 = landingpad { ptr, i32 }
          cleanup
  %249 = extractvalue { ptr, i32 } %248, 0
  store ptr %249, ptr %10, align 8
  %250 = extractvalue { ptr, i32 } %248, 1
  store i32 %250, ptr %11, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %26) #8
  br label %251

251:                                              ; preds = %247, %243
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  br label %291

252:                                              ; preds = %240
  %253 = landingpad { ptr, i32 }
          cleanup
  %254 = extractvalue { ptr, i32 } %253, 0
  store ptr %254, ptr %10, align 8
  %255 = extractvalue { ptr, i32 } %253, 1
  store i32 %255, ptr %11, align 4
  call void @__cxa_free_exception(ptr %241) #8
  br label %291

256:                                              ; No predecessors!
  br label %257

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

258:                                              ; preds = %257, %221, %183, %150
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #8
  %259 = load i32, ptr %21, align 4
  switch i32 %259, label %341 [
    i32 0, label %260
    i32 4, label %261
  ]

260:                                              ; preds = %258
  br label %261

261:                                              ; preds = %260, %258
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #8
  %262 = getelementptr inbounds %class.HirDeserialiser, ptr %38, i32 0, i32 2
  %263 = load ptr, ptr %262, align 8, !tbaa !11
  %264 = invoke noundef i64 @_ZN3HIR9serialise6Reader10read_countEv(ptr noundef nonnull align 8 dereferenceable(96) %263)
          to label %265 unwind label %292

265:                                              ; preds = %261
  %266 = trunc i64 %264 to i32
  store i32 %266, ptr %29, align 4, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #8
  %267 = getelementptr inbounds %class.HirDeserialiser, ptr %38, i32 0, i32 2
  %268 = load ptr, ptr %267, align 8, !tbaa !11
  %269 = invoke noundef i64 @_ZN3HIR9serialise6Reader10read_countEv(ptr noundef nonnull align 8 dereferenceable(96) %268)
          to label %270 unwind label %296

270:                                              ; preds = %265
  %271 = trunc i64 %269 to i32
  store i32 %271, ptr %30, align 4, !tbaa !18
  br label %272

272:                                              ; preds = %270
  %273 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %274 unwind label %296

274:                                              ; preds = %272
  br i1 %273, label %275, label %300

275:                                              ; preds = %274
  %276 = invoke noundef zeroext i1 @_ZN12_GLOBAL__N_117des_debug_enabledEv()
          to label %277 unwind label %296

277:                                              ; preds = %275
  br i1 %276, label %278, label %300

278:                                              ; preds = %277
  %279 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !18
  %280 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %279, ptr noundef @__func__._ZN15HirDeserialiser18deserialise_structEv)
          to label %281 unwind label %296

281:                                              ; preds = %278
  %282 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %280, ptr noundef @.str.40)
          to label %283 unwind label %296

283:                                              ; preds = %281
  %284 = load i32, ptr %29, align 4, !tbaa !18
  %285 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %282, i32 noundef %284)
          to label %286 unwind label %296

286:                                              ; preds = %283
  %287 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %285, ptr noundef @_ZSt3decRSt8ios_base)
          to label %288 unwind label %296

288:                                              ; preds = %286
  %289 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %287, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %290 unwind label %296

290:                                              ; preds = %288
  br label %300

291:                                              ; preds = %252, %251, %235, %197, %159, %124
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #8
  br label %329

292:                                              ; preds = %261
  %293 = landingpad { ptr, i32 }
          cleanup
  %294 = extractvalue { ptr, i32 } %293, 0
  store ptr %294, ptr %10, align 8
  %295 = extractvalue { ptr, i32 } %293, 1
  store i32 %295, ptr %11, align 4
  br label %328

296:                                              ; preds = %288, %286, %283, %281, %278, %275, %272, %265
  %297 = landingpad { ptr, i32 }
          cleanup
  %298 = extractvalue { ptr, i32 } %297, 0
  store ptr %298, ptr %10, align 8
  %299 = extractvalue { ptr, i32 } %297, 1
  store i32 %299, ptr %11, align 4
  br label %327

300:                                              ; preds = %290, %277, %274
  br label %301

301:                                              ; preds = %300
  br label %302

302:                                              ; preds = %301
  call void @llvm.lifetime.start.p0(i64 56, ptr %31) #8
  invoke void @_ZN15HirDeserialiser20deserialise_markingsEv(ptr dead_on_unwind writable sret(%"struct.HIR::TraitMarkings") align 8 %31, ptr noundef nonnull align 8 dereferenceable(40) %38)
          to label %303 unwind label %311

303:                                              ; preds = %302
  call void @llvm.lifetime.start.p0(i64 48, ptr %32) #8
  invoke void @_ZN15HirDeserialiser24deserialise_str_markingsEv(ptr dead_on_unwind writable sret(%"struct.HIR::StructMarkings") align 8 %32, ptr noundef nonnull align 8 dereferenceable(40) %38)
          to label %304 unwind label %315

304:                                              ; preds = %303
  store i1 false, ptr %33, align 1
  call void @_ZN3HIR13GenericParamsC2EOS0_(ptr noundef nonnull align 8 dereferenceable(96) %34, ptr noundef nonnull align 8 dereferenceable(96) %13) #8
  %305 = load i32, ptr %16, align 4, !tbaa !20
  call void @_ZN3HIR6Struct4DataC2EOS1_(ptr noundef nonnull align 8 dereferenceable(32) %35, ptr noundef nonnull align 8 dereferenceable(32) %17) #8
  %306 = load i32, ptr %29, align 4, !tbaa !18
  call void @_ZN3HIR13TraitMarkingsC2EOS0_(ptr noundef nonnull align 8 dereferenceable(56) %36, ptr noundef nonnull align 8 dereferenceable(56) %31) #8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %37, ptr align 8 %32, i64 48, i1 false), !tbaa.struct !22
  invoke void @_ZN3HIR6StructC2ENS_13GenericParamsENS0_4ReprENS0_4DataEjNS_13TraitMarkingsENS_14StructMarkingsE(ptr noundef nonnull align 8 dereferenceable(252) %0, ptr noundef %34, i32 noundef %305, ptr noundef %35, i32 noundef %306, ptr noundef %36, ptr noundef byval(%"struct.HIR::StructMarkings") align 8 %37)
          to label %307 unwind label %319

307:                                              ; preds = %304
  call void @_ZN3HIR13TraitMarkingsD2Ev(ptr noundef nonnull align 8 dereferenceable(56) %36) #8
  call void @_ZN3HIR6Struct4DataD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #8
  call void @_ZN3HIR13GenericParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %34) #8
  %308 = load i32, ptr %30, align 4, !tbaa !18
  %309 = getelementptr inbounds %"class.HIR::Struct", ptr %0, i32 0, i32 5
  store i32 %308, ptr %309, align 4, !tbaa !31
  store i1 true, ptr %33, align 1
  store i32 1, ptr %21, align 4
  %310 = load i1, ptr %33, align 1
  br i1 %310, label %324, label %323

311:                                              ; preds = %302
  %312 = landingpad { ptr, i32 }
          cleanup
  %313 = extractvalue { ptr, i32 } %312, 0
  store ptr %313, ptr %10, align 8
  %314 = extractvalue { ptr, i32 } %312, 1
  store i32 %314, ptr %11, align 4
  br label %326

315:                                              ; preds = %303
  %316 = landingpad { ptr, i32 }
          cleanup
  %317 = extractvalue { ptr, i32 } %316, 0
  store ptr %317, ptr %10, align 8
  %318 = extractvalue { ptr, i32 } %316, 1
  store i32 %318, ptr %11, align 4
  br label %325

319:                                              ; preds = %304
  %320 = landingpad { ptr, i32 }
          cleanup
  %321 = extractvalue { ptr, i32 } %320, 0
  store ptr %321, ptr %10, align 8
  %322 = extractvalue { ptr, i32 } %320, 1
  store i32 %322, ptr %11, align 4
  call void @_ZN3HIR13TraitMarkingsD2Ev(ptr noundef nonnull align 8 dereferenceable(56) %36) #8
  call void @_ZN3HIR6Struct4DataD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #8
  call void @_ZN3HIR13GenericParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %34) #8
  br label %325

323:                                              ; preds = %307
  call void @_ZN3HIR6StructD2Ev(ptr noundef nonnull align 8 dereferenceable(252) %0) #8
  br label %324

324:                                              ; preds = %323, %307
  call void @llvm.lifetime.end.p0(i64 48, ptr %32) #8
  call void @_ZN3HIR13TraitMarkingsD2Ev(ptr noundef nonnull align 8 dereferenceable(56) %31) #8
  call void @llvm.lifetime.end.p0(i64 56, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #8
  call void @_ZN3HIR6Struct4DataD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #8
  call void @_ZN3HIR13GenericParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %13) #8
  call void @llvm.lifetime.end.p0(i64 96, ptr %13) #8
  call void @_ZN3HIR9serialise6Reader11CloseOnDropD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %12) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #8
  call void @_ZN8TraceLogD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %5) #8
  call void @llvm.lifetime.end.p0(i64 40, ptr %5) #8
  ret void

325:                                              ; preds = %319, %315
  call void @llvm.lifetime.end.p0(i64 48, ptr %32) #8
  call void @_ZN3HIR13TraitMarkingsD2Ev(ptr noundef nonnull align 8 dereferenceable(56) %31) #8
  br label %326

326:                                              ; preds = %325, %311
  call void @llvm.lifetime.end.p0(i64 56, ptr %31) #8
  br label %327

327:                                              ; preds = %326, %296
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #8
  br label %328

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

329:                                              ; preds = %328, %291
  call void @_ZN3HIR6Struct4DataD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #8
  br label %330

330:                                              ; preds = %329, %120
  call void @llvm.lifetime.end.p0(i64 32, ptr %17) #8
  br label %331

331:                                              ; preds = %330, %116
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #8
  br label %332

332:                                              ; preds = %331, %102, %90
  call void @_ZN3HIR13GenericParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %13) #8
  br label %333

333:                                              ; preds = %332, %86
  call void @llvm.lifetime.end.p0(i64 96, ptr %13) #8
  call void @_ZN3HIR9serialise6Reader11CloseOnDropD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %12) #8
  br label %334

334:                                              ; preds = %333, %82
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #8
  call void @_ZN8TraceLogD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %5) #8
  br label %335

335:                                              ; preds = %334, %78
  call void @llvm.lifetime.end.p0(i64 40, ptr %5) #8
  br label %336

336:                                              ; preds = %335
  %337 = load ptr, ptr %10, align 8
  %338 = load i32, ptr %11, align 4
  %339 = insertvalue { ptr, i32 } poison, ptr %337, 0
  %340 = insertvalue { ptr, i32 } %339, i32 %338, 1
  resume { ptr, i32 } %340

341:                                              ; preds = %258, %242
  unreachable
}

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3HIR6Struct4Data9make_UnitENS1_9Data_UnitE(ptr dead_on_unwind noalias writable sret(%"class.HIR::Struct::Data") align 8) #1 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN15HirDeserialiser15deserialise_vecIN3HIR6VisEntINS1_7TypeRefEEEEESt6vectorIT_SaIS6_EEv(ptr dead_on_unwind noalias writable sret(%"class.std::vector.104") align 8, ptr noundef nonnull align 8 dereferenceable(40)) #1 align 2

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN15HirDeserialiser24deserialise_str_markingsEv(ptr dead_on_unwind noalias writable sret(%"struct.HIR::StructMarkings") align 8, ptr noundef nonnull align 8 dereferenceable(40)) #1 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3HIR6StructC2ENS_13GenericParamsENS0_4ReprENS0_4DataEjNS_13TraitMarkingsENS_14StructMarkingsE(ptr noundef nonnull align 8 dereferenceable(252), ptr noundef, i32 noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef byval(%"struct.HIR::StructMarkings") align 8) unnamed_addr #3 align 2

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !6, i64 0}
!10 = !{!"_ZTSZN15HirDeserialiser18deserialise_structEvE3$_1", !6, i64 0}
!11 = !{!12, !6, i64 32}
!12 = !{!"_ZTS15HirDeserialiser", !13, i64 0, !14, i64 8, !6, i64 32}
!13 = !{!"_ZTS8RcString", !6, i64 0}
!14 = !{!"_ZTSSt6vectorIN3HIR7TypeRefESaIS1_EE", !15, i64 0}
!15 = !{!"_ZTSSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE", !16, i64 0}
!16 = !{!"_ZTSNSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE12_Vector_implE", !17, i64 0}
!17 = !{!"_ZTSNSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!18 = !{!19, !19, i64 0}
!19 = !{!"int", !7, i64 0}
!20 = !{!21, !21, i64 0}
!21 = !{!"_ZTSN3HIR6Struct4ReprE", !7, i64 0}
!22 = !{i64 0, i64 1, !23, i64 4, i64 4, !18, i64 8, i64 4, !25, i64 12, i64 4, !18, i64 16, i64 4, !27, i64 20, i64 4, !18, i64 24, i64 4, !18, i64 28, i64 1, !23, i64 29, i64 1, !23, i64 32, i64 8, !29, i64 40, i64 8, !29}
!23 = !{!24, !24, i64 0}
!24 = !{!"bool", !7, i64 0}
!25 = !{!26, !26, i64 0}
!26 = !{!"_ZTSN3HIR14StructMarkings7DstTypeE", !7, i64 0}
!27 = !{!28, !28, i64 0}
!28 = !{!"_ZTSN3HIR14StructMarkings6CoerceE", !7, i64 0}
!29 = !{!30, !30, i64 0}
!30 = !{!"long", !7, i64 0}
!31 = !{!32, !19, i64 140}
!32 = !{!"_ZTSN3HIR6StructE", !33, i64 0, !21, i64 96, !50, i64 104, !19, i64 136, !19, i64 140, !52, i64 144, !61, i64 200, !63, i64 248}
!33 = !{!"_ZTSN3HIR13GenericParamsE", !34, i64 0, !38, i64 24, !42, i64 48, !46, i64 72}
!34 = !{!"_ZTSSt6vectorIN3HIR12TypeParamDefESaIS1_EE", !35, i64 0}
!35 = !{!"_ZTSSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE", !36, i64 0}
!36 = !{!"_ZTSNSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE12_Vector_implE", !37, i64 0}
!37 = !{!"_ZTSNSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!38 = !{!"_ZTSSt6vectorIN3HIR11LifetimeDefESaIS1_EE", !39, i64 0}
!39 = !{!"_ZTSSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE", !40, i64 0}
!40 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE12_Vector_implE", !41, i64 0}
!41 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!42 = !{!"_ZTSSt6vectorIN3HIR13ValueParamDefESaIS1_EE", !43, i64 0}
!43 = !{!"_ZTSSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE", !44, i64 0}
!44 = !{!"_ZTSNSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE12_Vector_implE", !45, i64 0}
!45 = !{!"_ZTSNSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!46 = !{!"_ZTSSt6vectorIN3HIR12GenericBoundESaIS1_EE", !47, i64 0}
!47 = !{!"_ZTSSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE", !48, i64 0}
!48 = !{!"_ZTSNSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE12_Vector_implE", !49, i64 0}
!49 = !{!"_ZTSNSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!50 = !{!"_ZTSN3HIR6Struct4DataE", !51, i64 0, !7, i64 8}
!51 = !{!"_ZTSN3HIR6Struct4Data3TagE", !7, i64 0}
!52 = !{!"_ZTSN3HIR13TraitMarkingsE", !24, i64 0, !24, i64 1, !24, i64 2, !53, i64 8}
!53 = !{!"_ZTSSt3mapIN3HIR10SimplePathENS0_13TraitMarkings11AutoMarkingESt4lessIS1_ESaISt4pairIKS1_S3_EEE", !54, i64 0}
!54 = !{!"_ZTSSt8_Rb_treeIN3HIR10SimplePathESt4pairIKS1_NS0_13TraitMarkings11AutoMarkingEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE", !55, i64 0}
!55 = !{!"_ZTSNSt8_Rb_treeIN3HIR10SimplePathESt4pairIKS1_NS0_13TraitMarkings11AutoMarkingEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE13_Rb_tree_implISA_Lb1EEE", !56, i64 0, !58, i64 8}
!56 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIN3HIR10SimplePathEEE", !57, i64 0}
!57 = !{!"_ZTSSt4lessIN3HIR10SimplePathEE"}
!58 = !{!"_ZTSSt15_Rb_tree_header", !59, i64 0, !30, i64 32}
!59 = !{!"_ZTSSt18_Rb_tree_node_base", !60, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!60 = !{!"_ZTSSt14_Rb_tree_color", !7, i64 0}
!61 = !{!"_ZTSN3HIR14StructMarkingsE", !24, i64 0, !19, i64 4, !26, i64 8, !19, i64 12, !28, i64 16, !19, i64 20, !19, i64 24, !24, i64 28, !24, i64 29, !62, i64 32}
!62 = !{!"_ZTS4U128", !30, i64 0, !30, i64 8}
!63 = !{!"_ZTSN3HIR14ConstEvalStateE", !7, i64 0}


; 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::serialise::Reader::CloseOnDrop" = type { ptr }
%"class.HIR::GenericParams" = type { %"class.std::vector.53", %"class.std::vector.58", %"class.std::vector.63", %"class.std::vector.68" }
%"class.std::vector.53" = type { %"struct.std::_Vector_base.54" }
%"struct.std::_Vector_base.54" = 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.58" = type { %"struct.std::_Vector_base.59" }
%"struct.std::_Vector_base.59" = 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.63" = type { %"struct.std::_Vector_base.64" }
%"struct.std::_Vector_base.64" = 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.68" = type { %"struct.std::_Vector_base.69" }
%"struct.std::_Vector_base.69" = 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::TraitMarkings" = type { i8, i8, i8, %"class.std::map.93" }
%"class.std::map.93" = type { %"class.std::_Rb_tree.94" }
%"class.std::_Rb_tree.94" = type { %"struct.std::_Rb_tree<HIR::SimplePath, std::pair<const HIR::SimplePath, HIR::TraitMarkings::AutoMarking>, std::_Select1st<std::pair<const HIR::SimplePath, HIR::TraitMarkings::AutoMarking>>, std::less<HIR::SimplePath>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<HIR::SimplePath, std::pair<const HIR::SimplePath, HIR::TraitMarkings::AutoMarking>, std::_Select1st<std::pair<const HIR::SimplePath, HIR::TraitMarkings::AutoMarking>>, std::less<HIR::SimplePath>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"class.std::vector.99" = type { %"struct.std::_Vector_base.100" }
%"struct.std::_Vector_base.100" = type { %"struct.std::_Vector_base<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>, std::allocator<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>, std::allocator<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>, std::allocator<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>, std::allocator<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.HIR::Struct" = type <{ %"class.HIR::GenericParams", i32, [4 x i8], %"class.HIR::Struct::Data", i32, i32, %"struct.HIR::TraitMarkings", %"struct.HIR::StructMarkings", i32, [4 x i8] }>
%"class.HIR::Struct::Data" = type { i32, %"union.HIR::Struct::Data::DataUnion" }
%"union.HIR::Struct::Data::DataUnion" = type { %"class.std::vector.104" }
%"class.std::vector.104" = type { %"struct.std::_Vector_base.105" }
%"struct.std::_Vector_base.105" = type { %"struct.std::_Vector_base<HIR::VisEnt<HIR::TypeRef>, std::allocator<HIR::VisEnt<HIR::TypeRef>>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::VisEnt<HIR::TypeRef>, std::allocator<HIR::VisEnt<HIR::TypeRef>>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::VisEnt<HIR::TypeRef>, std::allocator<HIR::VisEnt<HIR::TypeRef>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::VisEnt<HIR::TypeRef>, std::allocator<HIR::VisEnt<HIR::TypeRef>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.HIR::StructMarkings" = type { i8, i32, i32, i32, i32, i32, i32, i8, i8, %class.U128 }
%class.U128 = type { i64, i64 }
%class.TraceLog = type { ptr, %"class.std::function" }
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%"class.std::_Function_base" = type { %"union.std::_Any_data", ptr }
%"union.std::_Any_data" = type { %"union.std::_Nocopy_types" }
%"union.std::_Nocopy_types" = type { { i64, i64 } }
%class.anon.109 = type { i8 }
%class.anon.111 = type { ptr }
%"struct.HIR::GenericParams::PrintArgs" = type { ptr }
%"struct.HIR::GenericParams::PrintBounds" = type { ptr }
%struct.Span = type { ptr }
%class.anon.112 = type { ptr }

@g_debug_indent_level = external local_unnamed_addr global i32, align 4
@.str.2 = external hidden unnamed_addr constant [17 x i8], align 1
@_ZTISt13runtime_error = external constant ptr
@.str.28 = external hidden unnamed_addr constant [10 x i8], align 1
@__func__._ZN15HirDeserialiser18deserialise_structEv = external hidden unnamed_addr constant [19 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [9 x i8], align 1

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

declare i32 @__gxx_personality_v0(...)

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

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

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

declare noundef zeroext i1 @_Z13debug_enabledv() local_unnamed_addr #2

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZN12_GLOBAL__N_117des_debug_enabledEv() local_unnamed_addr #3

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

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

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

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

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

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

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

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

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

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

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

declare void @__cxa_free_exception(ptr) local_unnamed_addr

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3HIR9serialise6Reader11open_objectEPKc(ptr dead_on_unwind noalias writable sret(%"class.HIR::serialise::Reader::CloseOnDrop") align 8, ptr noundef nonnull align 8 dereferenceable(96), ptr noundef) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN15HirDeserialiser25deserialise_genericparamsEv(ptr dead_on_unwind noalias writable sret(%"class.HIR::GenericParams") align 8, ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #1 align 2

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN15HirDeserialiser20deserialise_markingsEv(ptr dead_on_unwind noalias writable sret(%"struct.HIR::TraitMarkings") align 8, ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN15HirDeserialiser15deserialise_vecISt4pairI8RcStringN3HIR6VisEntINS3_7TypeRefEEEEEESt6vectorIT_SaIS9_EEv(ptr dead_on_unwind noalias writable sret(%"class.std::vector.99") align 8, ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #1 align 2

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN15HirDeserialiser18deserialise_structEv(ptr dead_on_unwind noalias writable sret(%"class.HIR::Struct") align 8 %0, ptr noundef nonnull align 8 dereferenceable(40) %1) local_unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca %class.TraceLog, align 8
  %4 = alloca %"class.std::function", align 8
  %5 = alloca %class.anon.109, align 1
  %6 = alloca %"class.std::function", align 8
  %7 = alloca %class.anon.111, align 8
  %8 = alloca %"class.HIR::serialise::Reader::CloseOnDrop", align 8
  %9 = alloca %"class.HIR::GenericParams", align 8
  %10 = alloca %"struct.HIR::GenericParams::PrintArgs", align 8
  %11 = alloca %"struct.HIR::GenericParams::PrintBounds", align 8
  %12 = alloca %"class.HIR::Struct::Data", align 8
  %13 = alloca i32, align 4
  %14 = alloca %"class.HIR::Struct::Data", align 8
  %15 = alloca %"class.HIR::Struct::Data", align 8
  %16 = alloca %"class.std::vector.104", align 8
  %17 = alloca %"class.HIR::Struct::Data", align 8
  %18 = alloca %"class.std::vector.99", align 8
  %19 = alloca %struct.Span, align 8
  %20 = alloca %"class.std::function", align 8
  %21 = alloca %class.anon.112, align 8
  %22 = alloca %"struct.HIR::TraitMarkings", align 8
  %23 = alloca %"struct.HIR::StructMarkings", align 8
  %24 = alloca %"class.HIR::GenericParams", align 8
  %25 = alloca %"class.HIR::Struct::Data", align 8
  %26 = alloca %"struct.HIR::TraitMarkings", align 8
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %3) #7
  %27 = tail call noundef zeroext i1 @_Z13debug_enabledv()
  br i1 %27, label %28, label %.thread

28:                                               ; preds = %2
  %29 = tail call noundef zeroext i1 @_ZN12_GLOBAL__N_117des_debug_enabledEv()
  %spec.select = select i1 %29, ptr @__func__._ZN15HirDeserialiser18deserialise_structEv, ptr null
  br label %.thread

.thread:                                          ; preds = %28, %2
  %30 = phi ptr [ null, %2 ], [ %spec.select, %28 ]
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %5) #7
  call void @"_ZNSt8functionIFvRSoEEC2IZN15HirDeserialiser18deserialise_structEvE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull align 1 dereferenceable(1) %5) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #7
  store ptr %1, ptr %7, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZN15HirDeserialiser18deserialise_structEvE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %6, ptr noundef nonnull align 8 dereferenceable(8) %7) #7
  invoke void @_ZN8TraceLogC1EPKcSt8functionIFvRSoEES5_(ptr noundef nonnull align 8 dereferenceable(40) %3, ptr noundef %30, ptr noundef nonnull %4, ptr noundef nonnull %6)
          to label %31 unwind label %58

31:                                               ; preds = %.thread
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #7
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %4) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #7
  %32 = getelementptr inbounds i8, ptr %1, i64 32
  %33 = load ptr, ptr %32, align 8, !tbaa !10
  invoke void @_ZN3HIR9serialise6Reader11open_objectEPKc(ptr dead_on_unwind nonnull writable sret(%"class.HIR::serialise::Reader::CloseOnDrop") align 8 %8, ptr noundef nonnull align 8 dereferenceable(96) %33, ptr noundef nonnull @.str.36)
          to label %34 unwind label %60

34:                                               ; preds = %31
  call void @llvm.lifetime.start.p0(i64 96, ptr nonnull %9) #7
  invoke void @_ZN15HirDeserialiser25deserialise_genericparamsEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::GenericParams") align 8 %9, ptr noundef nonnull align 8 dereferenceable(40) %1)
          to label %35 unwind label %62

35:                                               ; preds = %34
  %36 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %37 unwind label %64

37:                                               ; preds = %35
  br i1 %36, label %38, label %71

38:                                               ; preds = %37
  %39 = call noundef zeroext i1 @_ZN12_GLOBAL__N_117des_debug_enabledEv()
  br i1 %39, label %40, label %71

40:                                               ; preds = %38
  %41 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !17
  %42 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %41, ptr noundef nonnull @__func__._ZN15HirDeserialiser18deserialise_structEv)
          to label %43 unwind label %64

43:                                               ; preds = %40
  %44 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %42, ptr noundef nonnull @.str.28)
          to label %45 unwind label %64

45:                                               ; preds = %43
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #7
  %46 = invoke ptr @_ZNK3HIR13GenericParams8fmt_argsEv(ptr noundef nonnull align 8 dereferenceable(96) %9)
          to label %47 unwind label %66

47:                                               ; preds = %45
  store ptr %46, ptr %10, align 8
  %48 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIRlsERSoRKNS_13GenericParams9PrintArgsE(ptr noundef nonnull align 8 dereferenceable(8) %44, ptr noundef nonnull align 8 dereferenceable(8) %10)
          to label %49 unwind label %66

49:                                               ; preds = %47
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #7
  %50 = invoke ptr @_ZNK3HIR13GenericParams10fmt_boundsEv(ptr noundef nonnull align 8 dereferenceable(96) %9)
          to label %51 unwind label %68

51:                                               ; preds = %49
  store ptr %50, ptr %11, align 8
  %52 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIRlsERSoRKNS_13GenericParams11PrintBoundsE(ptr noundef nonnull align 8 dereferenceable(8) %48, ptr noundef nonnull align 8 dereferenceable(8) %11)
          to label %53 unwind label %68

53:                                               ; preds = %51
  %54 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %52, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %55 unwind label %68

55:                                               ; preds = %53
  %56 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %54, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %57 unwind label %68

57:                                               ; preds = %55
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #7
  br label %71

58:                                               ; preds = %.thread
  %59 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #7
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %4) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %5) #7
  br label %213

60:                                               ; preds = %31
  %61 = landingpad { ptr, i32 }
          cleanup
  br label %212

62:                                               ; preds = %34
  %63 = landingpad { ptr, i32 }
          cleanup
  br label %211

64:                                               ; preds = %43, %40, %35
  %65 = landingpad { ptr, i32 }
          cleanup
  br label %210

66:                                               ; preds = %47, %45
  %67 = landingpad { ptr, i32 }
          cleanup
  br label %70

68:                                               ; preds = %55, %53, %51, %49
  %69 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #7
  br label %70

70:                                               ; preds = %68, %66
  %.pn = phi { ptr, i32 } [ %69, %68 ], [ %67, %66 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #7
  br label %210

71:                                               ; preds = %57, %38, %37
  %72 = load ptr, ptr %32, align 8, !tbaa !10
  %73 = invoke noundef i32 @_ZN3HIR9serialise6Reader8read_tagEv(ptr noundef nonnull align 8 dereferenceable(96) %72)
          to label %74 unwind label %79

74:                                               ; preds = %71
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %12) #7
  invoke void @_ZN3HIR6Struct4DataC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12)
          to label %75 unwind label %81

75:                                               ; preds = %74
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %13) #7
  %76 = load ptr, ptr %32, align 8, !tbaa !10
  %77 = invoke noundef i32 @_ZN3HIR9serialise6Reader8read_tagEv(ptr noundef nonnull align 8 dereferenceable(96) %76)
          to label %78 unwind label %83

78:                                               ; preds = %75
  store i32 %77, ptr %13, align 4, !tbaa !17
  switch i32 %77, label %162 [
    i32 1, label %85
    i32 2, label %108
    i32 3, label %135
  ]

79:                                               ; preds = %71
  %80 = landingpad { ptr, i32 }
          cleanup
  br label %210

81:                                               ; preds = %74
  %82 = landingpad { ptr, i32 }
          cleanup
  br label %209

83:                                               ; preds = %165, %147, %145, %143, %140, %135, %120, %118, %116, %113, %108, %97, %95, %93, %90, %85, %75
  %84 = landingpad { ptr, i32 }
          cleanup
  br label %193

85:                                               ; preds = %78
  %86 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %87 unwind label %83

87:                                               ; preds = %85
  br i1 %86, label %88, label %99

88:                                               ; preds = %87
  %89 = call noundef zeroext i1 @_ZN12_GLOBAL__N_117des_debug_enabledEv()
  br i1 %89, label %90, label %99

90:                                               ; preds = %88
  %91 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !17
  %92 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %91, ptr noundef nonnull @__func__._ZN15HirDeserialiser18deserialise_structEv)
          to label %93 unwind label %83

93:                                               ; preds = %90
  %94 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %92, ptr noundef nonnull @.str.37)
          to label %95 unwind label %83

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

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

99:                                               ; preds = %97, %88, %87
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %14) #7
  invoke void @_ZN3HIR6Struct4Data9make_UnitENS1_9Data_UnitE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::Struct::Data") align 8 %14)
          to label %100 unwind label %103

100:                                              ; preds = %99
  %101 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZN3HIR6Struct4DataaSEOS1_(ptr noundef nonnull align 8 dereferenceable(32) %12, ptr noundef nonnull align 8 dereferenceable(32) %14)
          to label %102 unwind label %105

102:                                              ; preds = %100
  call void @_ZN3HIR6Struct4DataD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #7
  br label %170

103:                                              ; preds = %99
  %104 = landingpad { ptr, i32 }
          cleanup
  br label %107

105:                                              ; preds = %100
  %106 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR6Struct4DataD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #7
  br label %107

107:                                              ; preds = %105, %103
  %.pn31 = phi { ptr, i32 } [ %106, %105 ], [ %104, %103 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #7
  br label %193

108:                                              ; preds = %78
  %109 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %110 unwind label %83

110:                                              ; preds = %108
  br i1 %109, label %111, label %122

111:                                              ; preds = %110
  %112 = call noundef zeroext i1 @_ZN12_GLOBAL__N_117des_debug_enabledEv()
  br i1 %112, label %113, label %122

113:                                              ; preds = %111
  %114 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !17
  %115 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %114, ptr noundef nonnull @__func__._ZN15HirDeserialiser18deserialise_structEv)
          to label %116 unwind label %83

116:                                              ; preds = %113
  %117 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %115, ptr noundef nonnull @.str.38)
          to label %118 unwind label %83

118:                                              ; preds = %116
  %119 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %117, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %120 unwind label %83

120:                                              ; preds = %118
  %121 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %119, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %122 unwind label %83

122:                                              ; preds = %120, %111, %110
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %15) #7
  invoke void @_ZN15HirDeserialiser15deserialise_vecIN3HIR6VisEntINS1_7TypeRefEEEEESt6vectorIT_SaIS6_EEv(ptr dead_on_unwind nonnull writable sret(%"class.std::vector.104") align 8 %16, ptr noundef nonnull align 8 dereferenceable(40) %1)
          to label %123 unwind label %127

123:                                              ; preds = %122
  invoke void @_ZN3HIR6Struct4DataC2ESt6vectorINS_6VisEntINS_7TypeRefEEESaIS5_EE(ptr noundef nonnull align 8 dereferenceable(32) %15, ptr noundef nonnull %16)
          to label %124 unwind label %129

124:                                              ; preds = %123
  %125 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZN3HIR6Struct4DataaSEOS1_(ptr noundef nonnull align 8 dereferenceable(32) %12, ptr noundef nonnull align 8 dereferenceable(32) %15)
          to label %126 unwind label %131

126:                                              ; preds = %124
  call void @_ZN3HIR6Struct4DataD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #7
  call void @_ZNSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %16) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #7
  br label %170

127:                                              ; preds = %122
  %128 = landingpad { ptr, i32 }
          cleanup
  br label %134

129:                                              ; preds = %123
  %130 = landingpad { ptr, i32 }
          cleanup
  br label %133

131:                                              ; preds = %124
  %132 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR6Struct4DataD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #7
  br label %133

133:                                              ; preds = %131, %129
  %.pn28 = phi { ptr, i32 } [ %132, %131 ], [ %130, %129 ]
  call void @_ZNSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %16) #7
  br label %134

134:                                              ; preds = %133, %127
  %.pn28.pn = phi { ptr, i32 } [ %.pn28, %133 ], [ %128, %127 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #7
  br label %193

135:                                              ; preds = %78
  %136 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %137 unwind label %83

137:                                              ; preds = %135
  br i1 %136, label %138, label %149

138:                                              ; preds = %137
  %139 = call noundef zeroext i1 @_ZN12_GLOBAL__N_117des_debug_enabledEv()
  br i1 %139, label %140, label %149

140:                                              ; preds = %138
  %141 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !17
  %142 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %141, ptr noundef nonnull @__func__._ZN15HirDeserialiser18deserialise_structEv)
          to label %143 unwind label %83

143:                                              ; preds = %140
  %144 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %142, ptr noundef nonnull @.str.39)
          to label %145 unwind label %83

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

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

149:                                              ; preds = %147, %138, %137
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %17) #7
  invoke void @_ZN15HirDeserialiser15deserialise_vecISt4pairI8RcStringN3HIR6VisEntINS3_7TypeRefEEEEEESt6vectorIT_SaIS9_EEv(ptr dead_on_unwind nonnull writable sret(%"class.std::vector.99") align 8 %18, ptr noundef nonnull align 8 dereferenceable(40) %1)
          to label %150 unwind label %154

150:                                              ; preds = %149
  invoke void @_ZN3HIR6Struct4DataC2ESt6vectorISt4pairI8RcStringNS_6VisEntINS_7TypeRefEEEESaIS8_EE(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull %18)
          to label %151 unwind label %156

151:                                              ; preds = %150
  %152 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZN3HIR6Struct4DataaSEOS1_(ptr noundef nonnull align 8 dereferenceable(32) %12, ptr noundef nonnull align 8 dereferenceable(32) %17)
          to label %153 unwind label %158

153:                                              ; preds = %151
  call void @_ZN3HIR6Struct4DataD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #7
  call void @_ZNSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %18) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #7
  br label %170

154:                                              ; preds = %149
  %155 = landingpad { ptr, i32 }
          cleanup
  br label %161

156:                                              ; preds = %150
  %157 = landingpad { ptr, i32 }
          cleanup
  br label %160

158:                                              ; preds = %151
  %159 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR6Struct4DataD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #7
  br label %160

160:                                              ; preds = %158, %156
  %.pn25 = phi { ptr, i32 } [ %159, %158 ], [ %157, %156 ]
  call void @_ZNSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %18) #7
  br label %161

161:                                              ; preds = %160, %154
  %.pn25.pn = phi { ptr, i32 } [ %.pn25, %160 ], [ %155, %154 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #7
  br label %193

162:                                              ; preds = %78
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #7
  call void @_ZN4SpanC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %19)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #7
  store ptr %13, ptr %21, align 8, !tbaa !19
  call void @"_ZNSt8functionIFvRSoEEC2IZN15HirDeserialiser18deserialise_structEvE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %20, ptr noundef nonnull align 8 dereferenceable(8) %21) #7
  invoke void @_ZNK4Span3bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %19, ptr noundef nonnull %20)
          to label %163 unwind label %166

163:                                              ; preds = %162
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #7
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %19) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #7
  %164 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %164, ptr noundef nonnull @.str.2)
          to label %165 unwind label %168

165:                                              ; preds = %163
  invoke void @__cxa_throw(ptr nonnull %164, ptr nonnull @_ZTISt13runtime_error, ptr nonnull @_ZNSt13runtime_errorD1Ev) #8
          to label %214 unwind label %83

166:                                              ; preds = %162
  %167 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #7
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %19) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #7
  br label %193

168:                                              ; preds = %163
  %169 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %164) #7
  br label %193

170:                                              ; preds = %153, %126, %102
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #7
  %171 = load ptr, ptr %32, align 8, !tbaa !10
  %172 = invoke noundef i64 @_ZN3HIR9serialise6Reader10read_countEv(ptr noundef nonnull align 8 dereferenceable(96) %171)
          to label %173 unwind label %194

173:                                              ; preds = %170
  %174 = trunc i64 %172 to i32
  %175 = load ptr, ptr %32, align 8, !tbaa !10
  %176 = invoke noundef i64 @_ZN3HIR9serialise6Reader10read_countEv(ptr noundef nonnull align 8 dereferenceable(96) %175)
          to label %177 unwind label %196

177:                                              ; preds = %173
  %178 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %179 unwind label %196

179:                                              ; preds = %177
  br i1 %178, label %180, label %198

180:                                              ; preds = %179
  %181 = call noundef zeroext i1 @_ZN12_GLOBAL__N_117des_debug_enabledEv()
  br i1 %181, label %182, label %198

182:                                              ; preds = %180
  %183 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !17
  %184 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %183, ptr noundef nonnull @__func__._ZN15HirDeserialiser18deserialise_structEv)
          to label %185 unwind label %196

185:                                              ; preds = %182
  %186 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %184, ptr noundef nonnull @.str.40)
          to label %187 unwind label %196

187:                                              ; preds = %185
  %188 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %186, i32 noundef %174)
          to label %189 unwind label %196

189:                                              ; preds = %187
  %190 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %188, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %191 unwind label %196

191:                                              ; preds = %189
  %192 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %190, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %198 unwind label %196

193:                                              ; preds = %168, %166, %161, %134, %107, %83
  %.pn37 = phi { ptr, i32 } [ %84, %83 ], [ %169, %168 ], [ %167, %166 ], [ %.pn25.pn, %161 ], [ %.pn28.pn, %134 ], [ %.pn31, %107 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %13) #7
  br label %208

194:                                              ; preds = %170
  %195 = landingpad { ptr, i32 }
          cleanup
  br label %208

196:                                              ; preds = %191, %189, %187, %185, %182, %177, %173
  %197 = landingpad { ptr, i32 }
          cleanup
  br label %208

198:                                              ; preds = %191, %180, %179
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %22) #7
  invoke void @_ZN15HirDeserialiser20deserialise_markingsEv(ptr dead_on_unwind nonnull writable sret(%"struct.HIR::TraitMarkings") align 8 %22, ptr noundef nonnull align 8 dereferenceable(40) %1)
          to label %199 unwind label %203

199:                                              ; preds = %198
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %23) #7
  invoke void @_ZN15HirDeserialiser24deserialise_str_markingsEv(ptr dead_on_unwind nonnull writable sret(%"struct.HIR::StructMarkings") align 8 %23, ptr noundef nonnull align 8 dereferenceable(40) %1)
          to label %200 unwind label %205

200:                                              ; preds = %199
  %201 = trunc i64 %176 to i32
  call void @_ZN3HIR13GenericParamsC2EOS0_(ptr noundef nonnull align 8 dereferenceable(96) %24, ptr noundef nonnull align 8 dereferenceable(96) %9) #7
  call void @_ZN3HIR6Struct4DataC2EOS1_(ptr noundef nonnull align 8 dereferenceable(32) %25, ptr noundef nonnull align 8 dereferenceable(32) %12) #7
  call void @_ZN3HIR13TraitMarkingsC2EOS0_(ptr noundef nonnull align 8 dereferenceable(56) %26, ptr noundef nonnull align 8 dereferenceable(56) %22) #7
  call void @_ZN3HIR6StructC2ENS_13GenericParamsENS0_4ReprENS0_4DataEjNS_13TraitMarkingsENS_14StructMarkingsE(ptr noundef nonnull align 8 dereferenceable(252) %0, ptr noundef nonnull %24, i32 noundef %73, ptr noundef nonnull %25, i32 noundef %174, ptr noundef nonnull %26, ptr noundef nonnull byval(%"struct.HIR::StructMarkings") align 8 %23)
  call void @_ZN3HIR13TraitMarkingsD2Ev(ptr noundef nonnull align 8 dereferenceable(56) %26) #7
  call void @_ZN3HIR6Struct4DataD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #7
  call void @_ZN3HIR13GenericParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %24) #7
  %202 = getelementptr inbounds i8, ptr %0, i64 140
  store i32 %201, ptr %202, align 4, !tbaa !20
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %23) #7
  call void @_ZN3HIR13TraitMarkingsD2Ev(ptr noundef nonnull align 8 dereferenceable(56) %22) #7
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %22) #7
  call void @_ZN3HIR6Struct4DataD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #7
  call void @_ZN3HIR13GenericParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %9) #7
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %9) #7
  call void @_ZN3HIR9serialise6Reader11CloseOnDropD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %8) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #7
  call void @_ZN8TraceLogD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %3) #7
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %3) #7
  ret void

203:                                              ; preds = %198
  %204 = landingpad { ptr, i32 }
          cleanup
  br label %207

205:                                              ; preds = %199
  %206 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %23) #7
  call void @_ZN3HIR13TraitMarkingsD2Ev(ptr noundef nonnull align 8 dereferenceable(56) %22) #7
  br label %207

207:                                              ; preds = %205, %203
  %.pn33 = phi { ptr, i32 } [ %206, %205 ], [ %204, %203 ]
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %22) #7
  br label %208

208:                                              ; preds = %194, %207, %196, %193
  %.pn37.pn = phi { ptr, i32 } [ %.pn37, %193 ], [ %195, %194 ], [ %.pn33, %207 ], [ %197, %196 ]
  call void @_ZN3HIR6Struct4DataD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #7
  br label %209

209:                                              ; preds = %208, %81
  %.pn37.pn.pn = phi { ptr, i32 } [ %.pn37.pn, %208 ], [ %82, %81 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #7
  br label %210

210:                                              ; preds = %79, %209, %70, %64
  %.pn37.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn, %70 ], [ %65, %64 ], [ %.pn37.pn.pn, %209 ], [ %80, %79 ]
  call void @_ZN3HIR13GenericParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %9) #7
  br label %211

211:                                              ; preds = %210, %62
  %.pn37.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn37.pn.pn.pn.pn, %210 ], [ %63, %62 ]
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %9) #7
  call void @_ZN3HIR9serialise6Reader11CloseOnDropD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %8) #7
  br label %212

212:                                              ; preds = %211, %60
  %.pn37.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn37.pn.pn.pn.pn.pn, %211 ], [ %61, %60 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #7
  call void @_ZN8TraceLogD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %3) #7
  br label %213

213:                                              ; preds = %212, %58
  %.pn37.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn37.pn.pn.pn.pn.pn.pn, %212 ], [ %59, %58 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %3) #7
  resume { ptr, i32 } %.pn37.pn.pn.pn.pn.pn.pn.pn

214:                                              ; preds = %165
  unreachable
}

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3HIR6Struct4Data9make_UnitENS1_9Data_UnitE(ptr dead_on_unwind noalias writable sret(%"class.HIR::Struct::Data") align 8) local_unnamed_addr #1 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN15HirDeserialiser15deserialise_vecIN3HIR6VisEntINS1_7TypeRefEEEEESt6vectorIT_SaIS6_EEv(ptr dead_on_unwind noalias writable sret(%"class.std::vector.104") align 8, ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #1 align 2

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN15HirDeserialiser24deserialise_str_markingsEv(ptr dead_on_unwind noalias writable sret(%"struct.HIR::StructMarkings") align 8, ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #1 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3HIR6StructC2ENS_13GenericParamsENS0_4ReprENS0_4DataEjNS_13TraitMarkingsENS_14StructMarkingsE(ptr noundef nonnull align 8 dereferenceable(252), ptr noundef, i32 noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef byval(%"struct.HIR::StructMarkings") align 8) unnamed_addr #3 align 2

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!6 = !{!"_ZTSZN15HirDeserialiser18deserialise_structEvE3$_1", !7, i64 0}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!11, !7, i64 32}
!11 = !{!"_ZTS15HirDeserialiser", !12, i64 0, !13, i64 8, !7, i64 32}
!12 = !{!"_ZTS8RcString", !7, i64 0}
!13 = !{!"_ZTSSt6vectorIN3HIR7TypeRefESaIS1_EE", !14, i64 0}
!14 = !{!"_ZTSSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE", !15, i64 0}
!15 = !{!"_ZTSNSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE12_Vector_implE", !16, i64 0}
!16 = !{!"_ZTSNSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE17_Vector_impl_dataE", !7, i64 0, !7, i64 8, !7, i64 16}
!17 = !{!18, !18, i64 0}
!18 = !{!"int", !8, i64 0}
!19 = !{!7, !7, i64 0}
!20 = !{!21, !18, i64 140}
!21 = !{!"_ZTSN3HIR6StructE", !22, i64 0, !39, i64 96, !40, i64 104, !18, i64 136, !18, i64 140, !42, i64 144, !53, i64 200, !57, i64 248}
!22 = !{!"_ZTSN3HIR13GenericParamsE", !23, i64 0, !27, i64 24, !31, i64 48, !35, i64 72}
!23 = !{!"_ZTSSt6vectorIN3HIR12TypeParamDefESaIS1_EE", !24, i64 0}
!24 = !{!"_ZTSSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE", !25, i64 0}
!25 = !{!"_ZTSNSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE12_Vector_implE", !26, i64 0}
!26 = !{!"_ZTSNSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE17_Vector_impl_dataE", !7, i64 0, !7, i64 8, !7, i64 16}
!27 = !{!"_ZTSSt6vectorIN3HIR11LifetimeDefESaIS1_EE", !28, i64 0}
!28 = !{!"_ZTSSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE", !29, i64 0}
!29 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE12_Vector_implE", !30, i64 0}
!30 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE17_Vector_impl_dataE", !7, i64 0, !7, i64 8, !7, i64 16}
!31 = !{!"_ZTSSt6vectorIN3HIR13ValueParamDefESaIS1_EE", !32, i64 0}
!32 = !{!"_ZTSSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE", !33, i64 0}
!33 = !{!"_ZTSNSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE12_Vector_implE", !34, i64 0}
!34 = !{!"_ZTSNSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE17_Vector_impl_dataE", !7, i64 0, !7, i64 8, !7, i64 16}
!35 = !{!"_ZTSSt6vectorIN3HIR12GenericBoundESaIS1_EE", !36, i64 0}
!36 = !{!"_ZTSSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE", !37, i64 0}
!37 = !{!"_ZTSNSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE12_Vector_implE", !38, i64 0}
!38 = !{!"_ZTSNSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE17_Vector_impl_dataE", !7, i64 0, !7, i64 8, !7, i64 16}
!39 = !{!"_ZTSN3HIR6Struct4ReprE", !8, i64 0}
!40 = !{!"_ZTSN3HIR6Struct4DataE", !41, i64 0, !8, i64 8}
!41 = !{!"_ZTSN3HIR6Struct4Data3TagE", !8, i64 0}
!42 = !{!"_ZTSN3HIR13TraitMarkingsE", !43, i64 0, !43, i64 1, !43, i64 2, !44, i64 8}
!43 = !{!"bool", !8, i64 0}
!44 = !{!"_ZTSSt3mapIN3HIR10SimplePathENS0_13TraitMarkings11AutoMarkingESt4lessIS1_ESaISt4pairIKS1_S3_EEE", !45, i64 0}
!45 = !{!"_ZTSSt8_Rb_treeIN3HIR10SimplePathESt4pairIKS1_NS0_13TraitMarkings11AutoMarkingEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE", !46, i64 0}
!46 = !{!"_ZTSNSt8_Rb_treeIN3HIR10SimplePathESt4pairIKS1_NS0_13TraitMarkings11AutoMarkingEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE13_Rb_tree_implISA_Lb1EEE", !47, i64 0, !49, i64 8}
!47 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIN3HIR10SimplePathEEE", !48, i64 0}
!48 = !{!"_ZTSSt4lessIN3HIR10SimplePathEE"}
!49 = !{!"_ZTSSt15_Rb_tree_header", !50, i64 0, !52, i64 32}
!50 = !{!"_ZTSSt18_Rb_tree_node_base", !51, i64 0, !7, i64 8, !7, i64 16, !7, i64 24}
!51 = !{!"_ZTSSt14_Rb_tree_color", !8, i64 0}
!52 = !{!"long", !8, i64 0}
!53 = !{!"_ZTSN3HIR14StructMarkingsE", !43, i64 0, !18, i64 4, !54, i64 8, !18, i64 12, !55, i64 16, !18, i64 20, !18, i64 24, !43, i64 28, !43, i64 29, !56, i64 32}
!54 = !{!"_ZTSN3HIR14StructMarkings7DstTypeE", !8, i64 0}
!55 = !{!"_ZTSN3HIR14StructMarkings6CoerceE", !8, i64 0}
!56 = !{!"_ZTS4U128", !52, i64 0, !52, i64 8}
!57 = !{!"_ZTSN3HIR14ConstEvalStateE", !8, i64 0}


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