; LLVM IR from thepowersgang/mrustc :: src/ast/types.ll (ZNK7TypeRef5cloneEv)

; 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.std::unique_ptr" = type { %"struct.std::__uniq_ptr_data" }
%"struct.std::__uniq_ptr_data" = type { %"class.std::__uniq_ptr_impl" }
%"class.std::__uniq_ptr_impl" = type { %"class.std::tuple" }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Head_base.4" }
%"struct.std::_Head_base.4" = type { ptr }
%class.TypeRef = type { %struct.Span, %class.TypeData }
%struct.Span = type { ptr }
%class.TypeData = type { i32, %"union.TypeData::DataUnion" }
%"union.TypeData::DataUnion" = type { %"struct.TypeData::Data_ErasedType", [32 x i8] }
%"struct.TypeData::Data_ErasedType" = type { %"class.std::vector.34", %"class.std::vector.34", %"class.std::vector.39" }
%"class.std::vector.34" = type { %"struct.std::_Vector_base.35" }
%"struct.std::_Vector_base.35" = type { %"struct.std::_Vector_base<Type_TraitPath, std::allocator<Type_TraitPath>>::_Vector_impl" }
%"struct.std::_Vector_base<Type_TraitPath, std::allocator<Type_TraitPath>>::_Vector_impl" = type { %"struct.std::_Vector_base<Type_TraitPath, std::allocator<Type_TraitPath>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Type_TraitPath, std::allocator<Type_TraitPath>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.39" = type { %"struct.std::_Vector_base.40" }
%"struct.std::_Vector_base.40" = type { %"struct.std::_Vector_base<AST::LifetimeRef, std::allocator<AST::LifetimeRef>>::_Vector_impl" }
%"struct.std::_Vector_base<AST::LifetimeRef, std::allocator<AST::LifetimeRef>>::_Vector_impl" = type { %"struct.std::_Vector_base<AST::LifetimeRef, std::allocator<AST::LifetimeRef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<AST::LifetimeRef, std::allocator<AST::LifetimeRef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.TypeData::Data_None" = type { i8 }
%"struct.TypeData::Data_Any" = type { i8 }
%"struct.TypeData::Data_Bang" = type { i8 }
%"struct.TypeData::Data_Macro" = type { %"class.std::unique_ptr.10" }
%"class.std::unique_ptr.10" = type { %"struct.std::__uniq_ptr_data.11" }
%"struct.std::__uniq_ptr_data.11" = type { %"class.std::__uniq_ptr_impl.12" }
%"class.std::__uniq_ptr_impl.12" = type { %"class.std::tuple.13" }
%"class.std::tuple.13" = type { %"struct.std::_Tuple_impl.14" }
%"struct.std::_Tuple_impl.14" = type { %"struct.std::_Head_base.17" }
%"struct.std::_Head_base.17" = type { ptr }
%"class.AST::MacroInvocation" = type <{ %struct.Span, %"class.AST::Path", %class.RcString, %class.TokenTree, i8, [7 x i8] }>
%"class.AST::Path" = type { ptr, %"class.AST::Path::Class", %"struct.AST::Path::Bindings" }
%"class.AST::Path::Class" = type { i32, %"union.AST::Path::Class::DataUnion" }
%"union.AST::Path::Class::DataUnion" = type { %"struct.AST::Path::Class::Data_UFCS" }
%"struct.AST::Path::Class::Data_UFCS" = type { %"class.std::unique_ptr", %"class.std::unique_ptr.26", %"class.std::vector.44" }
%"class.std::unique_ptr.26" = type { %"struct.std::__uniq_ptr_data.27" }
%"struct.std::__uniq_ptr_data.27" = type { %"class.std::__uniq_ptr_impl.28" }
%"class.std::__uniq_ptr_impl.28" = type { %"class.std::tuple.29" }
%"class.std::tuple.29" = type { %"struct.std::_Tuple_impl.30" }
%"struct.std::_Tuple_impl.30" = type { %"struct.std::_Head_base.33" }
%"struct.std::_Head_base.33" = type { ptr }
%"class.std::vector.44" = type { %"struct.std::_Vector_base.45" }
%"struct.std::_Vector_base.45" = type { %"struct.std::_Vector_base<AST::PathNode, std::allocator<AST::PathNode>>::_Vector_impl" }
%"struct.std::_Vector_base<AST::PathNode, std::allocator<AST::PathNode>>::_Vector_impl" = type { %"struct.std::_Vector_base<AST::PathNode, std::allocator<AST::PathNode>>::_Vector_impl_data" }
%"struct.std::_Vector_base<AST::PathNode, std::allocator<AST::PathNode>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.AST::Path::Bindings" = type { %"struct.AST::PathBinding", %"struct.AST::PathBinding.54", %"struct.AST::PathBinding.55" }
%"struct.AST::PathBinding" = type { %"struct.AST::AbsolutePath", %"class.AST::PathBinding_Value" }
%"struct.AST::AbsolutePath" = type { %class.RcString, %"class.std::vector.49" }
%"class.std::vector.49" = type { %"struct.std::_Vector_base.50" }
%"struct.std::_Vector_base.50" = type { %"struct.std::_Vector_base<RcString, std::allocator<RcString>>::_Vector_impl" }
%"struct.std::_Vector_base<RcString, std::allocator<RcString>>::_Vector_impl" = type { %"struct.std::_Vector_base<RcString, std::allocator<RcString>>::_Vector_impl_data" }
%"struct.std::_Vector_base<RcString, std::allocator<RcString>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.AST::PathBinding_Value" = type { i32, %"union.AST::PathBinding_Value::DataUnion" }
%"union.AST::PathBinding_Value::DataUnion" = type { %"struct.AST::PathBinding_Value::Data_EnumVar" }
%"struct.AST::PathBinding_Value::Data_EnumVar" = type { ptr, i32, ptr }
%"struct.AST::PathBinding.54" = type { %"struct.AST::AbsolutePath", %"class.AST::PathBinding_Type" }
%"class.AST::PathBinding_Type" = type { i32, %"union.AST::PathBinding_Type::DataUnion" }
%"union.AST::PathBinding_Type::DataUnion" = type { %"struct.AST::PathBinding_Type::Data_Module" }
%"struct.AST::PathBinding_Type::Data_Module" = type { ptr, %"struct.AST::PathBinding_Type::(anonymous struct)::Hir" }
%"struct.AST::PathBinding_Type::(anonymous struct)::Hir" = type { ptr, ptr }
%"struct.AST::PathBinding.55" = type { %"struct.AST::AbsolutePath", %"class.AST::PathBinding_Macro" }
%"class.AST::PathBinding_Macro" = type { i32, %"union.AST::PathBinding_Macro::DataUnion" }
%"union.AST::PathBinding_Macro::DataUnion" = type { %"struct.AST::PathBinding_Macro::Data_ProcMacroDerive" }
%"struct.AST::PathBinding_Macro::Data_ProcMacroDerive" = type { ptr, %class.RcString }
%class.RcString = type { ptr }
%class.TokenTree = type { ptr, i32, %"class.Ident::Hygiene", %class.Token, %"class.std::vector.56" }
%"class.Ident::Hygiene" = type { %"class.std::unique_ptr.18" }
%"class.std::unique_ptr.18" = type { %"struct.std::__uniq_ptr_data.19" }
%"struct.std::__uniq_ptr_data.19" = type { %"class.std::__uniq_ptr_impl.20" }
%"class.std::__uniq_ptr_impl.20" = type { %"class.std::tuple.21" }
%"class.std::tuple.21" = type { %"struct.std::_Tuple_impl.22" }
%"struct.std::_Tuple_impl.22" = type { %"struct.std::_Head_base.25" }
%"struct.std::_Head_base.25" = type { ptr }
%class.Token = type { ptr, i32, %"class.Token::Data", %class.Position, %"class.Ident::Hygiene" }
%"class.Token::Data" = type { i32, %"union.Token::Data::DataUnion" }
%"union.Token::Data::DataUnion" = type { %"class.std::__cxx11::basic_string" }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%class.Position = type { %struct.Span, %class.RcString, i32, i32 }
%"class.std::vector.56" = type { %"struct.std::_Vector_base.57" }
%"struct.std::_Vector_base.57" = type { %"struct.std::_Vector_base<TokenTree, std::allocator<TokenTree>>::_Vector_impl" }
%"struct.std::_Vector_base<TokenTree, std::allocator<TokenTree>>::_Vector_impl" = type { %"struct.std::_Vector_base<TokenTree, std::allocator<TokenTree>>::_Vector_impl_data" }
%"struct.std::_Vector_base<TokenTree, std::allocator<TokenTree>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.TypeData::Data_Unit" = type { i8 }
%"struct.TypeData::Data_Primitive" = type { i32 }
%"struct.TypeData::Data_Function" = type { %struct.Type_Function }
%struct.Type_Function = type <{ %"class.AST::HigherRankedBounds", i8, [7 x i8], %"class.std::__cxx11::basic_string", %"class.std::unique_ptr", %"class.std::vector.5", i8, [7 x i8] }>
%"class.AST::HigherRankedBounds" = type { %"class.std::vector" }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<AST::LifetimeParam, std::allocator<AST::LifetimeParam>>::_Vector_impl" }
%"struct.std::_Vector_base<AST::LifetimeParam, std::allocator<AST::LifetimeParam>>::_Vector_impl" = type { %"struct.std::_Vector_base<AST::LifetimeParam, std::allocator<AST::LifetimeParam>>::_Vector_impl_data" }
%"struct.std::_Vector_base<AST::LifetimeParam, std::allocator<AST::LifetimeParam>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.5" = type { %"struct.std::_Vector_base.6" }
%"struct.std::_Vector_base.6" = type { %"struct.std::_Vector_base<TypeRef, std::allocator<TypeRef>>::_Vector_impl" }
%"struct.std::_Vector_base<TypeRef, std::allocator<TypeRef>>::_Vector_impl" = type { %"struct.std::_Vector_base<TypeRef, std::allocator<TypeRef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<TypeRef, std::allocator<TypeRef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.TypeData::Data_Tuple" = type { %"class.std::vector.5" }
%"struct.TypeData::Data_Borrow" = type { %"class.AST::LifetimeRef", i8, %"class.std::unique_ptr" }
%"class.AST::LifetimeRef" = type <{ %struct.Ident, i16, [6 x i8] }>
%struct.Ident = type { %"class.Ident::Hygiene", %class.RcString }
%"struct.TypeData::Data_Pointer" = type { i8, %"class.std::unique_ptr" }
%"struct.TypeData::Data_Array" = type { %"class.std::unique_ptr", %"class.std::shared_ptr" }
%"class.std::shared_ptr" = type { %"class.std::__shared_ptr" }
%"class.std::__shared_ptr" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }
%"struct.TypeData::Data_Slice" = type { %"class.std::unique_ptr" }
%"struct.TypeData::Data_Generic" = type <{ %class.RcString, i32, [4 x i8] }>
%"struct.TypeData::Data_TraitObject" = type { %"class.std::vector.34", %"class.std::vector.39" }

@.str.21 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [72 x i8], align 1
@__PRETTY_FUNCTION__._ZNK7TypeRef5cloneEv = external hidden unnamed_addr constant [31 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [1 x i8], align 1
@_ZTIPKc = external constant ptr

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

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

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z15make_unique_ptrI7TypeRefESt10unique_ptrIT_St14default_deleteIS2_EEOS2_(ptr dead_on_unwind noalias writable sret(%"class.std::unique_ptr") align 8, ptr noundef nonnull align 8 dereferenceable(120)) #1

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZNK7TypeRef5cloneEv(ptr dead_on_unwind noalias writable sret(%class.TypeRef) align 8 %0, ptr noundef nonnull align 8 dereferenceable(120) %1) #1 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca %struct.Span, align 8
  %6 = alloca %class.TypeData, align 8
  %7 = alloca %"struct.TypeData::Data_None", align 1
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca %struct.Span, align 8
  %11 = alloca %class.TypeData, align 8
  %12 = alloca %"struct.TypeData::Data_Any", align 1
  %13 = alloca %struct.Span, align 8
  %14 = alloca %class.TypeData, align 8
  %15 = alloca %"struct.TypeData::Data_Bang", align 1
  %16 = alloca ptr, align 8
  %17 = alloca %struct.Span, align 8
  %18 = alloca %class.TypeData, align 8
  %19 = alloca %"struct.TypeData::Data_Macro", align 8
  %20 = alloca %"class.AST::MacroInvocation", align 8
  %21 = alloca %struct.Span, align 8
  %22 = alloca %class.TypeData, align 8
  %23 = alloca %"struct.TypeData::Data_Unit", align 1
  %24 = alloca %struct.Span, align 8
  %25 = alloca %class.TypeData, align 8
  %26 = alloca %"struct.TypeData::Data_Primitive", align 4
  %27 = alloca %struct.Span, align 8
  %28 = alloca %class.TypeData, align 8
  %29 = alloca %"struct.TypeData::Data_Function", align 8
  %30 = alloca ptr, align 8
  %31 = alloca %struct.Span, align 8
  %32 = alloca %class.TypeData, align 8
  %33 = alloca %"struct.TypeData::Data_Tuple", align 8
  %34 = alloca ptr, align 8
  %35 = alloca %struct.Span, align 8
  %36 = alloca %class.TypeData, align 8
  %37 = alloca %"struct.TypeData::Data_Borrow", align 8
  %38 = alloca %class.TypeRef, align 8
  %39 = alloca i1, align 1
  %40 = alloca ptr, align 8
  %41 = alloca %struct.Span, align 8
  %42 = alloca %class.TypeData, align 8
  %43 = alloca %"struct.TypeData::Data_Pointer", align 8
  %44 = alloca %class.TypeRef, align 8
  %45 = alloca ptr, align 8
  %46 = alloca %struct.Span, align 8
  %47 = alloca %class.TypeData, align 8
  %48 = alloca %"struct.TypeData::Data_Array", align 8
  %49 = alloca %class.TypeRef, align 8
  %50 = alloca ptr, align 8
  %51 = alloca %struct.Span, align 8
  %52 = alloca %class.TypeData, align 8
  %53 = alloca %"struct.TypeData::Data_Slice", align 8
  %54 = alloca %class.TypeRef, align 8
  %55 = alloca %struct.Span, align 8
  %56 = alloca %class.TypeData, align 8
  %57 = alloca %"struct.TypeData::Data_Generic", align 8
  %58 = alloca ptr, align 8
  %59 = alloca %struct.Span, align 8
  %60 = alloca %class.TypeData, align 8
  %61 = alloca %"class.std::unique_ptr.26", align 8
  %62 = alloca %struct.Span, align 8
  %63 = alloca %class.TypeData, align 8
  %64 = alloca %"struct.TypeData::Data_TraitObject", align 8
  %65 = alloca %struct.Span, align 8
  %66 = alloca %class.TypeData, align 8
  %67 = alloca %"struct.TypeData::Data_ErasedType", align 8
  store ptr %0, ptr %3, align 8
  store ptr %1, ptr %4, align 8, !tbaa !5
  %68 = load ptr, ptr %4, align 8
  %69 = getelementptr inbounds %class.TypeRef, ptr %68, i32 0, i32 1
  %70 = call noundef i32 @_ZNK8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(112) %69)
  switch i32 %70, label %471 [
    i32 0, label %71
    i32 1, label %72
    i32 2, label %88
    i32 3, label %104
    i32 5, label %120
    i32 4, label %151
    i32 6, label %167
    i32 7, label %185
    i32 8, label %207
    i32 9, label %231
    i32 10, label %280
    i32 11, label %317
    i32 12, label %351
    i32 13, label %382
    i32 14, label %404
    i32 15, label %427
    i32 16, label %449
  ]

71:                                               ; preds = %2
  call void @__assert_fail(ptr noundef @.str.21, ptr noundef @.str.22, i32 noundef 137, ptr noundef @__PRETTY_FUNCTION__._ZNK7TypeRef5cloneEv) #9
  unreachable

72:                                               ; preds = %2
  %73 = getelementptr inbounds %class.TypeRef, ptr %68, i32 0, i32 0
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %5, ptr noundef nonnull align 8 dereferenceable(8) %73)
  %74 = getelementptr inbounds %class.TypeRef, ptr %68, i32 0, i32 1
  %75 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNK8TypeData7as_NoneEv(ptr noundef nonnull align 8 dereferenceable(112) %74)
          to label %76 unwind label %79

76:                                               ; preds = %72
  invoke void @_ZN8TypeData9make_NoneENS_9Data_NoneE(ptr dead_on_unwind writable sret(%class.TypeData) align 8 %6)
          to label %77 unwind label %79

77:                                               ; preds = %76
  invoke void @_ZN7TypeRefC2E4Span8TypeData(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef %5, ptr noundef %6)
          to label %78 unwind label %83

78:                                               ; preds = %77
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %6) #10
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %5) #10
  br label %473

79:                                               ; preds = %76, %72
  %80 = landingpad { ptr, i32 }
          cleanup
  %81 = extractvalue { ptr, i32 } %80, 0
  store ptr %81, ptr %8, align 8
  %82 = extractvalue { ptr, i32 } %80, 1
  store i32 %82, ptr %9, align 4
  br label %87

83:                                               ; preds = %77
  %84 = landingpad { ptr, i32 }
          cleanup
  %85 = extractvalue { ptr, i32 } %84, 0
  store ptr %85, ptr %8, align 8
  %86 = extractvalue { ptr, i32 } %84, 1
  store i32 %86, ptr %9, align 4
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %6) #10
  br label %87

87:                                               ; preds = %83, %79
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %5) #10
  br label %474

88:                                               ; preds = %2
  %89 = getelementptr inbounds %class.TypeRef, ptr %68, i32 0, i32 0
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %10, ptr noundef nonnull align 8 dereferenceable(8) %89)
  %90 = getelementptr inbounds %class.TypeRef, ptr %68, i32 0, i32 1
  %91 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNK8TypeData6as_AnyEv(ptr noundef nonnull align 8 dereferenceable(112) %90)
          to label %92 unwind label %95

92:                                               ; preds = %88
  invoke void @_ZN8TypeData8make_AnyENS_8Data_AnyE(ptr dead_on_unwind writable sret(%class.TypeData) align 8 %11)
          to label %93 unwind label %95

93:                                               ; preds = %92
  invoke void @_ZN7TypeRefC2E4Span8TypeData(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef %10, ptr noundef %11)
          to label %94 unwind label %99

94:                                               ; preds = %93
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %11) #10
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %10) #10
  br label %473

95:                                               ; preds = %92, %88
  %96 = landingpad { ptr, i32 }
          cleanup
  %97 = extractvalue { ptr, i32 } %96, 0
  store ptr %97, ptr %8, align 8
  %98 = extractvalue { ptr, i32 } %96, 1
  store i32 %98, ptr %9, align 4
  br label %103

99:                                               ; preds = %93
  %100 = landingpad { ptr, i32 }
          cleanup
  %101 = extractvalue { ptr, i32 } %100, 0
  store ptr %101, ptr %8, align 8
  %102 = extractvalue { ptr, i32 } %100, 1
  store i32 %102, ptr %9, align 4
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %11) #10
  br label %103

103:                                              ; preds = %99, %95
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %10) #10
  br label %474

104:                                              ; preds = %2
  %105 = getelementptr inbounds %class.TypeRef, ptr %68, i32 0, i32 0
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %105)
  %106 = getelementptr inbounds %class.TypeRef, ptr %68, i32 0, i32 1
  %107 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNK8TypeData7as_BangEv(ptr noundef nonnull align 8 dereferenceable(112) %106)
          to label %108 unwind label %111

108:                                              ; preds = %104
  invoke void @_ZN8TypeData9make_BangENS_9Data_BangE(ptr dead_on_unwind writable sret(%class.TypeData) align 8 %14)
          to label %109 unwind label %111

109:                                              ; preds = %108
  invoke void @_ZN7TypeRefC2E4Span8TypeData(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef %13, ptr noundef %14)
          to label %110 unwind label %115

110:                                              ; preds = %109
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %14) #10
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %13) #10
  br label %473

111:                                              ; preds = %108, %104
  %112 = landingpad { ptr, i32 }
          cleanup
  %113 = extractvalue { ptr, i32 } %112, 0
  store ptr %113, ptr %8, align 8
  %114 = extractvalue { ptr, i32 } %112, 1
  store i32 %114, ptr %9, align 4
  br label %119

115:                                              ; preds = %109
  %116 = landingpad { ptr, i32 }
          cleanup
  %117 = extractvalue { ptr, i32 } %116, 0
  store ptr %117, ptr %8, align 8
  %118 = extractvalue { ptr, i32 } %116, 1
  store i32 %118, ptr %9, align 4
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %14) #10
  br label %119

119:                                              ; preds = %115, %111
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %13) #10
  br label %474

120:                                              ; preds = %2
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #10
  %121 = getelementptr inbounds %class.TypeRef, ptr %68, i32 0, i32 1
  %122 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK8TypeData8as_MacroEv(ptr noundef nonnull align 8 dereferenceable(112) %121)
  store ptr %122, ptr %16, align 8, !tbaa !5
  %123 = getelementptr inbounds %class.TypeRef, ptr %68, i32 0, i32 0
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef nonnull align 8 dereferenceable(8) %123)
  %124 = getelementptr inbounds %"struct.TypeData::Data_Macro", ptr %19, i32 0, i32 0
  call void @llvm.lifetime.start.p0(i64 400, ptr %20) #10
  %125 = load ptr, ptr %16, align 8, !tbaa !5
  %126 = getelementptr inbounds %"struct.TypeData::Data_Macro", ptr %125, i32 0, i32 0
  %127 = call noundef ptr @_ZNKSt10unique_ptrIN3AST15MacroInvocationESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %126) #10
  invoke void @_ZNK3AST15MacroInvocation5cloneEv(ptr dead_on_unwind writable sret(%"class.AST::MacroInvocation") align 8 %20, ptr noundef nonnull align 8 dereferenceable(393) %127)
          to label %128 unwind label %132

128:                                              ; preds = %120
  invoke void @_Z15make_unique_ptrIN3AST15MacroInvocationEESt10unique_ptrIT_St14default_deleteIS3_EEOS3_(ptr dead_on_unwind writable sret(%"class.std::unique_ptr.10") align 8 %124, ptr noundef nonnull align 8 dereferenceable(393) %20)
          to label %129 unwind label %136

129:                                              ; preds = %128
  invoke void @_ZN8TypeData10make_MacroENS_10Data_MacroE(ptr dead_on_unwind writable sret(%class.TypeData) align 8 %18, ptr noundef %19)
          to label %130 unwind label %140

130:                                              ; preds = %129
  invoke void @_ZN7TypeRefC2E4Span8TypeData(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef %17, ptr noundef %18)
          to label %131 unwind label %144

131:                                              ; preds = %130
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %18) #10
  call void @_ZN8TypeData10Data_MacroD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %19) #10
  call void @_ZN3AST15MacroInvocationD2Ev(ptr noundef nonnull align 8 dereferenceable(393) %20) #10
  call void @llvm.lifetime.end.p0(i64 400, ptr %20) #10
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %17) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #10
  br label %473

132:                                              ; preds = %120
  %133 = landingpad { ptr, i32 }
          cleanup
  %134 = extractvalue { ptr, i32 } %133, 0
  store ptr %134, ptr %8, align 8
  %135 = extractvalue { ptr, i32 } %133, 1
  store i32 %135, ptr %9, align 4
  br label %150

136:                                              ; preds = %128
  %137 = landingpad { ptr, i32 }
          cleanup
  %138 = extractvalue { ptr, i32 } %137, 0
  store ptr %138, ptr %8, align 8
  %139 = extractvalue { ptr, i32 } %137, 1
  store i32 %139, ptr %9, align 4
  br label %149

140:                                              ; preds = %129
  %141 = landingpad { ptr, i32 }
          cleanup
  %142 = extractvalue { ptr, i32 } %141, 0
  store ptr %142, ptr %8, align 8
  %143 = extractvalue { ptr, i32 } %141, 1
  store i32 %143, ptr %9, align 4
  br label %148

144:                                              ; preds = %130
  %145 = landingpad { ptr, i32 }
          cleanup
  %146 = extractvalue { ptr, i32 } %145, 0
  store ptr %146, ptr %8, align 8
  %147 = extractvalue { ptr, i32 } %145, 1
  store i32 %147, ptr %9, align 4
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %18) #10
  br label %148

148:                                              ; preds = %144, %140
  call void @_ZN8TypeData10Data_MacroD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %19) #10
  br label %149

149:                                              ; preds = %148, %136
  call void @_ZN3AST15MacroInvocationD2Ev(ptr noundef nonnull align 8 dereferenceable(393) %20) #10
  br label %150

150:                                              ; preds = %149, %132
  call void @llvm.lifetime.end.p0(i64 400, ptr %20) #10
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %17) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #10
  br label %474

151:                                              ; preds = %2
  %152 = getelementptr inbounds %class.TypeRef, ptr %68, i32 0, i32 0
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %21, ptr noundef nonnull align 8 dereferenceable(8) %152)
  %153 = getelementptr inbounds %class.TypeRef, ptr %68, i32 0, i32 1
  %154 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNK8TypeData7as_UnitEv(ptr noundef nonnull align 8 dereferenceable(112) %153)
          to label %155 unwind label %158

155:                                              ; preds = %151
  invoke void @_ZN8TypeData9make_UnitENS_9Data_UnitE(ptr dead_on_unwind writable sret(%class.TypeData) align 8 %22)
          to label %156 unwind label %158

156:                                              ; preds = %155
  invoke void @_ZN7TypeRefC2E4Span8TypeData(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef %21, ptr noundef %22)
          to label %157 unwind label %162

157:                                              ; preds = %156
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %22) #10
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %21) #10
  br label %473

158:                                              ; preds = %155, %151
  %159 = landingpad { ptr, i32 }
          cleanup
  %160 = extractvalue { ptr, i32 } %159, 0
  store ptr %160, ptr %8, align 8
  %161 = extractvalue { ptr, i32 } %159, 1
  store i32 %161, ptr %9, align 4
  br label %166

162:                                              ; preds = %156
  %163 = landingpad { ptr, i32 }
          cleanup
  %164 = extractvalue { ptr, i32 } %163, 0
  store ptr %164, ptr %8, align 8
  %165 = extractvalue { ptr, i32 } %163, 1
  store i32 %165, ptr %9, align 4
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %22) #10
  br label %166

166:                                              ; preds = %162, %158
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %21) #10
  br label %474

167:                                              ; preds = %2
  %168 = getelementptr inbounds %class.TypeRef, ptr %68, i32 0, i32 0
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %24, ptr noundef nonnull align 8 dereferenceable(8) %168)
  %169 = getelementptr inbounds %class.TypeRef, ptr %68, i32 0, i32 1
  %170 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK8TypeData12as_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(112) %169)
          to label %171 unwind label %176

171:                                              ; preds = %167
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %26, ptr align 4 %170, i64 4, i1 false), !tbaa.struct !9
  %172 = getelementptr inbounds %"struct.TypeData::Data_Primitive", ptr %26, i32 0, i32 0
  %173 = load i32, ptr %172, align 4
  invoke void @_ZN8TypeData14make_PrimitiveENS_14Data_PrimitiveE(ptr dead_on_unwind writable sret(%class.TypeData) align 8 %25, i32 %173)
          to label %174 unwind label %176

174:                                              ; preds = %171
  invoke void @_ZN7TypeRefC2E4Span8TypeData(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef %24, ptr noundef %25)
          to label %175 unwind label %180

175:                                              ; preds = %174
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %25) #10
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %24) #10
  br label %473

176:                                              ; preds = %171, %167
  %177 = landingpad { ptr, i32 }
          cleanup
  %178 = extractvalue { ptr, i32 } %177, 0
  store ptr %178, ptr %8, align 8
  %179 = extractvalue { ptr, i32 } %177, 1
  store i32 %179, ptr %9, align 4
  br label %184

180:                                              ; preds = %174
  %181 = landingpad { ptr, i32 }
          cleanup
  %182 = extractvalue { ptr, i32 } %181, 0
  store ptr %182, ptr %8, align 8
  %183 = extractvalue { ptr, i32 } %181, 1
  store i32 %183, ptr %9, align 4
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %25) #10
  br label %184

184:                                              ; preds = %180, %176
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %24) #10
  br label %474

185:                                              ; preds = %2
  %186 = getelementptr inbounds %class.TypeRef, ptr %68, i32 0, i32 0
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %27, ptr noundef nonnull align 8 dereferenceable(8) %186)
  %187 = getelementptr inbounds %class.TypeRef, ptr %68, i32 0, i32 1
  %188 = invoke noundef nonnull align 8 dereferenceable(104) ptr @_ZNK8TypeData11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(112) %187)
          to label %189 unwind label %193

189:                                              ; preds = %185
  invoke void @_ZN8TypeData13Data_FunctionC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(104) %29, ptr noundef nonnull align 8 dereferenceable(104) %188)
          to label %190 unwind label %193

190:                                              ; preds = %189
  invoke void @_ZN8TypeData13make_FunctionENS_13Data_FunctionE(ptr dead_on_unwind writable sret(%class.TypeData) align 8 %28, ptr noundef %29)
          to label %191 unwind label %197

191:                                              ; preds = %190
  invoke void @_ZN7TypeRefC2E4Span8TypeData(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef %27, ptr noundef %28)
          to label %192 unwind label %201

192:                                              ; preds = %191
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %28) #10
  call void @_ZN8TypeData13Data_FunctionD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %29) #10
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %27) #10
  br label %473

193:                                              ; preds = %189, %185
  %194 = landingpad { ptr, i32 }
          cleanup
  %195 = extractvalue { ptr, i32 } %194, 0
  store ptr %195, ptr %8, align 8
  %196 = extractvalue { ptr, i32 } %194, 1
  store i32 %196, ptr %9, align 4
  br label %206

197:                                              ; preds = %190
  %198 = landingpad { ptr, i32 }
          cleanup
  %199 = extractvalue { ptr, i32 } %198, 0
  store ptr %199, ptr %8, align 8
  %200 = extractvalue { ptr, i32 } %198, 1
  store i32 %200, ptr %9, align 4
  br label %205

201:                                              ; preds = %191
  %202 = landingpad { ptr, i32 }
          cleanup
  %203 = extractvalue { ptr, i32 } %202, 0
  store ptr %203, ptr %8, align 8
  %204 = extractvalue { ptr, i32 } %202, 1
  store i32 %204, ptr %9, align 4
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %28) #10
  br label %205

205:                                              ; preds = %201, %197
  call void @_ZN8TypeData13Data_FunctionD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %29) #10
  br label %206

206:                                              ; preds = %205, %193
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %27) #10
  br label %474

207:                                              ; preds = %2
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #10
  %208 = getelementptr inbounds %class.TypeRef, ptr %68, i32 0, i32 1
  %209 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK8TypeData8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(112) %208)
  store ptr %209, ptr %30, align 8, !tbaa !5
  %210 = getelementptr inbounds %class.TypeRef, ptr %68, i32 0, i32 0
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %31, ptr noundef nonnull align 8 dereferenceable(8) %210)
  %211 = getelementptr inbounds %"struct.TypeData::Data_Tuple", ptr %33, i32 0, i32 0
  %212 = load ptr, ptr %30, align 8, !tbaa !5
  %213 = getelementptr inbounds %"struct.TypeData::Data_Tuple", ptr %212, i32 0, i32 0
  invoke void @_ZZNK7TypeRef5cloneEvEN1H12clone_ty_vecERKSt6vectorIS_SaIS_EE(ptr dead_on_unwind writable sret(%"class.std::vector.5") align 8 %211, ptr noundef nonnull align 8 dereferenceable(24) %213)
          to label %214 unwind label %217

214:                                              ; preds = %207
  invoke void @_ZN8TypeData10make_TupleENS_10Data_TupleE(ptr dead_on_unwind writable sret(%class.TypeData) align 8 %32, ptr noundef %33)
          to label %215 unwind label %221

215:                                              ; preds = %214
  invoke void @_ZN7TypeRefC2E4Span8TypeData(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef %31, ptr noundef %32)
          to label %216 unwind label %225

216:                                              ; preds = %215
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %32) #10
  call void @_ZN8TypeData10Data_TupleD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %33) #10
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %31) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #10
  br label %473

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

221:                                              ; preds = %214
  %222 = landingpad { ptr, i32 }
          cleanup
  %223 = extractvalue { ptr, i32 } %222, 0
  store ptr %223, ptr %8, align 8
  %224 = extractvalue { ptr, i32 } %222, 1
  store i32 %224, ptr %9, align 4
  br label %229

225:                                              ; preds = %215
  %226 = landingpad { ptr, i32 }
          cleanup
  %227 = extractvalue { ptr, i32 } %226, 0
  store ptr %227, ptr %8, align 8
  %228 = extractvalue { ptr, i32 } %226, 1
  store i32 %228, ptr %9, align 4
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %32) #10
  br label %229

229:                                              ; preds = %225, %221
  call void @_ZN8TypeData10Data_TupleD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %33) #10
  br label %230

230:                                              ; preds = %229, %217
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %31) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #10
  br label %474

231:                                              ; preds = %2
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #10
  %232 = getelementptr inbounds %class.TypeRef, ptr %68, i32 0, i32 1
  %233 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK8TypeData9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(112) %232)
  store ptr %233, ptr %34, align 8, !tbaa !5
  %234 = getelementptr inbounds %class.TypeRef, ptr %68, i32 0, i32 0
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %35, ptr noundef nonnull align 8 dereferenceable(8) %234)
  %235 = getelementptr inbounds %"struct.TypeData::Data_Borrow", ptr %37, i32 0, i32 0
  %236 = load ptr, ptr %34, align 8, !tbaa !5
  %237 = getelementptr inbounds %"struct.TypeData::Data_Borrow", ptr %236, i32 0, i32 0
  invoke void @_ZN3AST11LifetimeRefC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(18) %235, ptr noundef nonnull align 8 dereferenceable(18) %237)
          to label %238 unwind label %253

238:                                              ; preds = %231
  store i1 true, ptr %39, align 1
  %239 = getelementptr inbounds %"struct.TypeData::Data_Borrow", ptr %37, i32 0, i32 1
  %240 = load ptr, ptr %34, align 8, !tbaa !5
  %241 = getelementptr inbounds %"struct.TypeData::Data_Borrow", ptr %240, i32 0, i32 1
  %242 = load i8, ptr %241, align 8, !tbaa !12, !range !32, !noundef !33
  %243 = trunc i8 %242 to i1
  %244 = zext i1 %243 to i8
  store i8 %244, ptr %239, align 8, !tbaa !12
  %245 = getelementptr inbounds %"struct.TypeData::Data_Borrow", ptr %37, i32 0, i32 2
  call void @llvm.lifetime.start.p0(i64 120, ptr %38) #10
  %246 = load ptr, ptr %34, align 8, !tbaa !5
  %247 = getelementptr inbounds %"struct.TypeData::Data_Borrow", ptr %246, i32 0, i32 2
  %248 = call noundef ptr @_ZNKSt10unique_ptrI7TypeRefSt14default_deleteIS0_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %247) #10
  invoke void @_ZNK7TypeRef5cloneEv(ptr dead_on_unwind writable sret(%class.TypeRef) align 8 %38, ptr noundef nonnull align 8 dereferenceable(120) %248)
          to label %249 unwind label %257

249:                                              ; preds = %238
  invoke void @_Z15make_unique_ptrI7TypeRefESt10unique_ptrIT_St14default_deleteIS2_EEOS2_(ptr dead_on_unwind writable sret(%"class.std::unique_ptr") align 8 %245, ptr noundef nonnull align 8 dereferenceable(120) %38)
          to label %250 unwind label %261

250:                                              ; preds = %249
  store i1 false, ptr %39, align 1
  invoke void @_ZN8TypeData11make_BorrowENS_11Data_BorrowE(ptr dead_on_unwind writable sret(%class.TypeData) align 8 %36, ptr noundef %37)
          to label %251 unwind label %265

251:                                              ; preds = %250
  invoke void @_ZN7TypeRefC2E4Span8TypeData(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef %35, ptr noundef %36)
          to label %252 unwind label %269

252:                                              ; preds = %251
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %36) #10
  call void @_ZN8TypeData11Data_BorrowD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %37) #10
  call void @_ZN7TypeRefD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %38) #10
  call void @llvm.lifetime.end.p0(i64 120, ptr %38) #10
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %35) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #10
  br label %473

253:                                              ; preds = %231
  %254 = landingpad { ptr, i32 }
          cleanup
  %255 = extractvalue { ptr, i32 } %254, 0
  store ptr %255, ptr %8, align 8
  %256 = extractvalue { ptr, i32 } %254, 1
  store i32 %256, ptr %9, align 4
  br label %279

257:                                              ; preds = %238
  %258 = landingpad { ptr, i32 }
          cleanup
  %259 = extractvalue { ptr, i32 } %258, 0
  store ptr %259, ptr %8, align 8
  %260 = extractvalue { ptr, i32 } %258, 1
  store i32 %260, ptr %9, align 4
  br label %275

261:                                              ; preds = %249
  %262 = landingpad { ptr, i32 }
          cleanup
  %263 = extractvalue { ptr, i32 } %262, 0
  store ptr %263, ptr %8, align 8
  %264 = extractvalue { ptr, i32 } %262, 1
  store i32 %264, ptr %9, align 4
  br label %274

265:                                              ; preds = %250
  %266 = landingpad { ptr, i32 }
          cleanup
  %267 = extractvalue { ptr, i32 } %266, 0
  store ptr %267, ptr %8, align 8
  %268 = extractvalue { ptr, i32 } %266, 1
  store i32 %268, ptr %9, align 4
  br label %273

269:                                              ; preds = %251
  %270 = landingpad { ptr, i32 }
          cleanup
  %271 = extractvalue { ptr, i32 } %270, 0
  store ptr %271, ptr %8, align 8
  %272 = extractvalue { ptr, i32 } %270, 1
  store i32 %272, ptr %9, align 4
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %36) #10
  br label %273

273:                                              ; preds = %269, %265
  call void @_ZN8TypeData11Data_BorrowD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %37) #10
  br label %274

274:                                              ; preds = %273, %261
  call void @_ZN7TypeRefD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %38) #10
  br label %275

275:                                              ; preds = %274, %257
  call void @llvm.lifetime.end.p0(i64 120, ptr %38) #10
  %276 = load i1, ptr %39, align 1
  br i1 %276, label %277, label %278

277:                                              ; preds = %275
  call void @_ZN3AST11LifetimeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(18) %235) #10
  br label %278

278:                                              ; preds = %277, %275
  br label %279

279:                                              ; preds = %278, %253
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %35) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #10
  br label %474

280:                                              ; preds = %2
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #10
  %281 = getelementptr inbounds %class.TypeRef, ptr %68, i32 0, i32 1
  %282 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK8TypeData10as_PointerEv(ptr noundef nonnull align 8 dereferenceable(112) %281)
  store ptr %282, ptr %40, align 8, !tbaa !5
  %283 = getelementptr inbounds %class.TypeRef, ptr %68, i32 0, i32 0
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %41, ptr noundef nonnull align 8 dereferenceable(8) %283)
  %284 = getelementptr inbounds %"struct.TypeData::Data_Pointer", ptr %43, i32 0, i32 0
  %285 = load ptr, ptr %40, align 8, !tbaa !5
  %286 = getelementptr inbounds %"struct.TypeData::Data_Pointer", ptr %285, i32 0, i32 0
  %287 = load i8, ptr %286, align 8, !tbaa !34, !range !32, !noundef !33
  %288 = trunc i8 %287 to i1
  %289 = zext i1 %288 to i8
  store i8 %289, ptr %284, align 8, !tbaa !34
  %290 = getelementptr inbounds %"struct.TypeData::Data_Pointer", ptr %43, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 120, ptr %44) #10
  %291 = load ptr, ptr %40, align 8, !tbaa !5
  %292 = getelementptr inbounds %"struct.TypeData::Data_Pointer", ptr %291, i32 0, i32 1
  %293 = call noundef ptr @_ZNKSt10unique_ptrI7TypeRefSt14default_deleteIS0_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %292) #10
  invoke void @_ZNK7TypeRef5cloneEv(ptr dead_on_unwind writable sret(%class.TypeRef) align 8 %44, ptr noundef nonnull align 8 dereferenceable(120) %293)
          to label %294 unwind label %298

294:                                              ; preds = %280
  invoke void @_Z15make_unique_ptrI7TypeRefESt10unique_ptrIT_St14default_deleteIS2_EEOS2_(ptr dead_on_unwind writable sret(%"class.std::unique_ptr") align 8 %290, ptr noundef nonnull align 8 dereferenceable(120) %44)
          to label %295 unwind label %302

295:                                              ; preds = %294
  invoke void @_ZN8TypeData12make_PointerENS_12Data_PointerE(ptr dead_on_unwind writable sret(%class.TypeData) align 8 %42, ptr noundef %43)
          to label %296 unwind label %306

296:                                              ; preds = %295
  invoke void @_ZN7TypeRefC2E4Span8TypeData(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef %41, ptr noundef %42)
          to label %297 unwind label %310

297:                                              ; preds = %296
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %42) #10
  call void @_ZN8TypeData12Data_PointerD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %43) #10
  call void @_ZN7TypeRefD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %44) #10
  call void @llvm.lifetime.end.p0(i64 120, ptr %44) #10
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %41) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #10
  br label %473

298:                                              ; preds = %280
  %299 = landingpad { ptr, i32 }
          cleanup
  %300 = extractvalue { ptr, i32 } %299, 0
  store ptr %300, ptr %8, align 8
  %301 = extractvalue { ptr, i32 } %299, 1
  store i32 %301, ptr %9, align 4
  br label %316

302:                                              ; preds = %294
  %303 = landingpad { ptr, i32 }
          cleanup
  %304 = extractvalue { ptr, i32 } %303, 0
  store ptr %304, ptr %8, align 8
  %305 = extractvalue { ptr, i32 } %303, 1
  store i32 %305, ptr %9, align 4
  br label %315

306:                                              ; preds = %295
  %307 = landingpad { ptr, i32 }
          cleanup
  %308 = extractvalue { ptr, i32 } %307, 0
  store ptr %308, ptr %8, align 8
  %309 = extractvalue { ptr, i32 } %307, 1
  store i32 %309, ptr %9, align 4
  br label %314

310:                                              ; preds = %296
  %311 = landingpad { ptr, i32 }
          cleanup
  %312 = extractvalue { ptr, i32 } %311, 0
  store ptr %312, ptr %8, align 8
  %313 = extractvalue { ptr, i32 } %311, 1
  store i32 %313, ptr %9, align 4
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %42) #10
  br label %314

314:                                              ; preds = %310, %306
  call void @_ZN8TypeData12Data_PointerD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %43) #10
  br label %315

315:                                              ; preds = %314, %302
  call void @_ZN7TypeRefD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %44) #10
  br label %316

316:                                              ; preds = %315, %298
  call void @llvm.lifetime.end.p0(i64 120, ptr %44) #10
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %41) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #10
  br label %474

317:                                              ; preds = %2
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #10
  %318 = getelementptr inbounds %class.TypeRef, ptr %68, i32 0, i32 1
  %319 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK8TypeData8as_ArrayEv(ptr noundef nonnull align 8 dereferenceable(112) %318)
  store ptr %319, ptr %45, align 8, !tbaa !5
  %320 = getelementptr inbounds %class.TypeRef, ptr %68, i32 0, i32 0
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %46, ptr noundef nonnull align 8 dereferenceable(8) %320)
  %321 = getelementptr inbounds %"struct.TypeData::Data_Array", ptr %48, i32 0, i32 0
  call void @llvm.lifetime.start.p0(i64 120, ptr %49) #10
  %322 = load ptr, ptr %45, align 8, !tbaa !5
  %323 = getelementptr inbounds %"struct.TypeData::Data_Array", ptr %322, i32 0, i32 0
  %324 = call noundef ptr @_ZNKSt10unique_ptrI7TypeRefSt14default_deleteIS0_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %323) #10
  invoke void @_ZNK7TypeRef5cloneEv(ptr dead_on_unwind writable sret(%class.TypeRef) align 8 %49, ptr noundef nonnull align 8 dereferenceable(120) %324)
          to label %325 unwind label %332

325:                                              ; preds = %317
  invoke void @_Z15make_unique_ptrI7TypeRefESt10unique_ptrIT_St14default_deleteIS2_EEOS2_(ptr dead_on_unwind writable sret(%"class.std::unique_ptr") align 8 %321, ptr noundef nonnull align 8 dereferenceable(120) %49)
          to label %326 unwind label %336

326:                                              ; preds = %325
  %327 = getelementptr inbounds %"struct.TypeData::Data_Array", ptr %48, i32 0, i32 1
  %328 = load ptr, ptr %45, align 8, !tbaa !5
  %329 = getelementptr inbounds %"struct.TypeData::Data_Array", ptr %328, i32 0, i32 1
  call void @_ZNSt10shared_ptrIN3AST8ExprNodeEEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(16) %327, ptr noundef nonnull align 8 dereferenceable(16) %329) #10
  invoke void @_ZN8TypeData10make_ArrayENS_10Data_ArrayE(ptr dead_on_unwind writable sret(%class.TypeData) align 8 %47, ptr noundef %48)
          to label %330 unwind label %340

330:                                              ; preds = %326
  invoke void @_ZN7TypeRefC2E4Span8TypeData(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef %46, ptr noundef %47)
          to label %331 unwind label %344

331:                                              ; preds = %330
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %47) #10
  call void @_ZN8TypeData10Data_ArrayD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %48) #10
  call void @_ZN7TypeRefD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %49) #10
  call void @llvm.lifetime.end.p0(i64 120, ptr %49) #10
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %46) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #10
  br label %473

332:                                              ; preds = %317
  %333 = landingpad { ptr, i32 }
          cleanup
  %334 = extractvalue { ptr, i32 } %333, 0
  store ptr %334, ptr %8, align 8
  %335 = extractvalue { ptr, i32 } %333, 1
  store i32 %335, ptr %9, align 4
  br label %350

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

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

344:                                              ; preds = %330
  %345 = landingpad { ptr, i32 }
          cleanup
  %346 = extractvalue { ptr, i32 } %345, 0
  store ptr %346, ptr %8, align 8
  %347 = extractvalue { ptr, i32 } %345, 1
  store i32 %347, ptr %9, align 4
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %47) #10
  br label %348

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

349:                                              ; preds = %348, %336
  call void @_ZN7TypeRefD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %49) #10
  br label %350

350:                                              ; preds = %349, %332
  call void @llvm.lifetime.end.p0(i64 120, ptr %49) #10
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %46) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #10
  br label %474

351:                                              ; preds = %2
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #10
  %352 = getelementptr inbounds %class.TypeRef, ptr %68, i32 0, i32 1
  %353 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK8TypeData8as_SliceEv(ptr noundef nonnull align 8 dereferenceable(112) %352)
  store ptr %353, ptr %50, align 8, !tbaa !5
  %354 = getelementptr inbounds %class.TypeRef, ptr %68, i32 0, i32 0
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %51, ptr noundef nonnull align 8 dereferenceable(8) %354)
  %355 = getelementptr inbounds %"struct.TypeData::Data_Slice", ptr %53, i32 0, i32 0
  call void @llvm.lifetime.start.p0(i64 120, ptr %54) #10
  %356 = load ptr, ptr %50, align 8, !tbaa !5
  %357 = getelementptr inbounds %"struct.TypeData::Data_Slice", ptr %356, i32 0, i32 0
  %358 = call noundef ptr @_ZNKSt10unique_ptrI7TypeRefSt14default_deleteIS0_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %357) #10
  invoke void @_ZNK7TypeRef5cloneEv(ptr dead_on_unwind writable sret(%class.TypeRef) align 8 %54, ptr noundef nonnull align 8 dereferenceable(120) %358)
          to label %359 unwind label %363

359:                                              ; preds = %351
  invoke void @_Z15make_unique_ptrI7TypeRefESt10unique_ptrIT_St14default_deleteIS2_EEOS2_(ptr dead_on_unwind writable sret(%"class.std::unique_ptr") align 8 %355, ptr noundef nonnull align 8 dereferenceable(120) %54)
          to label %360 unwind label %367

360:                                              ; preds = %359
  invoke void @_ZN8TypeData10make_SliceENS_10Data_SliceE(ptr dead_on_unwind writable sret(%class.TypeData) align 8 %52, ptr noundef %53)
          to label %361 unwind label %371

361:                                              ; preds = %360
  invoke void @_ZN7TypeRefC2E4Span8TypeData(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef %51, ptr noundef %52)
          to label %362 unwind label %375

362:                                              ; preds = %361
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %52) #10
  call void @_ZN8TypeData10Data_SliceD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %53) #10
  call void @_ZN7TypeRefD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %54) #10
  call void @llvm.lifetime.end.p0(i64 120, ptr %54) #10
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %51) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #10
  br label %473

363:                                              ; preds = %351
  %364 = landingpad { ptr, i32 }
          cleanup
  %365 = extractvalue { ptr, i32 } %364, 0
  store ptr %365, ptr %8, align 8
  %366 = extractvalue { ptr, i32 } %364, 1
  store i32 %366, ptr %9, align 4
  br label %381

367:                                              ; preds = %359
  %368 = landingpad { ptr, i32 }
          cleanup
  %369 = extractvalue { ptr, i32 } %368, 0
  store ptr %369, ptr %8, align 8
  %370 = extractvalue { ptr, i32 } %368, 1
  store i32 %370, ptr %9, align 4
  br label %380

371:                                              ; preds = %360
  %372 = landingpad { ptr, i32 }
          cleanup
  %373 = extractvalue { ptr, i32 } %372, 0
  store ptr %373, ptr %8, align 8
  %374 = extractvalue { ptr, i32 } %372, 1
  store i32 %374, ptr %9, align 4
  br label %379

375:                                              ; preds = %361
  %376 = landingpad { ptr, i32 }
          cleanup
  %377 = extractvalue { ptr, i32 } %376, 0
  store ptr %377, ptr %8, align 8
  %378 = extractvalue { ptr, i32 } %376, 1
  store i32 %378, ptr %9, align 4
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %52) #10
  br label %379

379:                                              ; preds = %375, %371
  call void @_ZN8TypeData10Data_SliceD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %53) #10
  br label %380

380:                                              ; preds = %379, %367
  call void @_ZN7TypeRefD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %54) #10
  br label %381

381:                                              ; preds = %380, %363
  call void @llvm.lifetime.end.p0(i64 120, ptr %54) #10
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %51) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #10
  br label %474

382:                                              ; preds = %2
  %383 = getelementptr inbounds %class.TypeRef, ptr %68, i32 0, i32 0
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %55, ptr noundef nonnull align 8 dereferenceable(8) %383)
  %384 = getelementptr inbounds %class.TypeRef, ptr %68, i32 0, i32 1
  %385 = invoke noundef nonnull align 8 dereferenceable(12) ptr @_ZNK8TypeData10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(112) %384)
          to label %386 unwind label %390

386:                                              ; preds = %382
  invoke void @_ZN8TypeData12Data_GenericC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(12) %57, ptr noundef nonnull align 8 dereferenceable(12) %385)
          to label %387 unwind label %390

387:                                              ; preds = %386
  invoke void @_ZN8TypeData12make_GenericENS_12Data_GenericE(ptr dead_on_unwind writable sret(%class.TypeData) align 8 %56, ptr noundef %57)
          to label %388 unwind label %394

388:                                              ; preds = %387
  invoke void @_ZN7TypeRefC2E4Span8TypeData(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef %55, ptr noundef %56)
          to label %389 unwind label %398

389:                                              ; preds = %388
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %56) #10
  call void @_ZN8TypeData12Data_GenericD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %57) #10
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %55) #10
  br label %473

390:                                              ; preds = %386, %382
  %391 = landingpad { ptr, i32 }
          cleanup
  %392 = extractvalue { ptr, i32 } %391, 0
  store ptr %392, ptr %8, align 8
  %393 = extractvalue { ptr, i32 } %391, 1
  store i32 %393, ptr %9, align 4
  br label %403

394:                                              ; preds = %387
  %395 = landingpad { ptr, i32 }
          cleanup
  %396 = extractvalue { ptr, i32 } %395, 0
  store ptr %396, ptr %8, align 8
  %397 = extractvalue { ptr, i32 } %395, 1
  store i32 %397, ptr %9, align 4
  br label %402

398:                                              ; preds = %388
  %399 = landingpad { ptr, i32 }
          cleanup
  %400 = extractvalue { ptr, i32 } %399, 0
  store ptr %400, ptr %8, align 8
  %401 = extractvalue { ptr, i32 } %399, 1
  store i32 %401, ptr %9, align 4
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %56) #10
  br label %402

402:                                              ; preds = %398, %394
  call void @_ZN8TypeData12Data_GenericD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %57) #10
  br label %403

403:                                              ; preds = %402, %390
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %55) #10
  br label %474

404:                                              ; preds = %2
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #10
  %405 = getelementptr inbounds %class.TypeRef, ptr %68, i32 0, i32 1
  %406 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(112) %405)
  store ptr %406, ptr %58, align 8, !tbaa !5
  %407 = getelementptr inbounds %class.TypeRef, ptr %68, i32 0, i32 0
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %59, ptr noundef nonnull align 8 dereferenceable(8) %407)
  %408 = load ptr, ptr %58, align 8, !tbaa !5
  %409 = call noundef nonnull align 8 dereferenceable(240) ptr @_ZNKSt10unique_ptrIN3AST4PathESt14default_deleteIS1_EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %408) #10
  invoke void @_ZSt11make_uniqueIN3AST4PathEJRS1_EENSt8__detail9_MakeUniqIT_E15__single_objectEDpOT0_(ptr dead_on_unwind writable sret(%"class.std::unique_ptr.26") align 8 %61, ptr noundef nonnull align 8 dereferenceable(240) %409)
          to label %410 unwind label %413

410:                                              ; preds = %404
  invoke void @_ZN8TypeData9make_PathESt10unique_ptrIN3AST4PathESt14default_deleteIS2_EE(ptr dead_on_unwind writable sret(%class.TypeData) align 8 %60, ptr noundef %61)
          to label %411 unwind label %417

411:                                              ; preds = %410
  invoke void @_ZN7TypeRefC2E4Span8TypeData(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef %59, ptr noundef %60)
          to label %412 unwind label %421

412:                                              ; preds = %411
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %60) #10
  call void @_ZNSt10unique_ptrIN3AST4PathESt14default_deleteIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %61) #10
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %59) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #10
  br label %473

413:                                              ; preds = %404
  %414 = landingpad { ptr, i32 }
          cleanup
  %415 = extractvalue { ptr, i32 } %414, 0
  store ptr %415, ptr %8, align 8
  %416 = extractvalue { ptr, i32 } %414, 1
  store i32 %416, ptr %9, align 4
  br label %426

417:                                              ; preds = %410
  %418 = landingpad { ptr, i32 }
          cleanup
  %419 = extractvalue { ptr, i32 } %418, 0
  store ptr %419, ptr %8, align 8
  %420 = extractvalue { ptr, i32 } %418, 1
  store i32 %420, ptr %9, align 4
  br label %425

421:                                              ; preds = %411
  %422 = landingpad { ptr, i32 }
          cleanup
  %423 = extractvalue { ptr, i32 } %422, 0
  store ptr %423, ptr %8, align 8
  %424 = extractvalue { ptr, i32 } %422, 1
  store i32 %424, ptr %9, align 4
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %60) #10
  br label %425

425:                                              ; preds = %421, %417
  call void @_ZNSt10unique_ptrIN3AST4PathESt14default_deleteIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %61) #10
  br label %426

426:                                              ; preds = %425, %413
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %59) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #10
  br label %474

427:                                              ; preds = %2
  %428 = getelementptr inbounds %class.TypeRef, ptr %68, i32 0, i32 0
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %62, ptr noundef nonnull align 8 dereferenceable(8) %428)
  %429 = getelementptr inbounds %class.TypeRef, ptr %68, i32 0, i32 1
  %430 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZNK8TypeData14as_TraitObjectEv(ptr noundef nonnull align 8 dereferenceable(112) %429)
          to label %431 unwind label %435

431:                                              ; preds = %427
  invoke void @_ZN8TypeData16Data_TraitObjectC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(48) %64, ptr noundef nonnull align 8 dereferenceable(48) %430)
          to label %432 unwind label %435

432:                                              ; preds = %431
  invoke void @_ZN8TypeData16make_TraitObjectENS_16Data_TraitObjectE(ptr dead_on_unwind writable sret(%class.TypeData) align 8 %63, ptr noundef %64)
          to label %433 unwind label %439

433:                                              ; preds = %432
  invoke void @_ZN7TypeRefC2E4Span8TypeData(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef %62, ptr noundef %63)
          to label %434 unwind label %443

434:                                              ; preds = %433
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %63) #10
  call void @_ZN8TypeData16Data_TraitObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %64) #10
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %62) #10
  br label %473

435:                                              ; preds = %431, %427
  %436 = landingpad { ptr, i32 }
          cleanup
  %437 = extractvalue { ptr, i32 } %436, 0
  store ptr %437, ptr %8, align 8
  %438 = extractvalue { ptr, i32 } %436, 1
  store i32 %438, ptr %9, align 4
  br label %448

439:                                              ; preds = %432
  %440 = landingpad { ptr, i32 }
          cleanup
  %441 = extractvalue { ptr, i32 } %440, 0
  store ptr %441, ptr %8, align 8
  %442 = extractvalue { ptr, i32 } %440, 1
  store i32 %442, ptr %9, align 4
  br label %447

443:                                              ; preds = %433
  %444 = landingpad { ptr, i32 }
          cleanup
  %445 = extractvalue { ptr, i32 } %444, 0
  store ptr %445, ptr %8, align 8
  %446 = extractvalue { ptr, i32 } %444, 1
  store i32 %446, ptr %9, align 4
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %63) #10
  br label %447

447:                                              ; preds = %443, %439
  call void @_ZN8TypeData16Data_TraitObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %64) #10
  br label %448

448:                                              ; preds = %447, %435
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %62) #10
  br label %474

449:                                              ; preds = %2
  %450 = getelementptr inbounds %class.TypeRef, ptr %68, i32 0, i32 0
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %65, ptr noundef nonnull align 8 dereferenceable(8) %450)
  %451 = getelementptr inbounds %class.TypeRef, ptr %68, i32 0, i32 1
  %452 = invoke noundef nonnull align 8 dereferenceable(72) ptr @_ZNK8TypeData13as_ErasedTypeEv(ptr noundef nonnull align 8 dereferenceable(112) %451)
          to label %453 unwind label %457

453:                                              ; preds = %449
  invoke void @_ZN8TypeData15Data_ErasedTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(72) %67, ptr noundef nonnull align 8 dereferenceable(72) %452)
          to label %454 unwind label %457

454:                                              ; preds = %453
  invoke void @_ZN8TypeData15make_ErasedTypeENS_15Data_ErasedTypeE(ptr dead_on_unwind writable sret(%class.TypeData) align 8 %66, ptr noundef %67)
          to label %455 unwind label %461

455:                                              ; preds = %454
  invoke void @_ZN7TypeRefC2E4Span8TypeData(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef %65, ptr noundef %66)
          to label %456 unwind label %465

456:                                              ; preds = %455
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %66) #10
  call void @_ZN8TypeData15Data_ErasedTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(72) %67) #10
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %65) #10
  br label %473

457:                                              ; preds = %453, %449
  %458 = landingpad { ptr, i32 }
          cleanup
  %459 = extractvalue { ptr, i32 } %458, 0
  store ptr %459, ptr %8, align 8
  %460 = extractvalue { ptr, i32 } %458, 1
  store i32 %460, ptr %9, align 4
  br label %470

461:                                              ; preds = %454
  %462 = landingpad { ptr, i32 }
          cleanup
  %463 = extractvalue { ptr, i32 } %462, 0
  store ptr %463, ptr %8, align 8
  %464 = extractvalue { ptr, i32 } %462, 1
  store i32 %464, ptr %9, align 4
  br label %469

465:                                              ; preds = %455
  %466 = landingpad { ptr, i32 }
          cleanup
  %467 = extractvalue { ptr, i32 } %466, 0
  store ptr %467, ptr %8, align 8
  %468 = extractvalue { ptr, i32 } %466, 1
  store i32 %468, ptr %9, align 4
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %66) #10
  br label %469

469:                                              ; preds = %465, %461
  call void @_ZN8TypeData15Data_ErasedTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(72) %67) #10
  br label %470

470:                                              ; preds = %469, %457
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %65) #10
  br label %474

471:                                              ; preds = %2
  %472 = call ptr @__cxa_allocate_exception(i64 8) #10
  store ptr @.str.23, ptr %472, align 16, !tbaa !5
  call void @__cxa_throw(ptr %472, ptr @_ZTIPKc, ptr null) #11
  unreachable

473:                                              ; preds = %456, %434, %412, %389, %362, %331, %297, %252, %216, %192, %175, %157, %131, %110, %94, %78
  ret void

474:                                              ; preds = %470, %448, %426, %403, %381, %350, %316, %279, %230, %206, %184, %166, %150, %119, %103, %87
  %475 = load ptr, ptr %8, align 8
  %476 = load i32, ptr %9, align 4
  %477 = insertvalue { ptr, i32 } poison, ptr %475, 0
  %478 = insertvalue { ptr, i32 } %477, i32 %476, 1
  resume { ptr, i32 } %478
}

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8TypeData10make_MacroENS_10Data_MacroE(ptr dead_on_unwind noalias writable sret(%class.TypeData) align 8, ptr noundef) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z15make_unique_ptrIN3AST15MacroInvocationEESt10unique_ptrIT_St14default_deleteIS3_EEOS3_(ptr dead_on_unwind noalias writable sret(%"class.std::unique_ptr.10") align 8, ptr noundef nonnull align 8 dereferenceable(393)) #1

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8TypeData9make_PathESt10unique_ptrIN3AST4PathESt14default_deleteIS2_EE(ptr dead_on_unwind noalias writable sret(%class.TypeData) align 8, ptr noundef) #1 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8TypeData9make_NoneENS_9Data_NoneE(ptr dead_on_unwind noalias writable sret(%class.TypeData) align 8) #1 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8TypeData8make_AnyENS_8Data_AnyE(ptr dead_on_unwind noalias writable sret(%class.TypeData) align 8) #1 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8TypeData9make_BangENS_9Data_BangE(ptr dead_on_unwind noalias writable sret(%class.TypeData) align 8) #1 align 2

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

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

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

declare void @_ZNK3AST15MacroInvocation5cloneEv(ptr dead_on_unwind writable sret(%"class.AST::MacroInvocation") align 8, ptr noundef nonnull align 8 dereferenceable(393)) #4

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8TypeData9make_UnitENS_9Data_UnitE(ptr dead_on_unwind noalias writable sret(%class.TypeData) align 8) #1 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8TypeData14make_PrimitiveENS_14Data_PrimitiveE(ptr dead_on_unwind noalias writable sret(%class.TypeData) align 8, i32) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNK8TypeData12as_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(112)) #2 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 uwtable
declare dso_local void @_ZN8TypeData13make_FunctionENS_13Data_FunctionE(ptr dead_on_unwind noalias writable sret(%class.TypeData) align 8, ptr noundef) #1 align 2

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8TypeData10make_TupleENS_10Data_TupleE(ptr dead_on_unwind noalias writable sret(%class.TypeData) align 8, ptr noundef) #1 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZZNK7TypeRef5cloneEvEN1H12clone_ty_vecERKSt6vectorIS_SaIS_EE(ptr dead_on_unwind noalias writable sret(%"class.std::vector.5") align 8, ptr noundef nonnull align 8 dereferenceable(24)) #1 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8TypeData11make_BorrowENS_11Data_BorrowE(ptr dead_on_unwind noalias writable sret(%class.TypeData) align 8, ptr noundef) #1 align 2

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8TypeData12make_PointerENS_12Data_PointerE(ptr dead_on_unwind noalias writable sret(%class.TypeData) align 8, ptr noundef) #1 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8TypeData10make_ArrayENS_10Data_ArrayE(ptr dead_on_unwind noalias writable sret(%class.TypeData) align 8, ptr noundef) #1 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8TypeData10make_SliceENS_10Data_SliceE(ptr dead_on_unwind noalias writable sret(%class.TypeData) align 8, ptr noundef) #1 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8TypeData12make_GenericENS_12Data_GenericE(ptr dead_on_unwind noalias writable sret(%class.TypeData) align 8, ptr noundef) #1 align 2

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZSt11make_uniqueIN3AST4PathEJRS1_EENSt8__detail9_MakeUniqIT_E15__single_objectEDpOT0_(ptr dead_on_unwind noalias writable sret(%"class.std::unique_ptr.26") align 8, ptr noundef nonnull align 8 dereferenceable(240)) #8

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8TypeData16make_TraitObjectENS_16Data_TraitObjectE(ptr dead_on_unwind noalias writable sret(%class.TypeData) align 8, ptr noundef) #1 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8TypeData15make_ErasedTypeENS_15Data_ErasedTypeE(ptr dead_on_unwind noalias writable sret(%class.TypeData) align 8, ptr noundef) #1 align 2

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

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

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

declare ptr @__cxa_allocate_exception(i64)

declare void @__cxa_throw(ptr, ptr, ptr)

declare void @_ZN7TypeRefD1Ev(ptr)

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 = { 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 #3 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #8 = { 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 #9 = { noreturn nounwind }
attributes #10 = { nounwind }
attributes #11 = { 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 = !{i64 0, i64 4, !10}
!10 = !{!11, !11, i64 0}
!11 = !{!"_ZTS9eCoreType", !7, i64 0}
!12 = !{!13, !25, i64 24}
!13 = !{!"_ZTSN8TypeData11Data_BorrowE", !14, i64 0, !25, i64 24, !26, i64 32}
!14 = !{!"_ZTSN3AST11LifetimeRefE", !15, i64 0, !24, i64 16}
!15 = !{!"_ZTS5Ident", !16, i64 0, !23, i64 8}
!16 = !{!"_ZTSN5Ident7HygieneE", !17, i64 0}
!17 = !{!"_ZTSSt10unique_ptrIN5Ident7Hygiene5InnerESt14default_deleteIS2_EE", !18, i64 0}
!18 = !{!"_ZTSSt15__uniq_ptr_dataIN5Ident7Hygiene5InnerESt14default_deleteIS2_ELb1ELb1EE", !19, i64 0}
!19 = !{!"_ZTSSt15__uniq_ptr_implIN5Ident7Hygiene5InnerESt14default_deleteIS2_EE", !20, i64 0}
!20 = !{!"_ZTSSt5tupleIJPN5Ident7Hygiene5InnerESt14default_deleteIS2_EEE", !21, i64 0}
!21 = !{!"_ZTSSt11_Tuple_implILm0EJPN5Ident7Hygiene5InnerESt14default_deleteIS2_EEE", !22, i64 0}
!22 = !{!"_ZTSSt10_Head_baseILm0EPN5Ident7Hygiene5InnerELb0EE", !6, i64 0}
!23 = !{!"_ZTS8RcString", !6, i64 0}
!24 = !{!"short", !7, i64 0}
!25 = !{!"bool", !7, i64 0}
!26 = !{!"_ZTSSt10unique_ptrI7TypeRefSt14default_deleteIS0_EE", !27, i64 0}
!27 = !{!"_ZTSSt15__uniq_ptr_dataI7TypeRefSt14default_deleteIS0_ELb1ELb1EE", !28, i64 0}
!28 = !{!"_ZTSSt15__uniq_ptr_implI7TypeRefSt14default_deleteIS0_EE", !29, i64 0}
!29 = !{!"_ZTSSt5tupleIJP7TypeRefSt14default_deleteIS0_EEE", !30, i64 0}
!30 = !{!"_ZTSSt11_Tuple_implILm0EJP7TypeRefSt14default_deleteIS0_EEE", !31, i64 0}
!31 = !{!"_ZTSSt10_Head_baseILm0EP7TypeRefLb0EE", !6, i64 0}
!32 = !{i8 0, i8 2}
!33 = !{}
!34 = !{!35, !25, i64 0}
!35 = !{!"_ZTSN8TypeData12Data_PointerE", !25, i64 0, !26, i64 8}


; 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.std::unique_ptr" = type { %"struct.std::__uniq_ptr_data" }
%"struct.std::__uniq_ptr_data" = type { %"class.std::__uniq_ptr_impl" }
%"class.std::__uniq_ptr_impl" = type { %"class.std::tuple" }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Head_base.4" }
%"struct.std::_Head_base.4" = type { ptr }
%class.TypeRef = type { %struct.Span, %class.TypeData }
%struct.Span = type { ptr }
%class.TypeData = type { i32, %"union.TypeData::DataUnion" }
%"union.TypeData::DataUnion" = type { %"struct.TypeData::Data_ErasedType", [32 x i8] }
%"struct.TypeData::Data_ErasedType" = type { %"class.std::vector.34", %"class.std::vector.34", %"class.std::vector.39" }
%"class.std::vector.34" = type { %"struct.std::_Vector_base.35" }
%"struct.std::_Vector_base.35" = type { %"struct.std::_Vector_base<Type_TraitPath, std::allocator<Type_TraitPath>>::_Vector_impl" }
%"struct.std::_Vector_base<Type_TraitPath, std::allocator<Type_TraitPath>>::_Vector_impl" = type { %"struct.std::_Vector_base<Type_TraitPath, std::allocator<Type_TraitPath>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Type_TraitPath, std::allocator<Type_TraitPath>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.39" = type { %"struct.std::_Vector_base.40" }
%"struct.std::_Vector_base.40" = type { %"struct.std::_Vector_base<AST::LifetimeRef, std::allocator<AST::LifetimeRef>>::_Vector_impl" }
%"struct.std::_Vector_base<AST::LifetimeRef, std::allocator<AST::LifetimeRef>>::_Vector_impl" = type { %"struct.std::_Vector_base<AST::LifetimeRef, std::allocator<AST::LifetimeRef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<AST::LifetimeRef, std::allocator<AST::LifetimeRef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.TypeData::Data_Macro" = type { %"class.std::unique_ptr.10" }
%"class.std::unique_ptr.10" = type { %"struct.std::__uniq_ptr_data.11" }
%"struct.std::__uniq_ptr_data.11" = type { %"class.std::__uniq_ptr_impl.12" }
%"class.std::__uniq_ptr_impl.12" = type { %"class.std::tuple.13" }
%"class.std::tuple.13" = type { %"struct.std::_Tuple_impl.14" }
%"struct.std::_Tuple_impl.14" = type { %"struct.std::_Head_base.17" }
%"struct.std::_Head_base.17" = type { ptr }
%"class.AST::MacroInvocation" = type <{ %struct.Span, %"class.AST::Path", %class.RcString, %class.TokenTree, i8, [7 x i8] }>
%"class.AST::Path" = type { ptr, %"class.AST::Path::Class", %"struct.AST::Path::Bindings" }
%"class.AST::Path::Class" = type { i32, %"union.AST::Path::Class::DataUnion" }
%"union.AST::Path::Class::DataUnion" = type { %"struct.AST::Path::Class::Data_UFCS" }
%"struct.AST::Path::Class::Data_UFCS" = type { %"class.std::unique_ptr", %"class.std::unique_ptr.26", %"class.std::vector.44" }
%"class.std::unique_ptr.26" = type { %"struct.std::__uniq_ptr_data.27" }
%"struct.std::__uniq_ptr_data.27" = type { %"class.std::__uniq_ptr_impl.28" }
%"class.std::__uniq_ptr_impl.28" = type { %"class.std::tuple.29" }
%"class.std::tuple.29" = type { %"struct.std::_Tuple_impl.30" }
%"struct.std::_Tuple_impl.30" = type { %"struct.std::_Head_base.33" }
%"struct.std::_Head_base.33" = type { ptr }
%"class.std::vector.44" = type { %"struct.std::_Vector_base.45" }
%"struct.std::_Vector_base.45" = type { %"struct.std::_Vector_base<AST::PathNode, std::allocator<AST::PathNode>>::_Vector_impl" }
%"struct.std::_Vector_base<AST::PathNode, std::allocator<AST::PathNode>>::_Vector_impl" = type { %"struct.std::_Vector_base<AST::PathNode, std::allocator<AST::PathNode>>::_Vector_impl_data" }
%"struct.std::_Vector_base<AST::PathNode, std::allocator<AST::PathNode>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.AST::Path::Bindings" = type { %"struct.AST::PathBinding", %"struct.AST::PathBinding.54", %"struct.AST::PathBinding.55" }
%"struct.AST::PathBinding" = type { %"struct.AST::AbsolutePath", %"class.AST::PathBinding_Value" }
%"struct.AST::AbsolutePath" = type { %class.RcString, %"class.std::vector.49" }
%"class.std::vector.49" = type { %"struct.std::_Vector_base.50" }
%"struct.std::_Vector_base.50" = type { %"struct.std::_Vector_base<RcString, std::allocator<RcString>>::_Vector_impl" }
%"struct.std::_Vector_base<RcString, std::allocator<RcString>>::_Vector_impl" = type { %"struct.std::_Vector_base<RcString, std::allocator<RcString>>::_Vector_impl_data" }
%"struct.std::_Vector_base<RcString, std::allocator<RcString>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.AST::PathBinding_Value" = type { i32, %"union.AST::PathBinding_Value::DataUnion" }
%"union.AST::PathBinding_Value::DataUnion" = type { %"struct.AST::PathBinding_Value::Data_EnumVar" }
%"struct.AST::PathBinding_Value::Data_EnumVar" = type { ptr, i32, ptr }
%"struct.AST::PathBinding.54" = type { %"struct.AST::AbsolutePath", %"class.AST::PathBinding_Type" }
%"class.AST::PathBinding_Type" = type { i32, %"union.AST::PathBinding_Type::DataUnion" }
%"union.AST::PathBinding_Type::DataUnion" = type { %"struct.AST::PathBinding_Type::Data_Module" }
%"struct.AST::PathBinding_Type::Data_Module" = type { ptr, %"struct.AST::PathBinding_Type::(anonymous struct)::Hir" }
%"struct.AST::PathBinding_Type::(anonymous struct)::Hir" = type { ptr, ptr }
%"struct.AST::PathBinding.55" = type { %"struct.AST::AbsolutePath", %"class.AST::PathBinding_Macro" }
%"class.AST::PathBinding_Macro" = type { i32, %"union.AST::PathBinding_Macro::DataUnion" }
%"union.AST::PathBinding_Macro::DataUnion" = type { %"struct.AST::PathBinding_Macro::Data_ProcMacroDerive" }
%"struct.AST::PathBinding_Macro::Data_ProcMacroDerive" = type { ptr, %class.RcString }
%class.RcString = type { ptr }
%class.TokenTree = type { ptr, i32, %"class.Ident::Hygiene", %class.Token, %"class.std::vector.56" }
%"class.Ident::Hygiene" = type { %"class.std::unique_ptr.18" }
%"class.std::unique_ptr.18" = type { %"struct.std::__uniq_ptr_data.19" }
%"struct.std::__uniq_ptr_data.19" = type { %"class.std::__uniq_ptr_impl.20" }
%"class.std::__uniq_ptr_impl.20" = type { %"class.std::tuple.21" }
%"class.std::tuple.21" = type { %"struct.std::_Tuple_impl.22" }
%"struct.std::_Tuple_impl.22" = type { %"struct.std::_Head_base.25" }
%"struct.std::_Head_base.25" = type { ptr }
%class.Token = type { ptr, i32, %"class.Token::Data", %class.Position, %"class.Ident::Hygiene" }
%"class.Token::Data" = type { i32, %"union.Token::Data::DataUnion" }
%"union.Token::Data::DataUnion" = type { %"class.std::__cxx11::basic_string" }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%class.Position = type { %struct.Span, %class.RcString, i32, i32 }
%"class.std::vector.56" = type { %"struct.std::_Vector_base.57" }
%"struct.std::_Vector_base.57" = type { %"struct.std::_Vector_base<TokenTree, std::allocator<TokenTree>>::_Vector_impl" }
%"struct.std::_Vector_base<TokenTree, std::allocator<TokenTree>>::_Vector_impl" = type { %"struct.std::_Vector_base<TokenTree, std::allocator<TokenTree>>::_Vector_impl_data" }
%"struct.std::_Vector_base<TokenTree, std::allocator<TokenTree>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.TypeData::Data_Function" = type { %struct.Type_Function }
%struct.Type_Function = type <{ %"class.AST::HigherRankedBounds", i8, [7 x i8], %"class.std::__cxx11::basic_string", %"class.std::unique_ptr", %"class.std::vector.5", i8, [7 x i8] }>
%"class.AST::HigherRankedBounds" = type { %"class.std::vector" }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<AST::LifetimeParam, std::allocator<AST::LifetimeParam>>::_Vector_impl" }
%"struct.std::_Vector_base<AST::LifetimeParam, std::allocator<AST::LifetimeParam>>::_Vector_impl" = type { %"struct.std::_Vector_base<AST::LifetimeParam, std::allocator<AST::LifetimeParam>>::_Vector_impl_data" }
%"struct.std::_Vector_base<AST::LifetimeParam, std::allocator<AST::LifetimeParam>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.5" = type { %"struct.std::_Vector_base.6" }
%"struct.std::_Vector_base.6" = type { %"struct.std::_Vector_base<TypeRef, std::allocator<TypeRef>>::_Vector_impl" }
%"struct.std::_Vector_base<TypeRef, std::allocator<TypeRef>>::_Vector_impl" = type { %"struct.std::_Vector_base<TypeRef, std::allocator<TypeRef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<TypeRef, std::allocator<TypeRef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.TypeData::Data_Tuple" = type { %"class.std::vector.5" }
%"struct.TypeData::Data_Borrow" = type { %"class.AST::LifetimeRef", i8, %"class.std::unique_ptr" }
%"class.AST::LifetimeRef" = type <{ %struct.Ident, i16, [6 x i8] }>
%struct.Ident = type { %"class.Ident::Hygiene", %class.RcString }
%"struct.TypeData::Data_Pointer" = type { i8, %"class.std::unique_ptr" }
%"struct.TypeData::Data_Array" = type { %"class.std::unique_ptr", %"class.std::shared_ptr" }
%"class.std::shared_ptr" = type { %"class.std::__shared_ptr" }
%"class.std::__shared_ptr" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }
%"struct.TypeData::Data_Slice" = type { %"class.std::unique_ptr" }
%"struct.TypeData::Data_Generic" = type <{ %class.RcString, i32, [4 x i8] }>
%"struct.TypeData::Data_TraitObject" = type { %"class.std::vector.34", %"class.std::vector.39" }

@.str.21 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [72 x i8], align 1
@__PRETTY_FUNCTION__._ZNK7TypeRef5cloneEv = external hidden unnamed_addr constant [31 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [1 x i8], align 1
@_ZTIPKc = external constant ptr

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

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

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z15make_unique_ptrI7TypeRefESt10unique_ptrIT_St14default_deleteIS2_EEOS2_(ptr dead_on_unwind noalias writable sret(%"class.std::unique_ptr") align 8, ptr noundef nonnull align 8 dereferenceable(120)) local_unnamed_addr #1

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZNK7TypeRef5cloneEv(ptr dead_on_unwind noalias writable sret(%class.TypeRef) align 8 %0, ptr noundef nonnull align 8 dereferenceable(120) %1) local_unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca %struct.Span, align 8
  %4 = alloca %class.TypeData, align 8
  %5 = alloca %struct.Span, align 8
  %6 = alloca %class.TypeData, align 8
  %7 = alloca %struct.Span, align 8
  %8 = alloca %class.TypeData, align 8
  %9 = alloca %struct.Span, align 8
  %10 = alloca %class.TypeData, align 8
  %11 = alloca %"struct.TypeData::Data_Macro", align 8
  %12 = alloca %"class.AST::MacroInvocation", align 8
  %13 = alloca %struct.Span, align 8
  %14 = alloca %class.TypeData, align 8
  %15 = alloca %struct.Span, align 8
  %16 = alloca %class.TypeData, align 8
  %17 = alloca %struct.Span, align 8
  %18 = alloca %class.TypeData, align 8
  %19 = alloca %"struct.TypeData::Data_Function", align 8
  %20 = alloca %struct.Span, align 8
  %21 = alloca %class.TypeData, align 8
  %22 = alloca %"struct.TypeData::Data_Tuple", align 8
  %23 = alloca %struct.Span, align 8
  %24 = alloca %class.TypeData, align 8
  %25 = alloca %"struct.TypeData::Data_Borrow", align 8
  %26 = alloca %class.TypeRef, align 8
  %27 = alloca %struct.Span, align 8
  %28 = alloca %class.TypeData, align 8
  %29 = alloca %"struct.TypeData::Data_Pointer", align 8
  %30 = alloca %class.TypeRef, align 8
  %31 = alloca %struct.Span, align 8
  %32 = alloca %class.TypeData, align 8
  %33 = alloca %"struct.TypeData::Data_Array", align 8
  %34 = alloca %class.TypeRef, align 8
  %35 = alloca %struct.Span, align 8
  %36 = alloca %class.TypeData, align 8
  %37 = alloca %"struct.TypeData::Data_Slice", align 8
  %38 = alloca %class.TypeRef, align 8
  %39 = alloca %struct.Span, align 8
  %40 = alloca %class.TypeData, align 8
  %41 = alloca %"struct.TypeData::Data_Generic", align 8
  %42 = alloca %struct.Span, align 8
  %43 = alloca %class.TypeData, align 8
  %44 = alloca %"class.std::unique_ptr.26", align 8
  %45 = alloca %struct.Span, align 8
  %46 = alloca %class.TypeData, align 8
  %47 = alloca %"struct.TypeData::Data_TraitObject", align 8
  %48 = alloca %struct.Span, align 8
  %49 = alloca %class.TypeData, align 8
  %50 = alloca %"struct.TypeData::Data_ErasedType", align 8
  %51 = getelementptr inbounds i8, ptr %1, i64 8
  %52 = tail call noundef i32 @_ZNK8TypeData3tagEv(ptr noundef nonnull align 8 dereferenceable(112) %51)
  switch i32 %52, label %267 [
    i32 0, label %53
    i32 1, label %54
    i32 2, label %62
    i32 3, label %70
    i32 5, label %78
    i32 4, label %96
    i32 6, label %104
    i32 7, label %112
    i32 8, label %124
    i32 9, label %136
    i32 10, label %159
    i32 11, label %180
    i32 12, label %200
    i32 13, label %218
    i32 14, label %230
    i32 15, label %243
    i32 16, label %255
  ]

53:                                               ; preds = %2
  tail call void @__assert_fail(ptr noundef nonnull @.str.21, ptr noundef nonnull @.str.22, i32 noundef 137, ptr noundef nonnull @__PRETTY_FUNCTION__._ZNK7TypeRef5cloneEv) #8
  unreachable

54:                                               ; preds = %2
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef nonnull align 8 dereferenceable(8) %1)
  %55 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK8TypeData7as_NoneEv(ptr noundef nonnull align 8 dereferenceable(112) %51)
  invoke void @_ZN8TypeData9make_NoneENS_9Data_NoneE(ptr dead_on_unwind nonnull writable sret(%class.TypeData) align 8 %4)
          to label %56 unwind label %58

56:                                               ; preds = %54
  invoke void @_ZN7TypeRefC2E4Span8TypeData(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %3, ptr noundef nonnull %4)
          to label %57 unwind label %60

57:                                               ; preds = %56
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %4) #9
  br label %269

58:                                               ; preds = %54
  %59 = landingpad { ptr, i32 }
          cleanup
  br label %270

60:                                               ; preds = %56
  %61 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %4) #9
  br label %270

62:                                               ; preds = %2
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %5, ptr noundef nonnull align 8 dereferenceable(8) %1)
  %63 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK8TypeData6as_AnyEv(ptr noundef nonnull align 8 dereferenceable(112) %51)
  invoke void @_ZN8TypeData8make_AnyENS_8Data_AnyE(ptr dead_on_unwind nonnull writable sret(%class.TypeData) align 8 %6)
          to label %64 unwind label %66

64:                                               ; preds = %62
  invoke void @_ZN7TypeRefC2E4Span8TypeData(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %5, ptr noundef nonnull %6)
          to label %65 unwind label %68

65:                                               ; preds = %64
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %6) #9
  br label %269

66:                                               ; preds = %62
  %67 = landingpad { ptr, i32 }
          cleanup
  br label %270

68:                                               ; preds = %64
  %69 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %6) #9
  br label %270

70:                                               ; preds = %2
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %7, ptr noundef nonnull align 8 dereferenceable(8) %1)
  %71 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK8TypeData7as_BangEv(ptr noundef nonnull align 8 dereferenceable(112) %51)
  invoke void @_ZN8TypeData9make_BangENS_9Data_BangE(ptr dead_on_unwind nonnull writable sret(%class.TypeData) align 8 %8)
          to label %72 unwind label %74

72:                                               ; preds = %70
  invoke void @_ZN7TypeRefC2E4Span8TypeData(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %7, ptr noundef nonnull %8)
          to label %73 unwind label %76

73:                                               ; preds = %72
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %8) #9
  br label %269

74:                                               ; preds = %70
  %75 = landingpad { ptr, i32 }
          cleanup
  br label %270

76:                                               ; preds = %72
  %77 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %8) #9
  br label %270

78:                                               ; preds = %2
  %79 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK8TypeData8as_MacroEv(ptr noundef nonnull align 8 dereferenceable(112) %51)
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef nonnull align 8 dereferenceable(8) %1)
  call void @llvm.lifetime.start.p0(i64 400, ptr nonnull %12) #9
  %80 = call noundef ptr @_ZNKSt10unique_ptrIN3AST15MacroInvocationESt14default_deleteIS1_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %79) #9
  invoke void @_ZNK3AST15MacroInvocation5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.AST::MacroInvocation") align 8 %12, ptr noundef nonnull align 8 dereferenceable(393) %80)
          to label %81 unwind label %85

81:                                               ; preds = %78
  invoke void @_Z15make_unique_ptrIN3AST15MacroInvocationEESt10unique_ptrIT_St14default_deleteIS3_EEOS3_(ptr dead_on_unwind nonnull writable sret(%"class.std::unique_ptr.10") align 8 %11, ptr noundef nonnull align 8 dereferenceable(393) %12)
          to label %82 unwind label %87

82:                                               ; preds = %81
  invoke void @_ZN8TypeData10make_MacroENS_10Data_MacroE(ptr dead_on_unwind nonnull writable sret(%class.TypeData) align 8 %10, ptr noundef nonnull %11)
          to label %83 unwind label %89

83:                                               ; preds = %82
  invoke void @_ZN7TypeRefC2E4Span8TypeData(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %9, ptr noundef nonnull %10)
          to label %84 unwind label %91

84:                                               ; preds = %83
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %10) #9
  call void @_ZN8TypeData10Data_MacroD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %11) #9
  call void @_ZN3AST15MacroInvocationD2Ev(ptr noundef nonnull align 8 dereferenceable(393) %12) #9
  call void @llvm.lifetime.end.p0(i64 400, ptr nonnull %12) #9
  br label %269

85:                                               ; preds = %78
  %86 = landingpad { ptr, i32 }
          cleanup
  br label %95

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

89:                                               ; preds = %82
  %90 = landingpad { ptr, i32 }
          cleanup
  br label %93

91:                                               ; preds = %83
  %92 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %10) #9
  br label %93

93:                                               ; preds = %91, %89
  %.pn88 = phi { ptr, i32 } [ %92, %91 ], [ %90, %89 ]
  call void @_ZN8TypeData10Data_MacroD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %11) #9
  br label %94

94:                                               ; preds = %93, %87
  %.pn88.pn = phi { ptr, i32 } [ %.pn88, %93 ], [ %88, %87 ]
  call void @_ZN3AST15MacroInvocationD2Ev(ptr noundef nonnull align 8 dereferenceable(393) %12) #9
  br label %95

95:                                               ; preds = %94, %85
  %.pn88.pn.pn = phi { ptr, i32 } [ %.pn88.pn, %94 ], [ %86, %85 ]
  call void @llvm.lifetime.end.p0(i64 400, ptr nonnull %12) #9
  br label %270

96:                                               ; preds = %2
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %1)
  %97 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK8TypeData7as_UnitEv(ptr noundef nonnull align 8 dereferenceable(112) %51)
  invoke void @_ZN8TypeData9make_UnitENS_9Data_UnitE(ptr dead_on_unwind nonnull writable sret(%class.TypeData) align 8 %14)
          to label %98 unwind label %100

98:                                               ; preds = %96
  invoke void @_ZN7TypeRefC2E4Span8TypeData(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %13, ptr noundef nonnull %14)
          to label %99 unwind label %102

99:                                               ; preds = %98
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %14) #9
  br label %269

100:                                              ; preds = %96
  %101 = landingpad { ptr, i32 }
          cleanup
  br label %270

102:                                              ; preds = %98
  %103 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %14) #9
  br label %270

104:                                              ; preds = %2
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(8) %1)
  %105 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK8TypeData12as_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(112) %51)
  %.sroa.0.0.copyload = load i32, ptr %105, align 4, !tbaa !5
  invoke void @_ZN8TypeData14make_PrimitiveENS_14Data_PrimitiveE(ptr dead_on_unwind nonnull writable sret(%class.TypeData) align 8 %16, i32 %.sroa.0.0.copyload)
          to label %106 unwind label %108

106:                                              ; preds = %104
  invoke void @_ZN7TypeRefC2E4Span8TypeData(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %15, ptr noundef nonnull %16)
          to label %107 unwind label %110

107:                                              ; preds = %106
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %16) #9
  br label %269

108:                                              ; preds = %104
  %109 = landingpad { ptr, i32 }
          cleanup
  br label %270

110:                                              ; preds = %106
  %111 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %16) #9
  br label %270

112:                                              ; preds = %2
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef nonnull align 8 dereferenceable(8) %1)
  %113 = call noundef nonnull align 8 dereferenceable(104) ptr @_ZNK8TypeData11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(112) %51)
  invoke void @_ZN8TypeData13Data_FunctionC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(104) %19, ptr noundef nonnull align 8 dereferenceable(104) %113)
          to label %114 unwind label %117

114:                                              ; preds = %112
  invoke void @_ZN8TypeData13make_FunctionENS_13Data_FunctionE(ptr dead_on_unwind nonnull writable sret(%class.TypeData) align 8 %18, ptr noundef nonnull %19)
          to label %115 unwind label %119

115:                                              ; preds = %114
  invoke void @_ZN7TypeRefC2E4Span8TypeData(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %17, ptr noundef nonnull %18)
          to label %116 unwind label %121

116:                                              ; preds = %115
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %18) #9
  call void @_ZN8TypeData13Data_FunctionD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %19) #9
  br label %269

117:                                              ; preds = %112
  %118 = landingpad { ptr, i32 }
          cleanup
  br label %270

119:                                              ; preds = %114
  %120 = landingpad { ptr, i32 }
          cleanup
  br label %123

121:                                              ; preds = %115
  %122 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %18) #9
  br label %123

123:                                              ; preds = %121, %119
  %.pn81 = phi { ptr, i32 } [ %122, %121 ], [ %120, %119 ]
  call void @_ZN8TypeData13Data_FunctionD2Ev(ptr noundef nonnull align 8 dereferenceable(104) %19) #9
  br label %270

124:                                              ; preds = %2
  %125 = tail call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK8TypeData8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(112) %51)
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %20, ptr noundef nonnull align 8 dereferenceable(8) %1)
  invoke void @_ZZNK7TypeRef5cloneEvEN1H12clone_ty_vecERKSt6vectorIS_SaIS_EE(ptr dead_on_unwind nonnull writable sret(%"class.std::vector.5") align 8 %22, ptr noundef nonnull align 8 dereferenceable(24) %125)
          to label %126 unwind label %129

126:                                              ; preds = %124
  invoke void @_ZN8TypeData10make_TupleENS_10Data_TupleE(ptr dead_on_unwind nonnull writable sret(%class.TypeData) align 8 %21, ptr noundef nonnull %22)
          to label %127 unwind label %131

127:                                              ; preds = %126
  invoke void @_ZN7TypeRefC2E4Span8TypeData(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %20, ptr noundef nonnull %21)
          to label %128 unwind label %133

128:                                              ; preds = %127
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %21) #9
  call void @_ZN8TypeData10Data_TupleD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %22) #9
  br label %269

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

131:                                              ; preds = %126
  %132 = landingpad { ptr, i32 }
          cleanup
  br label %135

133:                                              ; preds = %127
  %134 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %21) #9
  br label %135

135:                                              ; preds = %133, %131
  %.pn78 = phi { ptr, i32 } [ %134, %133 ], [ %132, %131 ]
  call void @_ZN8TypeData10Data_TupleD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %22) #9
  br label %270

136:                                              ; preds = %2
  %137 = tail call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK8TypeData9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(112) %51)
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %23, ptr noundef nonnull align 8 dereferenceable(8) %1)
  invoke void @_ZN3AST11LifetimeRefC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(18) %25, ptr noundef nonnull align 8 dereferenceable(18) %137)
          to label %138 unwind label %149

138:                                              ; preds = %136
  %139 = getelementptr inbounds i8, ptr %25, i64 24
  %140 = getelementptr inbounds i8, ptr %137, i64 24
  %141 = load i8, ptr %140, align 8, !tbaa !9, !range !30, !noundef !31
  store i8 %141, ptr %139, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 120, ptr nonnull %26) #9
  %142 = getelementptr inbounds i8, ptr %137, i64 32
  %143 = call noundef ptr @_ZNKSt10unique_ptrI7TypeRefSt14default_deleteIS0_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %142) #9
  invoke void @_ZNK7TypeRef5cloneEv(ptr dead_on_unwind nonnull writable sret(%class.TypeRef) align 8 %26, ptr noundef nonnull align 8 dereferenceable(120) %143)
          to label %144 unwind label %.thread

144:                                              ; preds = %138
  %145 = getelementptr inbounds i8, ptr %25, i64 32
  invoke void @_Z15make_unique_ptrI7TypeRefESt10unique_ptrIT_St14default_deleteIS2_EEOS2_(ptr dead_on_unwind nonnull writable sret(%"class.std::unique_ptr") align 8 %145, ptr noundef nonnull align 8 dereferenceable(120) %26)
          to label %146 unwind label %.thread102

146:                                              ; preds = %144
  invoke void @_ZN8TypeData11make_BorrowENS_11Data_BorrowE(ptr dead_on_unwind nonnull writable sret(%class.TypeData) align 8 %24, ptr noundef nonnull %25)
          to label %147 unwind label %153

147:                                              ; preds = %146
  invoke void @_ZN7TypeRefC2E4Span8TypeData(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %23, ptr noundef nonnull %24)
          to label %148 unwind label %155

148:                                              ; preds = %147
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %24) #9
  call void @_ZN8TypeData11Data_BorrowD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %25) #9
  call void @_ZN7TypeRefD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %26) #9
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %26) #9
  br label %269

149:                                              ; preds = %136
  %150 = landingpad { ptr, i32 }
          cleanup
  br label %270

.thread:                                          ; preds = %138
  %151 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %26) #9
  br label %158

.thread102:                                       ; preds = %144
  %152 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7TypeRefD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %26) #9
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %26) #9
  br label %158

153:                                              ; preds = %146
  %154 = landingpad { ptr, i32 }
          cleanup
  br label %157

155:                                              ; preds = %147
  %156 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %24) #9
  br label %157

157:                                              ; preds = %153, %155
  %.pn73 = phi { ptr, i32 } [ %156, %155 ], [ %154, %153 ]
  call void @_ZN8TypeData11Data_BorrowD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %25) #9
  call void @_ZN7TypeRefD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %26) #9
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %26) #9
  br label %270

158:                                              ; preds = %.thread102, %.thread
  %.pn73.pn.pn101 = phi { ptr, i32 } [ %151, %.thread ], [ %152, %.thread102 ]
  call void @_ZN3AST11LifetimeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(18) %25) #9
  br label %270

159:                                              ; preds = %2
  %160 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK8TypeData10as_PointerEv(ptr noundef nonnull align 8 dereferenceable(112) %51)
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %27, ptr noundef nonnull align 8 dereferenceable(8) %1)
  %161 = load i8, ptr %160, align 8, !tbaa !32, !range !30, !noundef !31
  store i8 %161, ptr %29, align 8, !tbaa !32
  call void @llvm.lifetime.start.p0(i64 120, ptr nonnull %30) #9
  %162 = getelementptr inbounds i8, ptr %160, i64 8
  %163 = call noundef ptr @_ZNKSt10unique_ptrI7TypeRefSt14default_deleteIS0_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %162) #9
  invoke void @_ZNK7TypeRef5cloneEv(ptr dead_on_unwind nonnull writable sret(%class.TypeRef) align 8 %30, ptr noundef nonnull align 8 dereferenceable(120) %163)
          to label %164 unwind label %169

164:                                              ; preds = %159
  %165 = getelementptr inbounds i8, ptr %29, i64 8
  invoke void @_Z15make_unique_ptrI7TypeRefESt10unique_ptrIT_St14default_deleteIS2_EEOS2_(ptr dead_on_unwind nonnull writable sret(%"class.std::unique_ptr") align 8 %165, ptr noundef nonnull align 8 dereferenceable(120) %30)
          to label %166 unwind label %171

166:                                              ; preds = %164
  invoke void @_ZN8TypeData12make_PointerENS_12Data_PointerE(ptr dead_on_unwind nonnull writable sret(%class.TypeData) align 8 %28, ptr noundef nonnull %29)
          to label %167 unwind label %173

167:                                              ; preds = %166
  invoke void @_ZN7TypeRefC2E4Span8TypeData(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %27, ptr noundef nonnull %28)
          to label %168 unwind label %175

168:                                              ; preds = %167
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %28) #9
  call void @_ZN8TypeData12Data_PointerD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %29) #9
  call void @_ZN7TypeRefD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %30) #9
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %30) #9
  br label %269

169:                                              ; preds = %159
  %170 = landingpad { ptr, i32 }
          cleanup
  br label %179

171:                                              ; preds = %164
  %172 = landingpad { ptr, i32 }
          cleanup
  br label %178

173:                                              ; preds = %166
  %174 = landingpad { ptr, i32 }
          cleanup
  br label %177

175:                                              ; preds = %167
  %176 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %28) #9
  br label %177

177:                                              ; preds = %175, %173
  %.pn69 = phi { ptr, i32 } [ %176, %175 ], [ %174, %173 ]
  call void @_ZN8TypeData12Data_PointerD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %29) #9
  br label %178

178:                                              ; preds = %177, %171
  %.pn69.pn = phi { ptr, i32 } [ %.pn69, %177 ], [ %172, %171 ]
  call void @_ZN7TypeRefD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %30) #9
  br label %179

179:                                              ; preds = %178, %169
  %.pn69.pn.pn = phi { ptr, i32 } [ %.pn69.pn, %178 ], [ %170, %169 ]
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %30) #9
  br label %270

180:                                              ; preds = %2
  %181 = tail call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK8TypeData8as_ArrayEv(ptr noundef nonnull align 8 dereferenceable(112) %51)
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %31, ptr noundef nonnull align 8 dereferenceable(8) %1)
  call void @llvm.lifetime.start.p0(i64 120, ptr nonnull %34) #9
  %182 = call noundef ptr @_ZNKSt10unique_ptrI7TypeRefSt14default_deleteIS0_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %181) #9
  invoke void @_ZNK7TypeRef5cloneEv(ptr dead_on_unwind nonnull writable sret(%class.TypeRef) align 8 %34, ptr noundef nonnull align 8 dereferenceable(120) %182)
          to label %183 unwind label %189

183:                                              ; preds = %180
  invoke void @_Z15make_unique_ptrI7TypeRefESt10unique_ptrIT_St14default_deleteIS2_EEOS2_(ptr dead_on_unwind nonnull writable sret(%"class.std::unique_ptr") align 8 %33, ptr noundef nonnull align 8 dereferenceable(120) %34)
          to label %184 unwind label %191

184:                                              ; preds = %183
  %185 = getelementptr inbounds i8, ptr %33, i64 8
  %186 = getelementptr inbounds i8, ptr %181, i64 8
  call void @_ZNSt10shared_ptrIN3AST8ExprNodeEEC2ERKS2_(ptr noundef nonnull align 8 dereferenceable(16) %185, ptr noundef nonnull align 8 dereferenceable(16) %186) #9
  invoke void @_ZN8TypeData10make_ArrayENS_10Data_ArrayE(ptr dead_on_unwind nonnull writable sret(%class.TypeData) align 8 %32, ptr noundef nonnull %33)
          to label %187 unwind label %193

187:                                              ; preds = %184
  invoke void @_ZN7TypeRefC2E4Span8TypeData(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %31, ptr noundef nonnull %32)
          to label %188 unwind label %195

188:                                              ; preds = %187
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %32) #9
  call void @_ZN8TypeData10Data_ArrayD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %33) #9
  call void @_ZN7TypeRefD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %34) #9
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %34) #9
  br label %269

189:                                              ; preds = %180
  %190 = landingpad { ptr, i32 }
          cleanup
  br label %199

191:                                              ; preds = %183
  %192 = landingpad { ptr, i32 }
          cleanup
  br label %198

193:                                              ; preds = %184
  %194 = landingpad { ptr, i32 }
          cleanup
  br label %197

195:                                              ; preds = %187
  %196 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %32) #9
  br label %197

197:                                              ; preds = %195, %193
  %.pn65 = phi { ptr, i32 } [ %196, %195 ], [ %194, %193 ]
  call void @_ZN8TypeData10Data_ArrayD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %33) #9
  br label %198

198:                                              ; preds = %197, %191
  %.pn65.pn = phi { ptr, i32 } [ %.pn65, %197 ], [ %192, %191 ]
  call void @_ZN7TypeRefD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %34) #9
  br label %199

199:                                              ; preds = %198, %189
  %.pn65.pn.pn = phi { ptr, i32 } [ %.pn65.pn, %198 ], [ %190, %189 ]
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %34) #9
  br label %270

200:                                              ; preds = %2
  %201 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK8TypeData8as_SliceEv(ptr noundef nonnull align 8 dereferenceable(112) %51)
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %35, ptr noundef nonnull align 8 dereferenceable(8) %1)
  call void @llvm.lifetime.start.p0(i64 120, ptr nonnull %38) #9
  %202 = call noundef ptr @_ZNKSt10unique_ptrI7TypeRefSt14default_deleteIS0_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %201) #9
  invoke void @_ZNK7TypeRef5cloneEv(ptr dead_on_unwind nonnull writable sret(%class.TypeRef) align 8 %38, ptr noundef nonnull align 8 dereferenceable(120) %202)
          to label %203 unwind label %207

203:                                              ; preds = %200
  invoke void @_Z15make_unique_ptrI7TypeRefESt10unique_ptrIT_St14default_deleteIS2_EEOS2_(ptr dead_on_unwind nonnull writable sret(%"class.std::unique_ptr") align 8 %37, ptr noundef nonnull align 8 dereferenceable(120) %38)
          to label %204 unwind label %209

204:                                              ; preds = %203
  invoke void @_ZN8TypeData10make_SliceENS_10Data_SliceE(ptr dead_on_unwind nonnull writable sret(%class.TypeData) align 8 %36, ptr noundef nonnull %37)
          to label %205 unwind label %211

205:                                              ; preds = %204
  invoke void @_ZN7TypeRefC2E4Span8TypeData(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %35, ptr noundef nonnull %36)
          to label %206 unwind label %213

206:                                              ; preds = %205
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %36) #9
  call void @_ZN8TypeData10Data_SliceD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %37) #9
  call void @_ZN7TypeRefD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %38) #9
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %38) #9
  br label %269

207:                                              ; preds = %200
  %208 = landingpad { ptr, i32 }
          cleanup
  br label %217

209:                                              ; preds = %203
  %210 = landingpad { ptr, i32 }
          cleanup
  br label %216

211:                                              ; preds = %204
  %212 = landingpad { ptr, i32 }
          cleanup
  br label %215

213:                                              ; preds = %205
  %214 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %36) #9
  br label %215

215:                                              ; preds = %213, %211
  %.pn61 = phi { ptr, i32 } [ %214, %213 ], [ %212, %211 ]
  call void @_ZN8TypeData10Data_SliceD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %37) #9
  br label %216

216:                                              ; preds = %215, %209
  %.pn61.pn = phi { ptr, i32 } [ %.pn61, %215 ], [ %210, %209 ]
  call void @_ZN7TypeRefD1Ev(ptr noundef nonnull align 8 dereferenceable(120) %38) #9
  br label %217

217:                                              ; preds = %216, %207
  %.pn61.pn.pn = phi { ptr, i32 } [ %.pn61.pn, %216 ], [ %208, %207 ]
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %38) #9
  br label %270

218:                                              ; preds = %2
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %39, ptr noundef nonnull align 8 dereferenceable(8) %1)
  %219 = call noundef nonnull align 8 dereferenceable(12) ptr @_ZNK8TypeData10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(112) %51)
  invoke void @_ZN8TypeData12Data_GenericC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(12) %41, ptr noundef nonnull align 8 dereferenceable(12) %219)
          to label %220 unwind label %223

220:                                              ; preds = %218
  invoke void @_ZN8TypeData12make_GenericENS_12Data_GenericE(ptr dead_on_unwind nonnull writable sret(%class.TypeData) align 8 %40, ptr noundef nonnull %41)
          to label %221 unwind label %225

221:                                              ; preds = %220
  invoke void @_ZN7TypeRefC2E4Span8TypeData(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %39, ptr noundef nonnull %40)
          to label %222 unwind label %227

222:                                              ; preds = %221
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %40) #9
  call void @_ZN8TypeData12Data_GenericD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %41) #9
  br label %269

223:                                              ; preds = %218
  %224 = landingpad { ptr, i32 }
          cleanup
  br label %270

225:                                              ; preds = %220
  %226 = landingpad { ptr, i32 }
          cleanup
  br label %229

227:                                              ; preds = %221
  %228 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %40) #9
  br label %229

229:                                              ; preds = %227, %225
  %.pn58 = phi { ptr, i32 } [ %228, %227 ], [ %226, %225 ]
  call void @_ZN8TypeData12Data_GenericD2Ev(ptr noundef nonnull align 8 dereferenceable(12) %41) #9
  br label %270

230:                                              ; preds = %2
  %231 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(112) %51)
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %42, ptr noundef nonnull align 8 dereferenceable(8) %1)
  %232 = call noundef nonnull align 8 dereferenceable(240) ptr @_ZNKSt10unique_ptrIN3AST4PathESt14default_deleteIS1_EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %231) #9
  invoke void @_ZSt11make_uniqueIN3AST4PathEJRS1_EENSt8__detail9_MakeUniqIT_E15__single_objectEDpOT0_(ptr dead_on_unwind nonnull writable sret(%"class.std::unique_ptr.26") align 8 %44, ptr noundef nonnull align 8 dereferenceable(240) %232)
          to label %233 unwind label %236

233:                                              ; preds = %230
  invoke void @_ZN8TypeData9make_PathESt10unique_ptrIN3AST4PathESt14default_deleteIS2_EE(ptr dead_on_unwind nonnull writable sret(%class.TypeData) align 8 %43, ptr noundef nonnull %44)
          to label %234 unwind label %238

234:                                              ; preds = %233
  invoke void @_ZN7TypeRefC2E4Span8TypeData(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %42, ptr noundef nonnull %43)
          to label %235 unwind label %240

235:                                              ; preds = %234
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %43) #9
  call void @_ZNSt10unique_ptrIN3AST4PathESt14default_deleteIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %44) #9
  br label %269

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

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

240:                                              ; preds = %234
  %241 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %43) #9
  br label %242

242:                                              ; preds = %240, %238
  %.pn55 = phi { ptr, i32 } [ %241, %240 ], [ %239, %238 ]
  call void @_ZNSt10unique_ptrIN3AST4PathESt14default_deleteIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %44) #9
  br label %270

243:                                              ; preds = %2
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %45, ptr noundef nonnull align 8 dereferenceable(8) %1)
  %244 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNK8TypeData14as_TraitObjectEv(ptr noundef nonnull align 8 dereferenceable(112) %51)
  invoke void @_ZN8TypeData16Data_TraitObjectC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(48) %47, ptr noundef nonnull align 8 dereferenceable(48) %244)
          to label %245 unwind label %248

245:                                              ; preds = %243
  invoke void @_ZN8TypeData16make_TraitObjectENS_16Data_TraitObjectE(ptr dead_on_unwind nonnull writable sret(%class.TypeData) align 8 %46, ptr noundef nonnull %47)
          to label %246 unwind label %250

246:                                              ; preds = %245
  invoke void @_ZN7TypeRefC2E4Span8TypeData(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %45, ptr noundef nonnull %46)
          to label %247 unwind label %252

247:                                              ; preds = %246
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %46) #9
  call void @_ZN8TypeData16Data_TraitObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %47) #9
  br label %269

248:                                              ; preds = %243
  %249 = landingpad { ptr, i32 }
          cleanup
  br label %270

250:                                              ; preds = %245
  %251 = landingpad { ptr, i32 }
          cleanup
  br label %254

252:                                              ; preds = %246
  %253 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %46) #9
  br label %254

254:                                              ; preds = %252, %250
  %.pn52 = phi { ptr, i32 } [ %253, %252 ], [ %251, %250 ]
  call void @_ZN8TypeData16Data_TraitObjectD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %47) #9
  br label %270

255:                                              ; preds = %2
  call void @_ZN4SpanC1ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %48, ptr noundef nonnull align 8 dereferenceable(8) %1)
  %256 = call noundef nonnull align 8 dereferenceable(72) ptr @_ZNK8TypeData13as_ErasedTypeEv(ptr noundef nonnull align 8 dereferenceable(112) %51)
  invoke void @_ZN8TypeData15Data_ErasedTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(72) %50, ptr noundef nonnull align 8 dereferenceable(72) %256)
          to label %257 unwind label %260

257:                                              ; preds = %255
  invoke void @_ZN8TypeData15make_ErasedTypeENS_15Data_ErasedTypeE(ptr dead_on_unwind nonnull writable sret(%class.TypeData) align 8 %49, ptr noundef nonnull %50)
          to label %258 unwind label %262

258:                                              ; preds = %257
  invoke void @_ZN7TypeRefC2E4Span8TypeData(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %48, ptr noundef nonnull %49)
          to label %259 unwind label %264

259:                                              ; preds = %258
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %49) #9
  call void @_ZN8TypeData15Data_ErasedTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(72) %50) #9
  br label %269

260:                                              ; preds = %255
  %261 = landingpad { ptr, i32 }
          cleanup
  br label %270

262:                                              ; preds = %257
  %263 = landingpad { ptr, i32 }
          cleanup
  br label %266

264:                                              ; preds = %258
  %265 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN8TypeDataD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %49) #9
  br label %266

266:                                              ; preds = %264, %262
  %.pn = phi { ptr, i32 } [ %265, %264 ], [ %263, %262 ]
  call void @_ZN8TypeData15Data_ErasedTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(72) %50) #9
  br label %270

267:                                              ; preds = %2
  %268 = tail call ptr @__cxa_allocate_exception(i64 8) #9
  store ptr @.str.23, ptr %268, align 16, !tbaa !34
  tail call void @__cxa_throw(ptr nonnull %268, ptr nonnull @_ZTIPKc, ptr null) #10
  unreachable

269:                                              ; preds = %259, %247, %235, %222, %206, %188, %168, %148, %128, %116, %107, %99, %84, %73, %65, %57
  %.sink = phi ptr [ %48, %259 ], [ %45, %247 ], [ %42, %235 ], [ %39, %222 ], [ %35, %206 ], [ %31, %188 ], [ %27, %168 ], [ %23, %148 ], [ %20, %128 ], [ %17, %116 ], [ %15, %107 ], [ %13, %99 ], [ %9, %84 ], [ %7, %73 ], [ %5, %65 ], [ %3, %57 ]
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %.sink) #9
  ret void

270:                                              ; preds = %260, %266, %248, %254, %236, %242, %223, %229, %149, %158, %157, %129, %135, %117, %123, %108, %110, %100, %102, %74, %76, %66, %68, %58, %60, %217, %199, %179, %95
  %.sink105 = phi ptr [ %35, %217 ], [ %31, %199 ], [ %27, %179 ], [ %9, %95 ], [ %3, %60 ], [ %3, %58 ], [ %5, %68 ], [ %5, %66 ], [ %7, %76 ], [ %7, %74 ], [ %13, %102 ], [ %13, %100 ], [ %15, %110 ], [ %15, %108 ], [ %17, %123 ], [ %17, %117 ], [ %20, %135 ], [ %20, %129 ], [ %23, %157 ], [ %23, %158 ], [ %23, %149 ], [ %39, %229 ], [ %39, %223 ], [ %42, %242 ], [ %42, %236 ], [ %45, %254 ], [ %45, %248 ], [ %48, %266 ], [ %48, %260 ]
  %.pn.pn.pn = phi { ptr, i32 } [ %.pn61.pn.pn, %217 ], [ %.pn65.pn.pn, %199 ], [ %.pn69.pn.pn, %179 ], [ %.pn88.pn.pn, %95 ], [ %61, %60 ], [ %59, %58 ], [ %69, %68 ], [ %67, %66 ], [ %77, %76 ], [ %75, %74 ], [ %103, %102 ], [ %101, %100 ], [ %111, %110 ], [ %109, %108 ], [ %.pn81, %123 ], [ %118, %117 ], [ %.pn78, %135 ], [ %130, %129 ], [ %.pn73, %157 ], [ %.pn73.pn.pn101, %158 ], [ %150, %149 ], [ %.pn58, %229 ], [ %224, %223 ], [ %.pn55, %242 ], [ %237, %236 ], [ %.pn52, %254 ], [ %249, %248 ], [ %.pn, %266 ], [ %261, %260 ]
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %.sink105) #9
  resume { ptr, i32 } %.pn.pn.pn
}

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8TypeData10make_MacroENS_10Data_MacroE(ptr dead_on_unwind noalias writable sret(%class.TypeData) align 8, ptr noundef) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z15make_unique_ptrIN3AST15MacroInvocationEESt10unique_ptrIT_St14default_deleteIS3_EEOS3_(ptr dead_on_unwind noalias writable sret(%"class.std::unique_ptr.10") align 8, ptr noundef nonnull align 8 dereferenceable(393)) local_unnamed_addr #1

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8TypeData9make_PathESt10unique_ptrIN3AST4PathESt14default_deleteIS2_EE(ptr dead_on_unwind noalias writable sret(%class.TypeData) align 8, ptr noundef) local_unnamed_addr #1 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8TypeData9make_NoneENS_9Data_NoneE(ptr dead_on_unwind noalias writable sret(%class.TypeData) align 8) local_unnamed_addr #1 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8TypeData8make_AnyENS_8Data_AnyE(ptr dead_on_unwind noalias writable sret(%class.TypeData) align 8) local_unnamed_addr #1 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8TypeData9make_BangENS_9Data_BangE(ptr dead_on_unwind noalias writable sret(%class.TypeData) align 8) local_unnamed_addr #1 align 2

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

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

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

declare void @_ZNK3AST15MacroInvocation5cloneEv(ptr dead_on_unwind writable sret(%"class.AST::MacroInvocation") align 8, ptr noundef nonnull align 8 dereferenceable(393)) local_unnamed_addr #4

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8TypeData9make_UnitENS_9Data_UnitE(ptr dead_on_unwind noalias writable sret(%class.TypeData) align 8) local_unnamed_addr #1 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8TypeData14make_PrimitiveENS_14Data_PrimitiveE(ptr dead_on_unwind noalias writable sret(%class.TypeData) align 8, i32) local_unnamed_addr #1 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8TypeData13make_FunctionENS_13Data_FunctionE(ptr dead_on_unwind noalias writable sret(%class.TypeData) align 8, ptr noundef) local_unnamed_addr #1 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN8TypeData13Data_FunctionC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(104), ptr noundef nonnull align 8 dereferenceable(104)) unnamed_addr #7 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8TypeData10make_TupleENS_10Data_TupleE(ptr dead_on_unwind noalias writable sret(%class.TypeData) align 8, ptr noundef) local_unnamed_addr #1 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8TypeData11make_BorrowENS_11Data_BorrowE(ptr dead_on_unwind noalias writable sret(%class.TypeData) align 8, ptr noundef) local_unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3AST11LifetimeRefC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(18), ptr noundef nonnull align 8 dereferenceable(18)) unnamed_addr #7 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8TypeData12make_PointerENS_12Data_PointerE(ptr dead_on_unwind noalias writable sret(%class.TypeData) align 8, ptr noundef) local_unnamed_addr #1 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8TypeData10make_ArrayENS_10Data_ArrayE(ptr dead_on_unwind noalias writable sret(%class.TypeData) align 8, ptr noundef) local_unnamed_addr #1 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8TypeData10make_SliceENS_10Data_SliceE(ptr dead_on_unwind noalias writable sret(%class.TypeData) align 8, ptr noundef) local_unnamed_addr #1 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8TypeData12make_GenericENS_12Data_GenericE(ptr dead_on_unwind noalias writable sret(%class.TypeData) align 8, ptr noundef) local_unnamed_addr #1 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN8TypeData12Data_GenericC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(12), ptr noundef nonnull align 8 dereferenceable(12)) unnamed_addr #7 align 2

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZSt11make_uniqueIN3AST4PathEJRS1_EENSt8__detail9_MakeUniqIT_E15__single_objectEDpOT0_(ptr dead_on_unwind noalias writable sret(%"class.std::unique_ptr.26") align 8, ptr noundef nonnull align 8 dereferenceable(240)) local_unnamed_addr #7

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8TypeData16make_TraitObjectENS_16Data_TraitObjectE(ptr dead_on_unwind noalias writable sret(%class.TypeData) align 8, ptr noundef) local_unnamed_addr #1 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN8TypeData16Data_TraitObjectC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #7 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8TypeData15make_ErasedTypeENS_15Data_ErasedTypeE(ptr dead_on_unwind noalias writable sret(%class.TypeData) align 8, ptr noundef) local_unnamed_addr #1 align 2

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

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

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

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

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

declare void @_ZN7TypeRefD1Ev(ptr) local_unnamed_addr

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"_ZTS9eCoreType", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !23, i64 24}
!10 = !{!"_ZTSN8TypeData11Data_BorrowE", !11, i64 0, !23, i64 24, !24, i64 32}
!11 = !{!"_ZTSN3AST11LifetimeRefE", !12, i64 0, !22, i64 16}
!12 = !{!"_ZTS5Ident", !13, i64 0, !21, i64 8}
!13 = !{!"_ZTSN5Ident7HygieneE", !14, i64 0}
!14 = !{!"_ZTSSt10unique_ptrIN5Ident7Hygiene5InnerESt14default_deleteIS2_EE", !15, i64 0}
!15 = !{!"_ZTSSt15__uniq_ptr_dataIN5Ident7Hygiene5InnerESt14default_deleteIS2_ELb1ELb1EE", !16, i64 0}
!16 = !{!"_ZTSSt15__uniq_ptr_implIN5Ident7Hygiene5InnerESt14default_deleteIS2_EE", !17, i64 0}
!17 = !{!"_ZTSSt5tupleIJPN5Ident7Hygiene5InnerESt14default_deleteIS2_EEE", !18, i64 0}
!18 = !{!"_ZTSSt11_Tuple_implILm0EJPN5Ident7Hygiene5InnerESt14default_deleteIS2_EEE", !19, i64 0}
!19 = !{!"_ZTSSt10_Head_baseILm0EPN5Ident7Hygiene5InnerELb0EE", !20, i64 0}
!20 = !{!"any pointer", !7, i64 0}
!21 = !{!"_ZTS8RcString", !20, i64 0}
!22 = !{!"short", !7, i64 0}
!23 = !{!"bool", !7, i64 0}
!24 = !{!"_ZTSSt10unique_ptrI7TypeRefSt14default_deleteIS0_EE", !25, i64 0}
!25 = !{!"_ZTSSt15__uniq_ptr_dataI7TypeRefSt14default_deleteIS0_ELb1ELb1EE", !26, i64 0}
!26 = !{!"_ZTSSt15__uniq_ptr_implI7TypeRefSt14default_deleteIS0_EE", !27, i64 0}
!27 = !{!"_ZTSSt5tupleIJP7TypeRefSt14default_deleteIS0_EEE", !28, i64 0}
!28 = !{!"_ZTSSt11_Tuple_implILm0EJP7TypeRefSt14default_deleteIS0_EEE", !29, i64 0}
!29 = !{!"_ZTSSt10_Head_baseILm0EP7TypeRefLb0EE", !20, i64 0}
!30 = !{i8 0, i8 2}
!31 = !{}
!32 = !{!33, !23, i64 0}
!33 = !{!"_ZTSN8TypeData12Data_PointerE", !23, i64 0, !24, i64 8}
!34 = !{!20, !20, i64 0}


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