; LLVM IR from thepowersgang/mrustc :: src/hir (from_ast)

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

%"class.HIR::Publicity" = type { %"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 }
%"class.HIR::GenericParams" = type { %"class.std::vector.8", %"class.std::vector.13", %"class.std::vector.18", %"class.std::vector.23" }
%"class.std::vector.8" = type { %"struct.std::_Vector_base.9" }
%"struct.std::_Vector_base.9" = type { %"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.13" = type { %"struct.std::_Vector_base.14" }
%"struct.std::_Vector_base.14" = type { %"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.18" = type { %"struct.std::_Vector_base.19" }
%"struct.std::_Vector_base.19" = type { %"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.23" = type { %"struct.std::_Vector_base.24" }
%"struct.std::_Vector_base.24" = type { %"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.HIR::TypeRef" = type { ptr }
%"class.HIR::ExprPtr" = type { %"class.HIR::ExprPtrInner", %"class.std::vector.93", %"class.std::vector.93", %"class.MIR::FunctionPointer", %"class.HIR::ExprStatePtr" }
%"class.HIR::ExprPtrInner" = type { ptr }
%"class.std::vector.93" = type { %"struct.std::_Vector_base.94" }
%"struct.std::_Vector_base.94" = type { %"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.MIR::FunctionPointer" = type { ptr }
%"class.HIR::ExprStatePtr" = type { ptr }
%"struct.HIR::PathParams" = type { %class.ThinVector.114, %class.ThinVector.115, %class.ThinVector.116 }
%class.ThinVector.114 = type { ptr }
%class.ThinVector.115 = type { ptr }
%class.ThinVector.116 = type { ptr }
%class.RcString = type { ptr }
%"class.HIR::Struct::Data" = type { i32, %"union.HIR::Struct::Data::DataUnion" }
%"union.HIR::Struct::Data::DataUnion" = type { %"class.std::vector.365" }
%"class.std::vector.365" = type { %"struct.std::_Vector_base.366" }
%"struct.std::_Vector_base.366" = type { %"struct.std::_Vector_base<HIR::VisEnt<HIR::TypeRef>, std::allocator<HIR::VisEnt<HIR::TypeRef>>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::VisEnt<HIR::TypeRef>, std::allocator<HIR::VisEnt<HIR::TypeRef>>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::VisEnt<HIR::TypeRef>, std::allocator<HIR::VisEnt<HIR::TypeRef>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::VisEnt<HIR::TypeRef>, std::allocator<HIR::VisEnt<HIR::TypeRef>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.std::pair.395" = type { %class.RcString, %"struct.HIR::VisEnt" }
%"struct.HIR::VisEnt" = type { %"class.HIR::Publicity", %"class.HIR::TypeRef" }
%"class.HIR::Enum" = type { %"class.HIR::GenericParams", i8, i32, %"class.HIR::Enum::Class", %"struct.HIR::TraitMarkings" }
%"class.HIR::Enum::Class" = type { i32, %"union.HIR::Enum::Class::DataUnion" }
%"union.HIR::Enum::Class::DataUnion" = type { %"class.std::vector.403", [8 x i8] }
%"class.std::vector.403" = type { %"struct.std::_Vector_base.404" }
%"struct.std::_Vector_base.404" = type { %"struct.std::_Vector_base<HIR::Enum::DataVariant, std::allocator<HIR::Enum::DataVariant>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::Enum::DataVariant, std::allocator<HIR::Enum::DataVariant>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::Enum::DataVariant, std::allocator<HIR::Enum::DataVariant>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::Enum::DataVariant, std::allocator<HIR::Enum::DataVariant>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.HIR::TraitMarkings" = type { i8, i8, i8, %"class.std::map.375" }
%"class.std::map.375" = type { %"class.std::_Rb_tree.376" }
%"class.std::_Rb_tree.376" = type { %"struct.std::_Rb_tree<HIR::SimplePath, std::pair<const HIR::SimplePath, HIR::TraitMarkings::AutoMarking>, std::_Select1st<std::pair<const HIR::SimplePath, HIR::TraitMarkings::AutoMarking>>, std::less<HIR::SimplePath>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<HIR::SimplePath, std::pair<const HIR::SimplePath, HIR::TraitMarkings::AutoMarking>, std::_Select1st<std::pair<const HIR::SimplePath, HIR::TraitMarkings::AutoMarking>>, std::less<HIR::SimplePath>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"class.HIR::ItemPath" = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%"class.__gnu_cxx::__normal_iterator.421" = type { ptr }
%struct.Span = type { ptr }
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%"class.std::_Function_base" = type { %"union.std::_Any_data", ptr }
%"union.std::_Any_data" = type { %"union.std::_Nocopy_types" }
%"union.std::_Nocopy_types" = type { { i64, i64 } }
%class.anon.422 = type { ptr }
%"class.std::vector.408" = type { %"struct.std::_Vector_base.409" }
%"struct.std::_Vector_base.409" = type { %"struct.std::_Vector_base<HIR::Enum::ValueVariant, std::allocator<HIR::Enum::ValueVariant>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::Enum::ValueVariant, std::allocator<HIR::Enum::ValueVariant>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::Enum::ValueVariant, std::allocator<HIR::Enum::ValueVariant>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::Enum::ValueVariant, std::allocator<HIR::Enum::ValueVariant>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.HIR::Enum::ValueVariant" = type { %class.RcString, %"class.HIR::ExprPtr", i64 }
%"struct.HIR::Enum::Class::Data_Value" = type <{ %"class.std::vector.408", i8, [7 x i8] }>
%"struct.HIR::Enum::DataVariant" = type { %class.RcString, i8, %"class.HIR::TypeRef" }
%"class.__gnu_cxx::__normal_iterator.393" = type { ptr }
%"class.std::vector.370" = type { %"struct.std::_Vector_base.371" }
%"struct.std::_Vector_base.371" = type { %"struct.std::_Vector_base<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>, std::allocator<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>, std::allocator<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>, std::allocator<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>, std::allocator<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.__gnu_cxx::__normal_iterator.394" = type { ptr }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::__cxx11::basic_ostringstream" = type { %"class.std::basic_ostream.base", %"class.std::__cxx11::basic_stringbuf", %"class.std::basic_ios" }
%"class.std::basic_ostream.base" = type { ptr }
%"class.std::__cxx11::basic_stringbuf" = type { %"class.std::basic_streambuf", i32, %"class.std::__cxx11::basic_string" }
%"class.std::basic_streambuf" = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, %"class.std::locale" }
%"class.std::locale" = type { ptr }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.HIR::Struct" = type <{ %"class.HIR::GenericParams", i32, [4 x i8], %"class.HIR::Struct::Data", i32, i32, %"struct.HIR::TraitMarkings", %"struct.HIR::StructMarkings", i32, [4 x i8] }>
%"struct.HIR::StructMarkings" = type { i8, i32, i32, i32, i32, i32, i32, i8, i8, %class.U128 }
%class.U128 = type { i64, i64 }
%"class.HIR::Path" = type { %"class.HIR::Path::Data" }
%"class.HIR::Path::Data" = type { i32, %"union.HIR::Path::Data::DataUnion" }
%"union.HIR::Path::Data::DataUnion" = type { %"struct.HIR::Path::Data::Data_UfcsKnown" }
%"struct.HIR::Path::Data::Data_UfcsKnown" = type { %"class.HIR::TypeRef", %"class.HIR::GenericPath", %class.RcString, %"struct.HIR::PathParams", %"class.std::unique_ptr.106" }
%"class.HIR::GenericPath" = type { %"struct.HIR::SimplePath", %"struct.HIR::PathParams" }
%"struct.HIR::SimplePath" = type { %class.ThinVector }
%class.ThinVector = type { ptr }
%"class.std::unique_ptr.106" = type { %"struct.std::__uniq_ptr_data.107" }
%"struct.std::__uniq_ptr_data.107" = type { %"class.std::__uniq_ptr_impl.108" }
%"class.std::__uniq_ptr_impl.108" = type { %"class.std::tuple.109" }
%"class.std::tuple.109" = type { %"struct.std::_Tuple_impl.110" }
%"struct.std::_Tuple_impl.110" = type { %"struct.std::_Head_base.113" }
%"struct.std::_Head_base.113" = type { ptr }
%"class.HIR::TypePathBinding" = type { i32, %"union.HIR::TypePathBinding::DataUnion" }
%"union.HIR::TypePathBinding::DataUnion" = type { ptr }
%"struct.AST::EnumVariant" = type { %"class.AST::AttributeList", %class.RcString, %"class.AST::EnumVariantData" }
%"class.AST::AttributeList" = type { %"class.std::vector.38" }
%"class.std::vector.38" = type { %"struct.std::_Vector_base.39" }
%"struct.std::_Vector_base.39" = type { %"struct.std::_Vector_base<AST::Attribute, std::allocator<AST::Attribute>>::_Vector_impl" }
%"struct.std::_Vector_base<AST::Attribute, std::allocator<AST::Attribute>>::_Vector_impl" = type { %"struct.std::_Vector_base<AST::Attribute, std::allocator<AST::Attribute>>::_Vector_impl_data" }
%"struct.std::_Vector_base<AST::Attribute, std::allocator<AST::Attribute>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.AST::EnumVariantData" = type { i32, %"union.AST::EnumVariantData::DataUnion" }
%"union.AST::EnumVariantData::DataUnion" = type { %"struct.AST::EnumVariantData::Data_Tuple" }
%"struct.AST::EnumVariantData::Data_Tuple" = type { %"class.std::vector.383" }
%"class.std::vector.383" = type { %"struct.std::_Vector_base.384" }
%"struct.std::_Vector_base.384" = type { %"struct.std::_Vector_base<AST::TupleItem, std::allocator<AST::TupleItem>>::_Vector_impl" }
%"struct.std::_Vector_base<AST::TupleItem, std::allocator<AST::TupleItem>>::_Vector_impl" = type { %"struct.std::_Vector_base<AST::TupleItem, std::allocator<AST::TupleItem>>::_Vector_impl_data" }
%"struct.std::_Vector_base<AST::TupleItem, std::allocator<AST::TupleItem>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.AST::EnumVariantData::Data_Value" = type { %"class.AST::Expr" }
%"class.AST::Expr" = type { %"class.std::shared_ptr.72" }
%"class.std::shared_ptr.72" = type { %"class.std::__shared_ptr.73" }
%"class.std::__shared_ptr.73" = type { ptr, %"class.std::__shared_count" }
%"class.AST::Enum" = type { %"class.AST::GenericParams", %"class.std::vector.416", %"struct.AST::Enum::Markings" }
%"class.AST::GenericParams" = type { %"class.std::vector.28", %"class.std::vector.33" }
%"class.std::vector.28" = type { %"struct.std::_Vector_base.29" }
%"struct.std::_Vector_base.29" = type { %"struct.std::_Vector_base<AST::GenericParam, std::allocator<AST::GenericParam>>::_Vector_impl" }
%"struct.std::_Vector_base<AST::GenericParam, std::allocator<AST::GenericParam>>::_Vector_impl" = type { %"struct.std::_Vector_base<AST::GenericParam, std::allocator<AST::GenericParam>>::_Vector_impl_data" }
%"struct.std::_Vector_base<AST::GenericParam, std::allocator<AST::GenericParam>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.33" = type { %"struct.std::_Vector_base.34" }
%"struct.std::_Vector_base.34" = type { %"struct.std::_Vector_base<AST::GenericBound, std::allocator<AST::GenericBound>>::_Vector_impl" }
%"struct.std::_Vector_base<AST::GenericBound, std::allocator<AST::GenericBound>>::_Vector_impl" = type { %"struct.std::_Vector_base<AST::GenericBound, std::allocator<AST::GenericBound>>::_Vector_impl_data" }
%"struct.std::_Vector_base<AST::GenericBound, std::allocator<AST::GenericBound>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.416" = type { %"struct.std::_Vector_base.417" }
%"struct.std::_Vector_base.417" = type { %"struct.std::_Vector_base<AST::EnumVariant, std::allocator<AST::EnumVariant>>::_Vector_impl" }
%"struct.std::_Vector_base<AST::EnumVariant, std::allocator<AST::EnumVariant>>::_Vector_impl" = type { %"struct.std::_Vector_base<AST::EnumVariant, std::allocator<AST::EnumVariant>>::_Vector_impl_data" }
%"struct.std::_Vector_base<AST::EnumVariant, std::allocator<AST::EnumVariant>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.AST::Enum::Markings" = type <{ i32, i8, [3 x i8] }>
%"struct.AST::TupleItem" = type { %"class.AST::AttributeList", %"class.AST::Visibility", %class.TypeRef }
%"class.AST::Visibility" = type <{ %"class.std::shared_ptr.2", %"class.std::shared_ptr.5", i32, [4 x i8] }>
%"class.std::shared_ptr.2" = type { %"class.std::__shared_ptr.3" }
%"class.std::__shared_ptr.3" = type { ptr, %"class.std::__shared_count" }
%"class.std::shared_ptr.5" = type { %"class.std::__shared_ptr.6" }
%"class.std::__shared_ptr.6" = type { ptr, %"class.std::__shared_count" }
%class.TypeRef = type { %struct.Span, %class.TypeData }
%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.83", %"class.std::vector.83", %"class.std::vector.88" }
%"class.std::vector.83" = type { %"struct.std::_Vector_base.84" }
%"struct.std::_Vector_base.84" = 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.88" = type { %"struct.std::_Vector_base.89" }
%"struct.std::_Vector_base.89" = 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.AST::EnumVariantData::Data_Struct" = type { %"class.std::vector.388" }
%"class.std::vector.388" = type { %"struct.std::_Vector_base.389" }
%"struct.std::_Vector_base.389" = type { %"struct.std::_Vector_base<AST::StructItem, std::allocator<AST::StructItem>>::_Vector_impl" }
%"struct.std::_Vector_base<AST::StructItem, std::allocator<AST::StructItem>>::_Vector_impl" = type { %"struct.std::_Vector_base<AST::StructItem, std::allocator<AST::StructItem>>::_Vector_impl_data" }
%"struct.std::_Vector_base<AST::StructItem, std::allocator<AST::StructItem>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.AST::StructItem" = type { %"class.AST::AttributeList", %"class.AST::Visibility", %class.RcString, %class.TypeRef }

@.str.5 = external hidden unnamed_addr constant [75 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [1 x i8], align 1
@_ZTISt13runtime_error = external constant ptr
@.str.12 = external hidden unnamed_addr constant [24 x i8], align 1
@_ZTIPKc = external constant ptr
@.str.33 = external hidden unnamed_addr constant [22 x i8], align 1
@__PRETTY_FUNCTION__._Z13LowerHIR_EnumN3HIR8ItemPathERKN3AST4EnumERKNS1_13AttributeListESt8functionIFv8RcStringNS_6StructEEE = external hidden unnamed_addr constant [143 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [2 x i8], align 1

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

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

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

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

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

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

declare i32 @__gxx_personality_v0(...)

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z13LowerHIR_TypeRK7TypeRef(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeRef") align 8, ptr noundef nonnull align 8 dereferenceable(120)) #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z13LowerHIR_ExprRKN3AST4ExprE(ptr dead_on_unwind noalias writable sret(%"class.HIR::ExprPtr") align 8, ptr noundef nonnull align 8 dereferenceable(16)) #3

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

declare ptr @__cxa_allocate_exception(i64)

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

declare void @__cxa_free_exception(ptr)

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

declare void @__cxa_throw(ptr, ptr, ptr)

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3AST4Expr8is_validEv(ptr noundef nonnull align 8 dereferenceable(16)) #5 align 2

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8RcString12new_internedERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind noalias writable sret(%class.RcString) align 8, ptr noundef nonnull align 8 dereferenceable(32)) #3 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN12_GLOBAL__N_110new_visentIN3HIR7TypeRefEEENS1_6VisEntIT_EENS1_9PublicityES4_(ptr dead_on_unwind noalias writable sret(%"struct.HIR::VisEnt") align 8, ptr noundef, ptr noundef) #3

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_Z13LowerHIR_EnumN3HIR8ItemPathERKN3AST4EnumERKNS1_13AttributeListESt8functionIFv8RcStringNS_6StructEEE(ptr dead_on_unwind noalias writable sret(%"class.HIR::Enum") align 8 %0, ptr noundef byval(%"class.HIR::ItemPath") align 8 %1, ptr noundef nonnull align 8 dereferenceable(80) %2, ptr noundef nonnull align 8 dereferenceable(24) %3, ptr noundef %4) #3 personality ptr @__gxx_personality_v0 {
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i8, align 1
  %11 = alloca i8, align 1
  %12 = alloca ptr, align 8
  %13 = alloca %"class.__gnu_cxx::__normal_iterator.421", align 8
  %14 = alloca %"class.__gnu_cxx::__normal_iterator.421", align 8
  %15 = alloca ptr, align 8
  %16 = alloca %struct.Span, align 8
  %17 = alloca %"class.std::function", align 8
  %18 = alloca %class.anon.422, align 8
  %19 = alloca ptr, align 8
  %20 = alloca i32, align 4
  %21 = alloca i8, align 1
  %22 = alloca i32, align 4
  %23 = alloca %"class.HIR::GenericParams", align 8
  %24 = alloca %"class.HIR::Enum::Class", align 8
  %25 = alloca %"class.std::vector.408", align 8
  %26 = alloca ptr, align 8
  %27 = alloca %"class.__gnu_cxx::__normal_iterator.421", align 8
  %28 = alloca %"class.__gnu_cxx::__normal_iterator.421", align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca %"struct.HIR::Enum::ValueVariant", align 8
  %32 = alloca %"class.HIR::Enum::Class", align 8
  %33 = alloca %"struct.HIR::Enum::Class::Data_Value", align 8
  %34 = alloca %"class.std::vector.403", align 8
  %35 = alloca ptr, align 8
  %36 = alloca %"class.__gnu_cxx::__normal_iterator.421", align 8
  %37 = alloca %"class.__gnu_cxx::__normal_iterator.421", align 8
  %38 = alloca i32, align 4
  %39 = alloca ptr, align 8
  %40 = alloca %"struct.HIR::Enum::DataVariant", align 8
  %41 = alloca %"class.HIR::Struct::Data", align 8
  %42 = alloca ptr, align 8
  %43 = alloca %"class.std::vector.365", align 8
  %44 = alloca ptr, align 8
  %45 = alloca %"class.__gnu_cxx::__normal_iterator.393", align 8
  %46 = alloca %"class.__gnu_cxx::__normal_iterator.393", align 8
  %47 = alloca ptr, align 8
  %48 = alloca %"struct.HIR::VisEnt", align 8
  %49 = alloca %"class.HIR::Publicity", align 8
  %50 = alloca %"class.HIR::TypeRef", align 8
  %51 = alloca %"class.HIR::Struct::Data", align 8
  %52 = alloca %"class.std::vector.365", align 8
  %53 = alloca ptr, align 8
  %54 = alloca %"class.std::vector.370", align 8
  %55 = alloca ptr, align 8
  %56 = alloca %"class.__gnu_cxx::__normal_iterator.394", align 8
  %57 = alloca %"class.__gnu_cxx::__normal_iterator.394", align 8
  %58 = alloca ptr, align 8
  %59 = alloca %"struct.std::pair.395", align 8
  %60 = alloca %"struct.HIR::VisEnt", align 8
  %61 = alloca %"class.HIR::Publicity", align 8
  %62 = alloca %"class.HIR::TypeRef", align 8
  %63 = alloca %"class.HIR::Struct::Data", align 8
  %64 = alloca %"class.std::vector.370", align 8
  %65 = alloca %class.RcString, align 8
  %66 = alloca %"class.std::__cxx11::basic_string", align 8
  %67 = alloca %"class.std::__cxx11::basic_ostringstream", align 8
  %68 = alloca %class.RcString, align 8
  %69 = alloca %"class.HIR::Struct", align 8
  %70 = alloca %"class.HIR::GenericParams", align 8
  %71 = alloca %"class.HIR::Struct::Data", align 8
  %72 = alloca %"class.HIR::ItemPath", align 8
  %73 = alloca %"class.HIR::Path", align 8
  %74 = alloca %"struct.HIR::PathParams", align 8
  %75 = alloca %"struct.HIR::Enum::DataVariant", align 8
  %76 = alloca %"class.HIR::Path", align 8
  %77 = alloca %"class.HIR::TypePathBinding", align 8
  %78 = alloca i1, align 1
  %79 = alloca %"class.HIR::Enum::Class", align 8
  %80 = alloca %"class.std::vector.403", align 8
  store ptr %0, ptr %6, align 8
  store ptr %2, ptr %7, align 8, !tbaa !5
  store ptr %3, ptr %8, align 8, !tbaa !5
  store ptr %4, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %10) #10
  store i8 0, ptr %10, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %11) #10
  store i8 0, ptr %11, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #10
  %81 = load ptr, ptr %7, align 8, !tbaa !5
  %82 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3AST4Enum8variantsEv(ptr noundef nonnull align 8 dereferenceable(80) %81)
  store ptr %82, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #10
  %83 = load ptr, ptr %12, align 8, !tbaa !5
  %84 = call ptr @_ZNKSt6vectorIN3AST11EnumVariantESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %83) #10
  %85 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.421", ptr %13, i32 0, i32 0
  store ptr %84, ptr %85, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #10
  %86 = load ptr, ptr %12, align 8, !tbaa !5
  %87 = call ptr @_ZNKSt6vectorIN3AST11EnumVariantESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %86) #10
  %88 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.421", ptr %14, i32 0, i32 0
  store ptr %87, ptr %88, align 8
  br label %89

89:                                               ; preds = %123, %5
  %90 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3AST11EnumVariantESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %14) #10
  br i1 %90, label %92, label %91

91:                                               ; preds = %89
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #10
  br label %125

92:                                               ; preds = %89
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #10
  %93 = call noundef nonnull align 8 dereferenceable(64) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3AST11EnumVariantESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %13) #10
  store ptr %93, ptr %15, align 8, !tbaa !5
  %94 = load ptr, ptr %15, align 8, !tbaa !5
  %95 = getelementptr inbounds %"struct.AST::EnumVariant", ptr %94, i32 0, i32 2
  %96 = call noundef zeroext i1 @_ZNK3AST15EnumVariantData8is_ValueEv(ptr noundef nonnull align 8 dereferenceable(32) %95)
  br i1 %96, label %97, label %104

97:                                               ; preds = %92
  %98 = load ptr, ptr %15, align 8, !tbaa !5
  %99 = getelementptr inbounds %"struct.AST::EnumVariant", ptr %98, i32 0, i32 2
  %100 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3AST15EnumVariantData8as_ValueEv(ptr noundef nonnull align 8 dereferenceable(32) %99)
  %101 = getelementptr inbounds %"struct.AST::EnumVariantData::Data_Value", ptr %100, i32 0, i32 0
  %102 = call noundef zeroext i1 @_ZNK3AST4Expr8is_validEv(ptr noundef nonnull align 8 dereferenceable(16) %101)
  br i1 %102, label %103, label %104

103:                                              ; preds = %97
  store i8 1, ptr %10, align 1, !tbaa !9
  br label %122

104:                                              ; preds = %97, %92
  %105 = load ptr, ptr %15, align 8, !tbaa !5
  %106 = getelementptr inbounds %"struct.AST::EnumVariant", ptr %105, i32 0, i32 2
  %107 = call noundef zeroext i1 @_ZNK3AST15EnumVariantData8is_TupleEv(ptr noundef nonnull align 8 dereferenceable(32) %106)
  br i1 %107, label %112, label %108

108:                                              ; preds = %104
  %109 = load ptr, ptr %15, align 8, !tbaa !5
  %110 = getelementptr inbounds %"struct.AST::EnumVariant", ptr %109, i32 0, i32 2
  %111 = call noundef zeroext i1 @_ZNK3AST15EnumVariantData9is_StructEv(ptr noundef nonnull align 8 dereferenceable(32) %110)
  br i1 %111, label %112, label %113

112:                                              ; preds = %108, %104
  store i8 1, ptr %11, align 1, !tbaa !9
  br label %121

113:                                              ; preds = %108
  %114 = load ptr, ptr %15, align 8, !tbaa !5
  %115 = getelementptr inbounds %"struct.AST::EnumVariant", ptr %114, i32 0, i32 2
  %116 = call noundef zeroext i1 @_ZNK3AST15EnumVariantData8is_ValueEv(ptr noundef nonnull align 8 dereferenceable(32) %115)
  br i1 %116, label %117, label %118

117:                                              ; preds = %113
  br label %120

118:                                              ; preds = %113
  call void @__assert_fail(ptr noundef @.str.33, ptr noundef @.str.5, i32 noundef 1299, ptr noundef @__PRETTY_FUNCTION__._Z13LowerHIR_EnumN3HIR8ItemPathERKN3AST4EnumERKNS1_13AttributeListESt8functionIFv8RcStringNS_6StructEEE) #11
  unreachable

119:                                              ; No predecessors!
  br label %120

120:                                              ; preds = %119, %117
  br label %121

121:                                              ; preds = %120, %112
  br label %122

122:                                              ; preds = %121, %103
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #10
  br label %123

123:                                              ; preds = %122
  %124 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3AST11EnumVariantESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %13) #10
  br label %89

125:                                              ; preds = %91
  %126 = load i8, ptr %10, align 1, !tbaa !9, !range !11, !noundef !12
  %127 = trunc i8 %126 to i1
  br i1 %127, label %128, label %147

128:                                              ; preds = %125
  %129 = load i8, ptr %11, align 1, !tbaa !9, !range !11, !noundef !12
  %130 = trunc i8 %129 to i1
  br i1 %130, label %131, label %147

131:                                              ; preds = %128
  br label %132

132:                                              ; preds = %131
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #10
  call void @_ZN4SpanC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %16)
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #10
  %133 = getelementptr inbounds %class.anon.422, ptr %18, i32 0, i32 0
  store ptr %1, ptr %133, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ13LowerHIR_EnumN3HIR8ItemPathERKN3AST4EnumERKNS6_13AttributeListES_IFv8RcStringNS4_6StructEEEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 8 dereferenceable(8) %18) #10
  invoke void @_ZNK4Span5errorE9ErrorTypeSt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %16, i32 noundef 0, ptr noundef %17)
          to label %134 unwind label %137

134:                                              ; preds = %132
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #10
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %16) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #10
  %135 = call ptr @__cxa_allocate_exception(i64 16) #10
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %135, ptr noundef @.str.12)
          to label %136 unwind label %141

136:                                              ; preds = %134
  call void @__cxa_throw(ptr %135, ptr @_ZTISt13runtime_error, ptr @_ZNSt13runtime_errorD1Ev) #12
  unreachable

137:                                              ; preds = %132
  %138 = landingpad { ptr, i32 }
          cleanup
  %139 = extractvalue { ptr, i32 } %138, 0
  store ptr %139, ptr %19, align 8
  %140 = extractvalue { ptr, i32 } %138, 1
  store i32 %140, ptr %20, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #10
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %16) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #10
  br label %624

141:                                              ; preds = %134
  %142 = landingpad { ptr, i32 }
          cleanup
  %143 = extractvalue { ptr, i32 } %142, 0
  store ptr %143, ptr %19, align 8
  %144 = extractvalue { ptr, i32 } %142, 1
  store i32 %144, ptr %20, align 4
  call void @__cxa_free_exception(ptr %135) #10
  br label %624

145:                                              ; No predecessors!
  br label %146

146:                                              ; preds = %145
  br label %147

147:                                              ; preds = %146, %128, %125
  call void @llvm.lifetime.start.p0(i64 1, ptr %21) #10
  %148 = load ptr, ptr %7, align 8, !tbaa !5
  %149 = getelementptr inbounds %"class.AST::Enum", ptr %148, i32 0, i32 2
  %150 = getelementptr inbounds %"struct.AST::Enum::Markings", ptr %149, i32 0, i32 1
  %151 = load i8, ptr %150, align 4, !tbaa !13, !range !11, !noundef !12
  %152 = trunc i8 %151 to i1
  %153 = zext i1 %152 to i8
  store i8 %153, ptr %21, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #10
  store i32 0, ptr %22, align 4, !tbaa !30
  %154 = load ptr, ptr %7, align 8, !tbaa !5
  %155 = getelementptr inbounds %"class.AST::Enum", ptr %154, i32 0, i32 2
  %156 = getelementptr inbounds %"struct.AST::Enum::Markings", ptr %155, i32 0, i32 0
  %157 = load i32, ptr %156, align 8, !tbaa !32
  switch i32 %157, label %169 [
    i32 0, label %158
    i32 1, label %159
    i32 2, label %160
    i32 3, label %161
    i32 4, label %162
    i32 5, label %163
    i32 6, label %164
    i32 7, label %165
    i32 8, label %166
    i32 9, label %167
    i32 10, label %168
  ]

158:                                              ; preds = %147
  store i32 0, ptr %22, align 4, !tbaa !30
  br label %169

159:                                              ; preds = %147
  store i32 2, ptr %22, align 4, !tbaa !30
  br label %169

160:                                              ; preds = %147
  store i32 3, ptr %22, align 4, !tbaa !30
  br label %169

161:                                              ; preds = %147
  store i32 4, ptr %22, align 4, !tbaa !30
  br label %169

162:                                              ; preds = %147
  store i32 5, ptr %22, align 4, !tbaa !30
  br label %169

163:                                              ; preds = %147
  store i32 1, ptr %22, align 4, !tbaa !30
  br label %169

164:                                              ; preds = %147
  store i32 7, ptr %22, align 4, !tbaa !30
  br label %169

165:                                              ; preds = %147
  store i32 8, ptr %22, align 4, !tbaa !30
  br label %169

166:                                              ; preds = %147
  store i32 9, ptr %22, align 4, !tbaa !30
  br label %169

167:                                              ; preds = %147
  store i32 10, ptr %22, align 4, !tbaa !30
  br label %169

168:                                              ; preds = %147
  store i32 6, ptr %22, align 4, !tbaa !30
  br label %169

169:                                              ; preds = %168, %167, %166, %165, %164, %163, %162, %161, %160, %159, %158, %147
  call void @llvm.lifetime.start.p0(i64 96, ptr %23) #10
  %170 = load ptr, ptr %7, align 8, !tbaa !5
  %171 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNK3AST4Enum6paramsEv(ptr noundef nonnull align 8 dereferenceable(80) %170)
  call void @_Z22LowerHIR_GenericParamsRKN3AST13GenericParamsEPb(ptr dead_on_unwind writable sret(%"class.HIR::GenericParams") align 8 %23, ptr noundef nonnull align 8 dereferenceable(48) %171, ptr noundef null)
  call void @llvm.lifetime.start.p0(i64 40, ptr %24) #10
  invoke void @_ZN3HIR4Enum5ClassC2Ev(ptr noundef nonnull align 8 dereferenceable(40) %24)
          to label %172 unwind label %194

172:                                              ; preds = %169
  %173 = load ptr, ptr %7, align 8, !tbaa !5
  %174 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3AST4Enum8variantsEv(ptr noundef nonnull align 8 dereferenceable(80) %173)
          to label %175 unwind label %198

175:                                              ; preds = %172
  %176 = call noundef i64 @_ZNKSt6vectorIN3AST11EnumVariantESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %174) #10
  %177 = icmp ugt i64 %176, 0
  br i1 %177, label %178, label %259

178:                                              ; preds = %175
  %179 = load i8, ptr %11, align 1, !tbaa !9, !range !11, !noundef !12
  %180 = trunc i8 %179 to i1
  br i1 %180, label %259, label %181

181:                                              ; preds = %178
  call void @llvm.lifetime.start.p0(i64 24, ptr %25) #10
  call void @_ZNSt6vectorIN3HIR4Enum12ValueVariantESaIS2_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %25) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #10
  %182 = load ptr, ptr %7, align 8, !tbaa !5
  %183 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3AST4Enum8variantsEv(ptr noundef nonnull align 8 dereferenceable(80) %182)
          to label %184 unwind label %202

184:                                              ; preds = %181
  store ptr %183, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #10
  %185 = load ptr, ptr %26, align 8, !tbaa !5
  %186 = call ptr @_ZNKSt6vectorIN3AST11EnumVariantESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %185) #10
  %187 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.421", ptr %27, i32 0, i32 0
  store ptr %186, ptr %187, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #10
  %188 = load ptr, ptr %26, align 8, !tbaa !5
  %189 = call ptr @_ZNKSt6vectorIN3AST11EnumVariantESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %188) #10
  %190 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.421", ptr %28, i32 0, i32 0
  store ptr %189, ptr %190, align 8
  br label %191

191:                                              ; preds = %222, %184
  %192 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3AST11EnumVariantESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %27, ptr noundef nonnull align 8 dereferenceable(8) %28) #10
  br i1 %192, label %206, label %193

193:                                              ; preds = %191
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #10
  br label %243

194:                                              ; preds = %169
  %195 = landingpad { ptr, i32 }
          cleanup
  %196 = extractvalue { ptr, i32 } %195, 0
  store ptr %196, ptr %19, align 8
  %197 = extractvalue { ptr, i32 } %195, 1
  store i32 %197, ptr %20, align 4
  br label %623

198:                                              ; preds = %172
  %199 = landingpad { ptr, i32 }
          cleanup
  %200 = extractvalue { ptr, i32 } %199, 0
  store ptr %200, ptr %19, align 8
  %201 = extractvalue { ptr, i32 } %199, 1
  store i32 %201, ptr %20, align 4
  br label %622

202:                                              ; preds = %181
  %203 = landingpad { ptr, i32 }
          cleanup
  %204 = extractvalue { ptr, i32 } %203, 0
  store ptr %204, ptr %19, align 8
  %205 = extractvalue { ptr, i32 } %203, 1
  store i32 %205, ptr %20, align 4
  br label %242

206:                                              ; preds = %191
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #10
  %207 = call noundef nonnull align 8 dereferenceable(64) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3AST11EnumVariantESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %27) #10
  store ptr %207, ptr %29, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #10
  %208 = load ptr, ptr %29, align 8, !tbaa !5
  %209 = getelementptr inbounds %"struct.AST::EnumVariant", ptr %208, i32 0, i32 2
  %210 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3AST15EnumVariantData8as_ValueEv(ptr noundef nonnull align 8 dereferenceable(32) %209)
          to label %211 unwind label %224

211:                                              ; preds = %206
  store ptr %210, ptr %30, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 88, ptr %31) #10
  %212 = getelementptr inbounds %"struct.HIR::Enum::ValueVariant", ptr %31, i32 0, i32 0
  %213 = load ptr, ptr %29, align 8, !tbaa !5
  %214 = getelementptr inbounds %"struct.AST::EnumVariant", ptr %213, i32 0, i32 1
  invoke void @_ZN8RcStringC2ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %212, ptr noundef nonnull align 8 dereferenceable(8) %214)
          to label %215 unwind label %228

215:                                              ; preds = %211
  %216 = getelementptr inbounds %"struct.HIR::Enum::ValueVariant", ptr %31, i32 0, i32 1
  %217 = load ptr, ptr %30, align 8, !tbaa !5
  %218 = getelementptr inbounds %"struct.AST::EnumVariantData::Data_Value", ptr %217, i32 0, i32 0
  invoke void @_Z13LowerHIR_ExprRKN3AST4ExprE(ptr dead_on_unwind writable sret(%"class.HIR::ExprPtr") align 8 %216, ptr noundef nonnull align 8 dereferenceable(16) %218)
          to label %219 unwind label %232

219:                                              ; preds = %215
  %220 = getelementptr inbounds %"struct.HIR::Enum::ValueVariant", ptr %31, i32 0, i32 2
  store i64 0, ptr %220, align 8, !tbaa !33
  invoke void @_ZNSt6vectorIN3HIR4Enum12ValueVariantESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %25, ptr noundef nonnull align 8 dereferenceable(88) %31)
          to label %221 unwind label %236

221:                                              ; preds = %219
  call void @_ZN3HIR4Enum12ValueVariantD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %31) #10
  call void @llvm.lifetime.end.p0(i64 88, ptr %31) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #10
  br label %222

222:                                              ; preds = %221
  %223 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3AST11EnumVariantESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %27) #10
  br label %191

224:                                              ; preds = %206
  %225 = landingpad { ptr, i32 }
          cleanup
  %226 = extractvalue { ptr, i32 } %225, 0
  store ptr %226, ptr %19, align 8
  %227 = extractvalue { ptr, i32 } %225, 1
  store i32 %227, ptr %20, align 4
  br label %241

228:                                              ; preds = %211
  %229 = landingpad { ptr, i32 }
          cleanup
  %230 = extractvalue { ptr, i32 } %229, 0
  store ptr %230, ptr %19, align 8
  %231 = extractvalue { ptr, i32 } %229, 1
  store i32 %231, ptr %20, align 4
  br label %240

232:                                              ; preds = %215
  %233 = landingpad { ptr, i32 }
          cleanup
  %234 = extractvalue { ptr, i32 } %233, 0
  store ptr %234, ptr %19, align 8
  %235 = extractvalue { ptr, i32 } %233, 1
  store i32 %235, ptr %20, align 4
  call void @_ZN8RcStringD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %212) #10
  br label %240

236:                                              ; preds = %219
  %237 = landingpad { ptr, i32 }
          cleanup
  %238 = extractvalue { ptr, i32 } %237, 0
  store ptr %238, ptr %19, align 8
  %239 = extractvalue { ptr, i32 } %237, 1
  store i32 %239, ptr %20, align 4
  call void @_ZN3HIR4Enum12ValueVariantD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %31) #10
  br label %240

240:                                              ; preds = %236, %232, %228
  call void @llvm.lifetime.end.p0(i64 88, ptr %31) #10
  br label %241

241:                                              ; preds = %240, %224
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #10
  br label %242

242:                                              ; preds = %241, %202
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #10
  br label %258

243:                                              ; preds = %193
  call void @llvm.lifetime.start.p0(i64 40, ptr %32) #10
  %244 = getelementptr inbounds %"struct.HIR::Enum::Class::Data_Value", ptr %33, i32 0, i32 0
  call void @_ZNSt6vectorIN3HIR4Enum12ValueVariantESaIS2_EEC2EOS4_(ptr noundef nonnull align 8 dereferenceable(24) %244, ptr noundef nonnull align 8 dereferenceable(24) %25) #10
  %245 = getelementptr inbounds %"struct.HIR::Enum::Class::Data_Value", ptr %33, i32 0, i32 1
  store i8 0, ptr %245, align 8, !tbaa !45
  invoke void @_ZN3HIR4Enum5Class10make_ValueENS1_10Data_ValueE(ptr dead_on_unwind writable sret(%"class.HIR::Enum::Class") align 8 %32, ptr noundef %33)
          to label %246 unwind label %249

246:                                              ; preds = %243
  %247 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3HIR4Enum5ClassaSEOS1_(ptr noundef nonnull align 8 dereferenceable(40) %24, ptr noundef nonnull align 8 dereferenceable(40) %32)
          to label %248 unwind label %253

248:                                              ; preds = %246
  call void @_ZN3HIR4Enum5ClassD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %32) #10
  call void @_ZN3HIR4Enum5Class10Data_ValueD2Ev(ptr noundef nonnull align 8 dereferenceable(25) %33) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %32) #10
  call void @_ZNSt6vectorIN3HIR4Enum12ValueVariantESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %25) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %25) #10
  br label %608

249:                                              ; preds = %243
  %250 = landingpad { ptr, i32 }
          cleanup
  %251 = extractvalue { ptr, i32 } %250, 0
  store ptr %251, ptr %19, align 8
  %252 = extractvalue { ptr, i32 } %250, 1
  store i32 %252, ptr %20, align 4
  br label %257

253:                                              ; preds = %246
  %254 = landingpad { ptr, i32 }
          cleanup
  %255 = extractvalue { ptr, i32 } %254, 0
  store ptr %255, ptr %19, align 8
  %256 = extractvalue { ptr, i32 } %254, 1
  store i32 %256, ptr %20, align 4
  call void @_ZN3HIR4Enum5ClassD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %32) #10
  br label %257

257:                                              ; preds = %253, %249
  call void @_ZN3HIR4Enum5Class10Data_ValueD2Ev(ptr noundef nonnull align 8 dereferenceable(25) %33) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %32) #10
  br label %258

258:                                              ; preds = %257, %242
  call void @_ZNSt6vectorIN3HIR4Enum12ValueVariantESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %25) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %25) #10
  br label %622

259:                                              ; preds = %178, %175
  call void @llvm.lifetime.start.p0(i64 24, ptr %34) #10
  call void @_ZNSt6vectorIN3HIR4Enum11DataVariantESaIS2_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %34) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #10
  %260 = load ptr, ptr %7, align 8, !tbaa !5
  %261 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3AST4Enum8variantsEv(ptr noundef nonnull align 8 dereferenceable(80) %260)
          to label %262 unwind label %272

262:                                              ; preds = %259
  store ptr %261, ptr %35, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #10
  %263 = load ptr, ptr %35, align 8, !tbaa !5
  %264 = call ptr @_ZNKSt6vectorIN3AST11EnumVariantESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %263) #10
  %265 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.421", ptr %36, i32 0, i32 0
  store ptr %264, ptr %265, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #10
  %266 = load ptr, ptr %35, align 8, !tbaa !5
  %267 = call ptr @_ZNKSt6vectorIN3AST11EnumVariantESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %266) #10
  %268 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.421", ptr %37, i32 0, i32 0
  store ptr %267, ptr %268, align 8
  br label %269

269:                                              ; preds = %587, %262
  %270 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3AST11EnumVariantESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %36, ptr noundef nonnull align 8 dereferenceable(8) %37) #10
  br i1 %270, label %276, label %271

271:                                              ; preds = %269
  store i32 9, ptr %38, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #10
  br label %591

272:                                              ; preds = %259
  %273 = landingpad { ptr, i32 }
          cleanup
  %274 = extractvalue { ptr, i32 } %273, 0
  store ptr %274, ptr %19, align 8
  %275 = extractvalue { ptr, i32 } %273, 1
  store i32 %275, ptr %20, align 4
  br label %590

276:                                              ; preds = %269
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #10
  %277 = call noundef nonnull align 8 dereferenceable(64) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3AST11EnumVariantESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %36) #10
  store ptr %277, ptr %39, align 8, !tbaa !5
  %278 = load ptr, ptr %39, align 8, !tbaa !5
  %279 = getelementptr inbounds %"struct.AST::EnumVariant", ptr %278, i32 0, i32 2
  %280 = invoke noundef zeroext i1 @_ZNK3AST15EnumVariantData8is_ValueEv(ptr noundef nonnull align 8 dereferenceable(32) %279)
          to label %281 unwind label %291

281:                                              ; preds = %276
  br i1 %280, label %282, label %308

282:                                              ; preds = %281
  call void @llvm.lifetime.start.p0(i64 24, ptr %40) #10
  %283 = getelementptr inbounds %"struct.HIR::Enum::DataVariant", ptr %40, i32 0, i32 0
  %284 = load ptr, ptr %39, align 8, !tbaa !5
  %285 = getelementptr inbounds %"struct.AST::EnumVariant", ptr %284, i32 0, i32 1
  invoke void @_ZN8RcStringC2ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %283, ptr noundef nonnull align 8 dereferenceable(8) %285)
          to label %286 unwind label %295

286:                                              ; preds = %282
  %287 = getelementptr inbounds %"struct.HIR::Enum::DataVariant", ptr %40, i32 0, i32 1
  store i8 0, ptr %287, align 8, !tbaa !51
  %288 = getelementptr inbounds %"struct.HIR::Enum::DataVariant", ptr %40, i32 0, i32 2
  invoke void @_ZN3HIR7TypeRef8new_unitEv(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %288)
          to label %289 unwind label %299

289:                                              ; preds = %286
  invoke void @_ZNSt6vectorIN3HIR4Enum11DataVariantESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %34, ptr noundef nonnull align 8 dereferenceable(24) %40)
          to label %290 unwind label %303

290:                                              ; preds = %289
  call void @_ZN3HIR4Enum11DataVariantD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %40) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %40) #10
  br label %586

291:                                              ; preds = %276
  %292 = landingpad { ptr, i32 }
          cleanup
  %293 = extractvalue { ptr, i32 } %292, 0
  store ptr %293, ptr %19, align 8
  %294 = extractvalue { ptr, i32 } %292, 1
  store i32 %294, ptr %20, align 4
  br label %589

295:                                              ; preds = %282
  %296 = landingpad { ptr, i32 }
          cleanup
  %297 = extractvalue { ptr, i32 } %296, 0
  store ptr %297, ptr %19, align 8
  %298 = extractvalue { ptr, i32 } %296, 1
  store i32 %298, ptr %20, align 4
  br label %307

299:                                              ; preds = %286
  %300 = landingpad { ptr, i32 }
          cleanup
  %301 = extractvalue { ptr, i32 } %300, 0
  store ptr %301, ptr %19, align 8
  %302 = extractvalue { ptr, i32 } %300, 1
  store i32 %302, ptr %20, align 4
  call void @_ZN8RcStringD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %283) #10
  br label %307

303:                                              ; preds = %289
  %304 = landingpad { ptr, i32 }
          cleanup
  %305 = extractvalue { ptr, i32 } %304, 0
  store ptr %305, ptr %19, align 8
  %306 = extractvalue { ptr, i32 } %304, 1
  store i32 %306, ptr %20, align 4
  call void @_ZN3HIR4Enum11DataVariantD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %40) #10
  br label %307

307:                                              ; preds = %303, %299, %295
  call void @llvm.lifetime.end.p0(i64 24, ptr %40) #10
  br label %589

308:                                              ; preds = %281
  call void @llvm.lifetime.start.p0(i64 32, ptr %41) #10
  invoke void @_ZN3HIR6Struct4DataC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41)
          to label %309 unwind label %328

309:                                              ; preds = %308
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #10
  %310 = load ptr, ptr %39, align 8, !tbaa !5
  %311 = getelementptr inbounds %"struct.AST::EnumVariant", ptr %310, i32 0, i32 2
  %312 = invoke noundef ptr @_ZNK3AST15EnumVariantData9opt_TupleEv(ptr noundef nonnull align 8 dereferenceable(32) %311)
          to label %313 unwind label %332

313:                                              ; preds = %309
  store ptr %312, ptr %42, align 8, !tbaa !5
  %314 = load ptr, ptr %42, align 8, !tbaa !5
  %315 = icmp ne ptr %314, null
  br i1 %315, label %316, label %379

316:                                              ; preds = %313
  call void @llvm.lifetime.start.p0(i64 24, ptr %43) #10
  call void @_ZNSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %43) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #10
  %317 = load ptr, ptr %42, align 8, !tbaa !5
  %318 = getelementptr inbounds %"struct.AST::EnumVariantData::Data_Tuple", ptr %317, i32 0, i32 0
  store ptr %318, ptr %44, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #10
  %319 = load ptr, ptr %44, align 8, !tbaa !5
  %320 = call ptr @_ZNKSt6vectorIN3AST9TupleItemESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %319) #10
  %321 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.393", ptr %45, i32 0, i32 0
  store ptr %320, ptr %321, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #10
  %322 = load ptr, ptr %44, align 8, !tbaa !5
  %323 = call ptr @_ZNKSt6vectorIN3AST9TupleItemESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %322) #10
  %324 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.393", ptr %46, i32 0, i32 0
  store ptr %323, ptr %324, align 8
  br label %325

325:                                              ; preds = %344, %316
  %326 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3AST9TupleItemESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %45, ptr noundef nonnull align 8 dereferenceable(8) %46) #10
  br i1 %326, label %336, label %327

327:                                              ; preds = %325
  store i32 11, ptr %38, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #10
  br label %365

328:                                              ; preds = %308
  %329 = landingpad { ptr, i32 }
          cleanup
  %330 = extractvalue { ptr, i32 } %329, 0
  store ptr %330, ptr %19, align 8
  %331 = extractvalue { ptr, i32 } %329, 1
  store i32 %331, ptr %20, align 4
  br label %585

332:                                              ; preds = %309
  %333 = landingpad { ptr, i32 }
          cleanup
  %334 = extractvalue { ptr, i32 } %333, 0
  store ptr %334, ptr %19, align 8
  %335 = extractvalue { ptr, i32 } %333, 1
  store i32 %335, ptr %20, align 4
  br label %502

336:                                              ; preds = %325
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #10
  %337 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3AST9TupleItemESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %45) #10
  store ptr %337, ptr %47, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %48) #10
  invoke void @_ZN3HIR9Publicity10new_globalEv(ptr dead_on_unwind writable sret(%"class.HIR::Publicity") align 8 %49)
          to label %338 unwind label %346

338:                                              ; preds = %336
  %339 = load ptr, ptr %47, align 8, !tbaa !5
  %340 = getelementptr inbounds %"struct.AST::TupleItem", ptr %339, i32 0, i32 2
  invoke void @_Z13LowerHIR_TypeRK7TypeRef(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %50, ptr noundef nonnull align 8 dereferenceable(120) %340)
          to label %341 unwind label %350

341:                                              ; preds = %338
  invoke void @_ZN12_GLOBAL__N_110new_visentIN3HIR7TypeRefEEENS1_6VisEntIT_EENS1_9PublicityES4_(ptr dead_on_unwind writable sret(%"struct.HIR::VisEnt") align 8 %48, ptr noundef %49, ptr noundef %50)
          to label %342 unwind label %354

342:                                              ; preds = %341
  invoke void @_ZNSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(24) %43, ptr noundef nonnull align 8 dereferenceable(24) %48)
          to label %343 unwind label %358

343:                                              ; preds = %342
  call void @_ZN3HIR6VisEntINS_7TypeRefEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %48) #10
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %50) #10
  call void @_ZN3HIR9PublicityD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %49) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %48) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #10
  br label %344

344:                                              ; preds = %343
  %345 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3AST9TupleItemESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %45) #10
  br label %325

346:                                              ; preds = %336
  %347 = landingpad { ptr, i32 }
          cleanup
  %348 = extractvalue { ptr, i32 } %347, 0
  store ptr %348, ptr %19, align 8
  %349 = extractvalue { ptr, i32 } %347, 1
  store i32 %349, ptr %20, align 4
  br label %364

350:                                              ; preds = %338
  %351 = landingpad { ptr, i32 }
          cleanup
  %352 = extractvalue { ptr, i32 } %351, 0
  store ptr %352, ptr %19, align 8
  %353 = extractvalue { ptr, i32 } %351, 1
  store i32 %353, ptr %20, align 4
  br label %363

354:                                              ; preds = %341
  %355 = landingpad { ptr, i32 }
          cleanup
  %356 = extractvalue { ptr, i32 } %355, 0
  store ptr %356, ptr %19, align 8
  %357 = extractvalue { ptr, i32 } %355, 1
  store i32 %357, ptr %20, align 4
  br label %362

358:                                              ; preds = %342
  %359 = landingpad { ptr, i32 }
          cleanup
  %360 = extractvalue { ptr, i32 } %359, 0
  store ptr %360, ptr %19, align 8
  %361 = extractvalue { ptr, i32 } %359, 1
  store i32 %361, ptr %20, align 4
  call void @_ZN3HIR6VisEntINS_7TypeRefEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %48) #10
  br label %362

362:                                              ; preds = %358, %354
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %50) #10
  br label %363

363:                                              ; preds = %362, %350
  call void @_ZN3HIR9PublicityD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %49) #10
  br label %364

364:                                              ; preds = %363, %346
  call void @llvm.lifetime.end.p0(i64 24, ptr %48) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #10
  br label %378

365:                                              ; preds = %327
  call void @llvm.lifetime.start.p0(i64 32, ptr %51) #10
  call void @_ZNSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EEC2EOS5_(ptr noundef nonnull align 8 dereferenceable(24) %52, ptr noundef nonnull align 8 dereferenceable(24) %43) #10
  invoke void @_ZN3HIR6Struct4Data10make_TupleESt6vectorINS_6VisEntINS_7TypeRefEEESaIS5_EE(ptr dead_on_unwind writable sret(%"class.HIR::Struct::Data") align 8 %51, ptr noundef %52)
          to label %366 unwind label %369

366:                                              ; preds = %365
  %367 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZN3HIR6Struct4DataaSEOS1_(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef nonnull align 8 dereferenceable(32) %51)
          to label %368 unwind label %373

368:                                              ; preds = %366
  call void @_ZN3HIR6Struct4DataD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #10
  call void @_ZNSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %52) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %51) #10
  call void @_ZNSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %43) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %43) #10
  br label %457

369:                                              ; preds = %365
  %370 = landingpad { ptr, i32 }
          cleanup
  %371 = extractvalue { ptr, i32 } %370, 0
  store ptr %371, ptr %19, align 8
  %372 = extractvalue { ptr, i32 } %370, 1
  store i32 %372, ptr %20, align 4
  br label %377

373:                                              ; preds = %366
  %374 = landingpad { ptr, i32 }
          cleanup
  %375 = extractvalue { ptr, i32 } %374, 0
  store ptr %375, ptr %19, align 8
  %376 = extractvalue { ptr, i32 } %374, 1
  store i32 %376, ptr %20, align 4
  call void @_ZN3HIR6Struct4DataD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %51) #10
  br label %377

377:                                              ; preds = %373, %369
  call void @_ZNSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %52) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %51) #10
  br label %378

378:                                              ; preds = %377, %364
  call void @_ZNSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %43) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %43) #10
  br label %502

379:                                              ; preds = %313
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #10
  %380 = load ptr, ptr %39, align 8, !tbaa !5
  %381 = getelementptr inbounds %"struct.AST::EnumVariant", ptr %380, i32 0, i32 2
  %382 = invoke noundef ptr @_ZNK3AST15EnumVariantData10opt_StructEv(ptr noundef nonnull align 8 dereferenceable(32) %381)
          to label %383 unwind label %398

383:                                              ; preds = %379
  store ptr %382, ptr %53, align 8, !tbaa !5
  %384 = load ptr, ptr %53, align 8, !tbaa !5
  %385 = icmp ne ptr %384, null
  br i1 %385, label %386, label %453

386:                                              ; preds = %383
  call void @llvm.lifetime.start.p0(i64 24, ptr %54) #10
  call void @_ZNSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %54) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #10
  %387 = load ptr, ptr %53, align 8, !tbaa !5
  %388 = getelementptr inbounds %"struct.AST::EnumVariantData::Data_Struct", ptr %387, i32 0, i32 0
  store ptr %388, ptr %55, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #10
  %389 = load ptr, ptr %55, align 8, !tbaa !5
  %390 = call ptr @_ZNKSt6vectorIN3AST10StructItemESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %389) #10
  %391 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.394", ptr %56, i32 0, i32 0
  store ptr %390, ptr %391, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #10
  %392 = load ptr, ptr %55, align 8, !tbaa !5
  %393 = call ptr @_ZNKSt6vectorIN3AST10StructItemESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %392) #10
  %394 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.394", ptr %57, i32 0, i32 0
  store ptr %393, ptr %394, align 8
  br label %395

395:                                              ; preds = %413, %386
  %396 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3AST10StructItemESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %56, ptr noundef nonnull align 8 dereferenceable(8) %57) #10
  br i1 %396, label %402, label %397

397:                                              ; preds = %395
  store i32 13, ptr %38, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #10
  br label %439

398:                                              ; preds = %453, %379
  %399 = landingpad { ptr, i32 }
          cleanup
  %400 = extractvalue { ptr, i32 } %399, 0
  store ptr %400, ptr %19, align 8
  %401 = extractvalue { ptr, i32 } %399, 1
  store i32 %401, ptr %20, align 4
  br label %456

402:                                              ; preds = %395
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #10
  %403 = call noundef nonnull align 8 dereferenceable(192) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3AST10StructItemESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %56) #10
  store ptr %403, ptr %58, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %59) #10
  %404 = load ptr, ptr %58, align 8, !tbaa !5
  %405 = getelementptr inbounds %"struct.AST::StructItem", ptr %404, i32 0, i32 2
  call void @llvm.lifetime.start.p0(i64 24, ptr %60) #10
  invoke void @_ZN3HIR9Publicity10new_globalEv(ptr dead_on_unwind writable sret(%"class.HIR::Publicity") align 8 %61)
          to label %406 unwind label %415

406:                                              ; preds = %402
  %407 = load ptr, ptr %58, align 8, !tbaa !5
  %408 = getelementptr inbounds %"struct.AST::StructItem", ptr %407, i32 0, i32 3
  invoke void @_Z13LowerHIR_TypeRK7TypeRef(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %62, ptr noundef nonnull align 8 dereferenceable(120) %408)
          to label %409 unwind label %419

409:                                              ; preds = %406
  invoke void @_ZN12_GLOBAL__N_110new_visentIN3HIR7TypeRefEEENS1_6VisEntIT_EENS1_9PublicityES4_(ptr dead_on_unwind writable sret(%"struct.HIR::VisEnt") align 8 %60, ptr noundef %61, ptr noundef %62)
          to label %410 unwind label %423

410:                                              ; preds = %409
  invoke void @_ZSt9make_pairIRK8RcStringN3HIR6VisEntINS3_7TypeRefEEEESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS8_INS9_IT0_E4typeEE6__typeEEOSA_OSF_(ptr dead_on_unwind writable sret(%"struct.std::pair.395") align 8 %59, ptr noundef nonnull align 8 dereferenceable(8) %405, ptr noundef nonnull align 8 dereferenceable(24) %60)
          to label %411 unwind label %427

411:                                              ; preds = %410
  invoke void @_ZNSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(24) %54, ptr noundef nonnull align 8 dereferenceable(32) %59)
          to label %412 unwind label %431

412:                                              ; preds = %411
  call void @_ZNSt4pairI8RcStringN3HIR6VisEntINS1_7TypeRefEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #10
  call void @_ZN3HIR6VisEntINS_7TypeRefEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %60) #10
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %62) #10
  call void @_ZN3HIR9PublicityD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %61) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %60) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %59) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #10
  br label %413

413:                                              ; preds = %412
  %414 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3AST10StructItemESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %56) #10
  br label %395

415:                                              ; preds = %402
  %416 = landingpad { ptr, i32 }
          cleanup
  %417 = extractvalue { ptr, i32 } %416, 0
  store ptr %417, ptr %19, align 8
  %418 = extractvalue { ptr, i32 } %416, 1
  store i32 %418, ptr %20, align 4
  br label %438

419:                                              ; preds = %406
  %420 = landingpad { ptr, i32 }
          cleanup
  %421 = extractvalue { ptr, i32 } %420, 0
  store ptr %421, ptr %19, align 8
  %422 = extractvalue { ptr, i32 } %420, 1
  store i32 %422, ptr %20, align 4
  br label %437

423:                                              ; preds = %409
  %424 = landingpad { ptr, i32 }
          cleanup
  %425 = extractvalue { ptr, i32 } %424, 0
  store ptr %425, ptr %19, align 8
  %426 = extractvalue { ptr, i32 } %424, 1
  store i32 %426, ptr %20, align 4
  br label %436

427:                                              ; preds = %410
  %428 = landingpad { ptr, i32 }
          cleanup
  %429 = extractvalue { ptr, i32 } %428, 0
  store ptr %429, ptr %19, align 8
  %430 = extractvalue { ptr, i32 } %428, 1
  store i32 %430, ptr %20, align 4
  br label %435

431:                                              ; preds = %411
  %432 = landingpad { ptr, i32 }
          cleanup
  %433 = extractvalue { ptr, i32 } %432, 0
  store ptr %433, ptr %19, align 8
  %434 = extractvalue { ptr, i32 } %432, 1
  store i32 %434, ptr %20, align 4
  call void @_ZNSt4pairI8RcStringN3HIR6VisEntINS1_7TypeRefEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #10
  br label %435

435:                                              ; preds = %431, %427
  call void @_ZN3HIR6VisEntINS_7TypeRefEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %60) #10
  br label %436

436:                                              ; preds = %435, %423
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %62) #10
  br label %437

437:                                              ; preds = %436, %419
  call void @_ZN3HIR9PublicityD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %61) #10
  br label %438

438:                                              ; preds = %437, %415
  call void @llvm.lifetime.end.p0(i64 24, ptr %60) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %59) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #10
  br label %452

439:                                              ; preds = %397
  call void @llvm.lifetime.start.p0(i64 32, ptr %63) #10
  call void @_ZNSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EEC2EOS8_(ptr noundef nonnull align 8 dereferenceable(24) %64, ptr noundef nonnull align 8 dereferenceable(24) %54) #10
  invoke void @_ZN3HIR6Struct4Data10make_NamedESt6vectorISt4pairI8RcStringNS_6VisEntINS_7TypeRefEEEESaIS8_EE(ptr dead_on_unwind writable sret(%"class.HIR::Struct::Data") align 8 %63, ptr noundef %64)
          to label %440 unwind label %443

440:                                              ; preds = %439
  %441 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZN3HIR6Struct4DataaSEOS1_(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef nonnull align 8 dereferenceable(32) %63)
          to label %442 unwind label %447

442:                                              ; preds = %440
  call void @_ZN3HIR6Struct4DataD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #10
  call void @_ZNSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %64) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %63) #10
  call void @_ZNSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %54) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %54) #10
  br label %455

443:                                              ; preds = %439
  %444 = landingpad { ptr, i32 }
          cleanup
  %445 = extractvalue { ptr, i32 } %444, 0
  store ptr %445, ptr %19, align 8
  %446 = extractvalue { ptr, i32 } %444, 1
  store i32 %446, ptr %20, align 4
  br label %451

447:                                              ; preds = %440
  %448 = landingpad { ptr, i32 }
          cleanup
  %449 = extractvalue { ptr, i32 } %448, 0
  store ptr %449, ptr %19, align 8
  %450 = extractvalue { ptr, i32 } %448, 1
  store i32 %450, ptr %20, align 4
  call void @_ZN3HIR6Struct4DataD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %63) #10
  br label %451

451:                                              ; preds = %447, %443
  call void @_ZNSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %64) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %63) #10
  br label %452

452:                                              ; preds = %451, %438
  call void @_ZNSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %54) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %54) #10
  br label %456

453:                                              ; preds = %383
  %454 = call ptr @__cxa_allocate_exception(i64 8) #10
  store ptr @.str.6, ptr %454, align 16, !tbaa !5
  invoke void @__cxa_throw(ptr %454, ptr @_ZTIPKc, ptr null) #12
          to label %630 unwind label %398

455:                                              ; preds = %442
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #10
  br label %457

456:                                              ; preds = %452, %398
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #10
  br label %502

457:                                              ; preds = %455, %368
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %66) #10
  call void @llvm.lifetime.start.p0(i64 376, ptr %67) #10
  invoke void @_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(112) %67)
          to label %458 unwind label %503

458:                                              ; preds = %457
  %459 = getelementptr inbounds %"class.HIR::ItemPath", ptr %1, i32 0, i32 4
  %460 = invoke noundef nonnull align 8 dereferenceable(112) ptr @_ZStlsINSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEEPKcEOT_S9_RKT0_(ptr noundef nonnull align 8 dereferenceable(112) %67, ptr noundef nonnull align 8 dereferenceable(8) %459)
          to label %461 unwind label %507

461:                                              ; preds = %458
  %462 = invoke noundef nonnull align 8 dereferenceable(112) ptr @_ZStlsINSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEEA2_cEOT_S8_RKT0_(ptr noundef nonnull align 8 dereferenceable(112) %460, ptr noundef nonnull align 1 dereferenceable(2) @.str.34)
          to label %463 unwind label %507

463:                                              ; preds = %461
  %464 = load ptr, ptr %39, align 8, !tbaa !5
  %465 = getelementptr inbounds %"struct.AST::EnumVariant", ptr %464, i32 0, i32 1
  %466 = invoke noundef nonnull align 8 dereferenceable(112) ptr @_ZStlsINSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEE8RcStringEOT_S8_RKT0_(ptr noundef nonnull align 8 dereferenceable(112) %462, ptr noundef nonnull align 8 dereferenceable(8) %465)
          to label %467 unwind label %507

467:                                              ; preds = %463
  invoke void @_ZNKSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %66, ptr noundef nonnull align 8 dereferenceable(112) %466)
          to label %468 unwind label %507

468:                                              ; preds = %467
  invoke void @_ZN8RcString12new_internedERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%class.RcString) align 8 %65, ptr noundef nonnull align 8 dereferenceable(32) %66)
          to label %469 unwind label %511

469:                                              ; preds = %468
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #10
  call void @_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(112) %67) #10
  call void @llvm.lifetime.end.p0(i64 376, ptr %67) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %66) #10
  invoke void @_ZN8RcStringC2ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %68, ptr noundef nonnull align 8 dereferenceable(8) %65)
          to label %470 unwind label %517

470:                                              ; preds = %469
  %471 = load ptr, ptr %7, align 8, !tbaa !5
  %472 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZNK3AST4Enum6paramsEv(ptr noundef nonnull align 8 dereferenceable(80) %471)
          to label %473 unwind label %521

473:                                              ; preds = %470
  invoke void @_Z22LowerHIR_GenericParamsRKN3AST13GenericParamsEPb(ptr dead_on_unwind writable sret(%"class.HIR::GenericParams") align 8 %70, ptr noundef nonnull align 8 dereferenceable(48) %472, ptr noundef null)
          to label %474 unwind label %521

474:                                              ; preds = %473
  call void @_ZN3HIR6Struct4DataC2EOS1_(ptr noundef nonnull align 8 dereferenceable(32) %71, ptr noundef nonnull align 8 dereferenceable(32) %41) #10
  invoke void @_ZN3HIR6StructC2ENS_13GenericParamsENS0_4ReprENS0_4DataE(ptr noundef nonnull align 8 dereferenceable(252) %69, ptr noundef %70, i32 noundef 0, ptr noundef %71)
          to label %475 unwind label %525

475:                                              ; preds = %474
  invoke void @_ZNKSt8functionIFv8RcStringN3HIR6StructEEEclES0_S2_(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef %68, ptr noundef %69)
          to label %476 unwind label %529

476:                                              ; preds = %475
  call void @_ZN3HIR6StructD2Ev(ptr noundef nonnull align 8 dereferenceable(252) %69) #10
  call void @_ZN3HIR6Struct4DataD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %71) #10
  call void @_ZN3HIR13GenericParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %70) #10
  call void @_ZN8RcStringD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %68) #10
  call void @llvm.lifetime.start.p0(i64 56, ptr %72) #10
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %72, ptr align 8 %1, i64 56, i1 false), !tbaa.struct !54
  %477 = invoke noundef ptr @_ZNK8RcString5c_strEv(ptr noundef nonnull align 8 dereferenceable(8) %65)
          to label %478 unwind label %535

478:                                              ; preds = %476
  %479 = getelementptr inbounds %"class.HIR::ItemPath", ptr %72, i32 0, i32 4
  store ptr %477, ptr %479, align 8, !tbaa !55
  call void @llvm.lifetime.start.p0(i64 88, ptr %73) #10
  invoke void @_ZNK3HIR8ItemPath13get_full_pathEv(ptr dead_on_unwind writable sret(%"class.HIR::Path") align 8 %73, ptr noundef nonnull align 8 dereferenceable(56) %72)
          to label %480 unwind label %539

480:                                              ; preds = %478
  call void @llvm.lifetime.start.p0(i64 24, ptr %74) #10
  invoke void @_ZNK3HIR13GenericParams15make_nop_paramsEjb(ptr dead_on_unwind writable sret(%"struct.HIR::PathParams") align 8 %74, ptr noundef nonnull align 8 dereferenceable(96) %23, i32 noundef 0, i1 noundef zeroext false)
          to label %481 unwind label %543

481:                                              ; preds = %480
  %482 = getelementptr inbounds %"class.HIR::Path", ptr %73, i32 0, i32 0
  %483 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZN3HIR4Path4Data10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(88) %482)
          to label %484 unwind label %547

484:                                              ; preds = %481
  %485 = getelementptr inbounds %"class.HIR::GenericPath", ptr %483, i32 0, i32 1
  %486 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3HIR10PathParamsaSEOS0_(ptr noundef nonnull align 8 dereferenceable(24) %485, ptr noundef nonnull align 8 dereferenceable(24) %74)
          to label %487 unwind label %547

487:                                              ; preds = %484
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %74) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %74) #10
  call void @llvm.lifetime.start.p0(i64 24, ptr %75) #10
  %488 = getelementptr inbounds %"struct.HIR::Enum::DataVariant", ptr %75, i32 0, i32 0
  %489 = load ptr, ptr %39, align 8, !tbaa !5
  %490 = getelementptr inbounds %"struct.AST::EnumVariant", ptr %489, i32 0, i32 1
  invoke void @_ZN8RcStringC2ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %488, ptr noundef nonnull align 8 dereferenceable(8) %490)
          to label %491 unwind label %552

491:                                              ; preds = %487
  store i1 true, ptr %78, align 1
  %492 = getelementptr inbounds %"struct.HIR::Enum::DataVariant", ptr %75, i32 0, i32 1
  %493 = load ptr, ptr %39, align 8, !tbaa !5
  %494 = getelementptr inbounds %"struct.AST::EnumVariant", ptr %493, i32 0, i32 2
  %495 = invoke noundef zeroext i1 @_ZNK3AST15EnumVariantData9is_StructEv(ptr noundef nonnull align 8 dereferenceable(32) %494)
          to label %496 unwind label %556

496:                                              ; preds = %491
  %497 = zext i1 %495 to i8
  store i8 %497, ptr %492, align 8, !tbaa !51
  %498 = getelementptr inbounds %"struct.HIR::Enum::DataVariant", ptr %75, i32 0, i32 2
  call void @_ZN3HIR4PathC2EOS0_(ptr noundef nonnull align 8 dereferenceable(88) %76, ptr noundef nonnull align 8 dereferenceable(88) %73) #10
  invoke void @_ZN3HIR15TypePathBindingC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %77)
          to label %499 unwind label %560

499:                                              ; preds = %496
  invoke void @_ZN3HIR7TypeRef8new_pathENS_4PathENS_15TypePathBindingE(ptr dead_on_unwind writable sret(%"class.HIR::TypeRef") align 8 %498, ptr noundef %76, ptr noundef %77)
          to label %500 unwind label %564

500:                                              ; preds = %499
  store i1 false, ptr %78, align 1
  invoke void @_ZNSt6vectorIN3HIR4Enum11DataVariantESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %34, ptr noundef nonnull align 8 dereferenceable(24) %75)
          to label %501 unwind label %568

501:                                              ; preds = %500
  call void @_ZN3HIR4Enum11DataVariantD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %75) #10
  call void @_ZN3HIR15TypePathBindingD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %77) #10
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %76) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %75) #10
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %73) #10
  call void @llvm.lifetime.end.p0(i64 88, ptr %73) #10
  call void @llvm.lifetime.end.p0(i64 56, ptr %72) #10
  call void @_ZN8RcStringD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %65) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #10
  call void @_ZN3HIR6Struct4DataD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %41) #10
  br label %586

502:                                              ; preds = %456, %378, %332
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #10
  br label %584

503:                                              ; preds = %457
  %504 = landingpad { ptr, i32 }
          cleanup
  %505 = extractvalue { ptr, i32 } %504, 0
  store ptr %505, ptr %19, align 8
  %506 = extractvalue { ptr, i32 } %504, 1
  store i32 %506, ptr %20, align 4
  br label %516

507:                                              ; preds = %467, %463, %461, %458
  %508 = landingpad { ptr, i32 }
          cleanup
  %509 = extractvalue { ptr, i32 } %508, 0
  store ptr %509, ptr %19, align 8
  %510 = extractvalue { ptr, i32 } %508, 1
  store i32 %510, ptr %20, align 4
  br label %515

511:                                              ; preds = %468
  %512 = landingpad { ptr, i32 }
          cleanup
  %513 = extractvalue { ptr, i32 } %512, 0
  store ptr %513, ptr %19, align 8
  %514 = extractvalue { ptr, i32 } %512, 1
  store i32 %514, ptr %20, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #10
  br label %515

515:                                              ; preds = %511, %507
  call void @_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(112) %67) #10
  br label %516

516:                                              ; preds = %515, %503
  call void @llvm.lifetime.end.p0(i64 376, ptr %67) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %66) #10
  br label %583

517:                                              ; preds = %469
  %518 = landingpad { ptr, i32 }
          cleanup
  %519 = extractvalue { ptr, i32 } %518, 0
  store ptr %519, ptr %19, align 8
  %520 = extractvalue { ptr, i32 } %518, 1
  store i32 %520, ptr %20, align 4
  br label %582

521:                                              ; preds = %473, %470
  %522 = landingpad { ptr, i32 }
          cleanup
  %523 = extractvalue { ptr, i32 } %522, 0
  store ptr %523, ptr %19, align 8
  %524 = extractvalue { ptr, i32 } %522, 1
  store i32 %524, ptr %20, align 4
  br label %534

525:                                              ; preds = %474
  %526 = landingpad { ptr, i32 }
          cleanup
  %527 = extractvalue { ptr, i32 } %526, 0
  store ptr %527, ptr %19, align 8
  %528 = extractvalue { ptr, i32 } %526, 1
  store i32 %528, ptr %20, align 4
  br label %533

529:                                              ; preds = %475
  %530 = landingpad { ptr, i32 }
          cleanup
  %531 = extractvalue { ptr, i32 } %530, 0
  store ptr %531, ptr %19, align 8
  %532 = extractvalue { ptr, i32 } %530, 1
  store i32 %532, ptr %20, align 4
  call void @_ZN3HIR6StructD2Ev(ptr noundef nonnull align 8 dereferenceable(252) %69) #10
  br label %533

533:                                              ; preds = %529, %525
  call void @_ZN3HIR6Struct4DataD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %71) #10
  call void @_ZN3HIR13GenericParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %70) #10
  br label %534

534:                                              ; preds = %533, %521
  call void @_ZN8RcStringD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %68) #10
  br label %582

535:                                              ; preds = %476
  %536 = landingpad { ptr, i32 }
          cleanup
  %537 = extractvalue { ptr, i32 } %536, 0
  store ptr %537, ptr %19, align 8
  %538 = extractvalue { ptr, i32 } %536, 1
  store i32 %538, ptr %20, align 4
  br label %581

539:                                              ; preds = %478
  %540 = landingpad { ptr, i32 }
          cleanup
  %541 = extractvalue { ptr, i32 } %540, 0
  store ptr %541, ptr %19, align 8
  %542 = extractvalue { ptr, i32 } %540, 1
  store i32 %542, ptr %20, align 4
  br label %580

543:                                              ; preds = %480
  %544 = landingpad { ptr, i32 }
          cleanup
  %545 = extractvalue { ptr, i32 } %544, 0
  store ptr %545, ptr %19, align 8
  %546 = extractvalue { ptr, i32 } %544, 1
  store i32 %546, ptr %20, align 4
  br label %551

547:                                              ; preds = %484, %481
  %548 = landingpad { ptr, i32 }
          cleanup
  %549 = extractvalue { ptr, i32 } %548, 0
  store ptr %549, ptr %19, align 8
  %550 = extractvalue { ptr, i32 } %548, 1
  store i32 %550, ptr %20, align 4
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %74) #10
  br label %551

551:                                              ; preds = %547, %543
  call void @llvm.lifetime.end.p0(i64 24, ptr %74) #10
  br label %579

552:                                              ; preds = %487
  %553 = landingpad { ptr, i32 }
          cleanup
  %554 = extractvalue { ptr, i32 } %553, 0
  store ptr %554, ptr %19, align 8
  %555 = extractvalue { ptr, i32 } %553, 1
  store i32 %555, ptr %20, align 4
  br label %578

556:                                              ; preds = %491
  %557 = landingpad { ptr, i32 }
          cleanup
  %558 = extractvalue { ptr, i32 } %557, 0
  store ptr %558, ptr %19, align 8
  %559 = extractvalue { ptr, i32 } %557, 1
  store i32 %559, ptr %20, align 4
  br label %574

560:                                              ; preds = %496
  %561 = landingpad { ptr, i32 }
          cleanup
  %562 = extractvalue { ptr, i32 } %561, 0
  store ptr %562, ptr %19, align 8
  %563 = extractvalue { ptr, i32 } %561, 1
  store i32 %563, ptr %20, align 4
  br label %573

564:                                              ; preds = %499
  %565 = landingpad { ptr, i32 }
          cleanup
  %566 = extractvalue { ptr, i32 } %565, 0
  store ptr %566, ptr %19, align 8
  %567 = extractvalue { ptr, i32 } %565, 1
  store i32 %567, ptr %20, align 4
  br label %572

568:                                              ; preds = %500
  %569 = landingpad { ptr, i32 }
          cleanup
  %570 = extractvalue { ptr, i32 } %569, 0
  store ptr %570, ptr %19, align 8
  %571 = extractvalue { ptr, i32 } %569, 1
  store i32 %571, ptr %20, align 4
  call void @_ZN3HIR4Enum11DataVariantD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %75) #10
  br label %572

572:                                              ; preds = %568, %564
  call void @_ZN3HIR15TypePathBindingD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %77) #10
  br label %573

573:                                              ; preds = %572, %560
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %76) #10
  br label %574

574:                                              ; preds = %573, %556
  %575 = load i1, ptr %78, align 1
  br i1 %575, label %576, label %577

576:                                              ; preds = %574
  call void @_ZN8RcStringD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %488) #10
  br label %577

577:                                              ; preds = %576, %574
  br label %578

578:                                              ; preds = %577, %552
  call void @llvm.lifetime.end.p0(i64 24, ptr %75) #10
  br label %579

579:                                              ; preds = %578, %551
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %73) #10
  br label %580

580:                                              ; preds = %579, %539
  call void @llvm.lifetime.end.p0(i64 88, ptr %73) #10
  br label %581

581:                                              ; preds = %580, %535
  call void @llvm.lifetime.end.p0(i64 56, ptr %72) #10
  br label %582

582:                                              ; preds = %581, %534, %517
  call void @_ZN8RcStringD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %65) #10
  br label %583

583:                                              ; preds = %582, %516
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #10
  br label %584

584:                                              ; preds = %583, %502
  call void @_ZN3HIR6Struct4DataD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #10
  br label %585

585:                                              ; preds = %584, %328
  call void @llvm.lifetime.end.p0(i64 32, ptr %41) #10
  br label %589

586:                                              ; preds = %501, %290
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #10
  br label %587

587:                                              ; preds = %586
  %588 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3AST11EnumVariantESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %36) #10
  br label %269

589:                                              ; preds = %585, %307, %291
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #10
  br label %590

590:                                              ; preds = %589, %272
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #10
  br label %607

591:                                              ; preds = %271
  %592 = load i32, ptr %22, align 4, !tbaa !30
  switch i32 %592, label %593 [
    i32 0, label %594
  ]

593:                                              ; preds = %591
  br label %594

594:                                              ; preds = %593, %591
  call void @llvm.lifetime.start.p0(i64 40, ptr %79) #10
  call void @_ZNSt6vectorIN3HIR4Enum11DataVariantESaIS2_EEC2EOS4_(ptr noundef nonnull align 8 dereferenceable(24) %80, ptr noundef nonnull align 8 dereferenceable(24) %34) #10
  invoke void @_ZN3HIR4Enum5Class9make_DataESt6vectorINS0_11DataVariantESaIS3_EE(ptr dead_on_unwind writable sret(%"class.HIR::Enum::Class") align 8 %79, ptr noundef %80)
          to label %595 unwind label %598

595:                                              ; preds = %594
  %596 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3HIR4Enum5ClassaSEOS1_(ptr noundef nonnull align 8 dereferenceable(40) %24, ptr noundef nonnull align 8 dereferenceable(40) %79)
          to label %597 unwind label %602

597:                                              ; preds = %595
  call void @_ZN3HIR4Enum5ClassD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %79) #10
  call void @_ZNSt6vectorIN3HIR4Enum11DataVariantESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %80) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %79) #10
  call void @_ZNSt6vectorIN3HIR4Enum11DataVariantESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %34) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %34) #10
  br label %608

598:                                              ; preds = %594
  %599 = landingpad { ptr, i32 }
          cleanup
  %600 = extractvalue { ptr, i32 } %599, 0
  store ptr %600, ptr %19, align 8
  %601 = extractvalue { ptr, i32 } %599, 1
  store i32 %601, ptr %20, align 4
  br label %606

602:                                              ; preds = %595
  %603 = landingpad { ptr, i32 }
          cleanup
  %604 = extractvalue { ptr, i32 } %603, 0
  store ptr %604, ptr %19, align 8
  %605 = extractvalue { ptr, i32 } %603, 1
  store i32 %605, ptr %20, align 4
  call void @_ZN3HIR4Enum5ClassD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %79) #10
  br label %606

606:                                              ; preds = %602, %598
  call void @_ZNSt6vectorIN3HIR4Enum11DataVariantESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %80) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %79) #10
  br label %607

607:                                              ; preds = %606, %590
  call void @_ZNSt6vectorIN3HIR4Enum11DataVariantESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %34) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %34) #10
  br label %622

608:                                              ; preds = %597, %248
  %609 = getelementptr inbounds %"class.HIR::Enum", ptr %0, i32 0, i32 0
  call void @_ZN3HIR13GenericParamsC2EOS0_(ptr noundef nonnull align 8 dereferenceable(96) %609, ptr noundef nonnull align 8 dereferenceable(96) %23) #10
  %610 = getelementptr inbounds %"class.HIR::Enum", ptr %0, i32 0, i32 1
  %611 = load i8, ptr %21, align 1, !tbaa !9, !range !11, !noundef !12
  %612 = trunc i8 %611 to i1
  %613 = zext i1 %612 to i8
  store i8 %613, ptr %610, align 8, !tbaa !57
  %614 = getelementptr inbounds %"class.HIR::Enum", ptr %0, i32 0, i32 2
  %615 = load i32, ptr %22, align 4, !tbaa !30
  store i32 %615, ptr %614, align 4, !tbaa !87
  %616 = getelementptr inbounds %"class.HIR::Enum", ptr %0, i32 0, i32 3
  call void @_ZN3HIR4Enum5ClassC2EOS1_(ptr noundef nonnull align 8 dereferenceable(40) %616, ptr noundef nonnull align 8 dereferenceable(40) %24) #10
  %617 = getelementptr inbounds %"class.HIR::Enum", ptr %0, i32 0, i32 4
  %618 = getelementptr inbounds %"struct.HIR::TraitMarkings", ptr %617, i32 0, i32 0
  store i8 0, ptr %618, align 8, !tbaa !88
  %619 = getelementptr inbounds %"struct.HIR::TraitMarkings", ptr %617, i32 0, i32 1
  store i8 0, ptr %619, align 1, !tbaa !89
  %620 = getelementptr inbounds %"struct.HIR::TraitMarkings", ptr %617, i32 0, i32 2
  store i8 0, ptr %620, align 2, !tbaa !90
  %621 = getelementptr inbounds %"struct.HIR::TraitMarkings", ptr %617, i32 0, i32 3
  call void @llvm.memset.p0.i64(ptr align 8 %621, i8 0, i64 48, i1 false)
  call void @_ZNSt3mapIN3HIR10SimplePathENS0_13TraitMarkings11AutoMarkingESt4lessIS1_ESaISt4pairIKS1_S3_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %621) #10
  store i32 1, ptr %38, align 4
  call void @_ZN3HIR4Enum5ClassD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %24) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %24) #10
  call void @_ZN3HIR13GenericParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %23) #10
  call void @llvm.lifetime.end.p0(i64 96, ptr %23) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %11) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #10
  ret void

622:                                              ; preds = %607, %258, %198
  call void @_ZN3HIR4Enum5ClassD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %24) #10
  br label %623

623:                                              ; preds = %622, %194
  call void @llvm.lifetime.end.p0(i64 40, ptr %24) #10
  call void @_ZN3HIR13GenericParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %23) #10
  call void @llvm.lifetime.end.p0(i64 96, ptr %23) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #10
  br label %624

624:                                              ; preds = %623, %141, %137
  call void @llvm.lifetime.end.p0(i64 1, ptr %11) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #10
  br label %625

625:                                              ; preds = %624
  %626 = load ptr, ptr %19, align 8
  %627 = load i32, ptr %20, align 4
  %628 = insertvalue { ptr, i32 } poison, ptr %626, 0
  %629 = insertvalue { ptr, i32 } %628, i32 %627, 1
  resume { ptr, i32 } %629

630:                                              ; preds = %453
  unreachable
}

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3AST15EnumVariantData8is_ValueEv(ptr noundef nonnull align 8 dereferenceable(32)) #5 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3AST15EnumVariantData8is_TupleEv(ptr noundef nonnull align 8 dereferenceable(32)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3AST15EnumVariantData9is_StructEv(ptr noundef nonnull align 8 dereferenceable(32)) #5 align 2

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3HIR4Enum5Class10make_ValueENS1_10Data_ValueE(ptr dead_on_unwind noalias writable sret(%"class.HIR::Enum::Class") align 8, ptr noundef) #3 align 2

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

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

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

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(112) ptr @_ZStlsINSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEE8RcStringEOT_S8_RKT0_(ptr noundef nonnull align 8 dereferenceable(112), ptr noundef nonnull align 8 dereferenceable(8)) #7

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(112) ptr @_ZStlsINSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEEA2_cEOT_S8_RKT0_(ptr noundef nonnull align 8 dereferenceable(112), ptr noundef nonnull align 1 dereferenceable(2)) #7

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(112) ptr @_ZStlsINSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEEPKcEOT_S9_RKT0_(ptr noundef nonnull align 8 dereferenceable(112), ptr noundef nonnull align 8 dereferenceable(8)) #7

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

; Function Attrs: mustprogress uwtable
declare void @_ZNKSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(112)) #3 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3HIR8ItemPath13get_full_pathEv(ptr dead_on_unwind noalias writable sret(%"class.HIR::Path") align 8, ptr noundef nonnull align 8 dereferenceable(56)) #3 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3HIR4Enum5Class9make_DataESt6vectorINS0_11DataVariantESaIS3_EE(ptr dead_on_unwind noalias writable sret(%"class.HIR::Enum::Class") align 8, ptr noundef) #3 align 2

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

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

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

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

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

attributes #0 = { 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 #1 = { 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 #2 = { 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 #3 = { 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 #4 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { 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 = { "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 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #9 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #10 = { nounwind }
attributes #11 = { noreturn nounwind }
attributes #12 = { noreturn }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"bool", !7, i64 0}
!11 = !{i8 0, i8 2}
!12 = !{}
!13 = !{!14, !10, i64 76}
!14 = !{!"_ZTSN3AST4EnumE", !15, i64 0, !24, i64 48, !28, i64 72}
!15 = !{!"_ZTSN3AST13GenericParamsE", !16, i64 0, !20, i64 24}
!16 = !{!"_ZTSSt6vectorIN3AST12GenericParamESaIS1_EE", !17, i64 0}
!17 = !{!"_ZTSSt12_Vector_baseIN3AST12GenericParamESaIS1_EE", !18, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseIN3AST12GenericParamESaIS1_EE12_Vector_implE", !19, i64 0}
!19 = !{!"_ZTSNSt12_Vector_baseIN3AST12GenericParamESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!20 = !{!"_ZTSSt6vectorIN3AST12GenericBoundESaIS1_EE", !21, i64 0}
!21 = !{!"_ZTSSt12_Vector_baseIN3AST12GenericBoundESaIS1_EE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseIN3AST12GenericBoundESaIS1_EE12_Vector_implE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseIN3AST12GenericBoundESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!24 = !{!"_ZTSSt6vectorIN3AST11EnumVariantESaIS1_EE", !25, i64 0}
!25 = !{!"_ZTSSt12_Vector_baseIN3AST11EnumVariantESaIS1_EE", !26, i64 0}
!26 = !{!"_ZTSNSt12_Vector_baseIN3AST11EnumVariantESaIS1_EE12_Vector_implE", !27, i64 0}
!27 = !{!"_ZTSNSt12_Vector_baseIN3AST11EnumVariantESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!28 = !{!"_ZTSN3AST4Enum8MarkingsE", !29, i64 0, !10, i64 4}
!29 = !{!"_ZTSN3AST4Enum8Markings4ReprE", !7, i64 0}
!30 = !{!31, !31, i64 0}
!31 = !{!"_ZTSN3HIR4Enum4ReprE", !7, i64 0}
!32 = !{!14, !29, i64 72}
!33 = !{!34, !44, i64 80}
!34 = !{!"_ZTSN3HIR4Enum12ValueVariantE", !35, i64 0, !36, i64 8, !44, i64 80}
!35 = !{!"_ZTS8RcString", !6, i64 0}
!36 = !{!"_ZTSN3HIR7ExprPtrE", !37, i64 0, !38, i64 8, !38, i64 32, !42, i64 56, !43, i64 64}
!37 = !{!"_ZTSN3HIR12ExprPtrInnerE", !6, i64 0}
!38 = !{!"_ZTSSt6vectorIN3HIR7TypeRefESaIS1_EE", !39, i64 0}
!39 = !{!"_ZTSSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE", !40, i64 0}
!40 = !{!"_ZTSNSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE12_Vector_implE", !41, i64 0}
!41 = !{!"_ZTSNSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!42 = !{!"_ZTSN3MIR15FunctionPointerE", !6, i64 0}
!43 = !{!"_ZTSN3HIR12ExprStatePtrE", !6, i64 0}
!44 = !{!"long", !7, i64 0}
!45 = !{!46, !10, i64 24}
!46 = !{!"_ZTSN3HIR4Enum5Class10Data_ValueE", !47, i64 0, !10, i64 24}
!47 = !{!"_ZTSSt6vectorIN3HIR4Enum12ValueVariantESaIS2_EE", !48, i64 0}
!48 = !{!"_ZTSSt12_Vector_baseIN3HIR4Enum12ValueVariantESaIS2_EE", !49, i64 0}
!49 = !{!"_ZTSNSt12_Vector_baseIN3HIR4Enum12ValueVariantESaIS2_EE12_Vector_implE", !50, i64 0}
!50 = !{!"_ZTSNSt12_Vector_baseIN3HIR4Enum12ValueVariantESaIS2_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!51 = !{!52, !10, i64 8}
!52 = !{!"_ZTSN3HIR4Enum11DataVariantE", !35, i64 0, !10, i64 8, !53, i64 16}
!53 = !{!"_ZTSN3HIR7TypeRefE", !6, i64 0}
!54 = !{i64 0, i64 8, !5, i64 8, i64 8, !5, i64 16, i64 8, !5, i64 24, i64 8, !5, i64 32, i64 8, !5, i64 40, i64 8, !5, i64 48, i64 8, !5}
!55 = !{!56, !6, i64 32}
!56 = !{!"_ZTSN3HIR8ItemPathE", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48}
!57 = !{!58, !10, i64 96}
!58 = !{!"_ZTSN3HIR4EnumE", !59, i64 0, !10, i64 96, !31, i64 100, !76, i64 104, !78, i64 144}
!59 = !{!"_ZTSN3HIR13GenericParamsE", !60, i64 0, !64, i64 24, !68, i64 48, !72, i64 72}
!60 = !{!"_ZTSSt6vectorIN3HIR12TypeParamDefESaIS1_EE", !61, i64 0}
!61 = !{!"_ZTSSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE", !62, i64 0}
!62 = !{!"_ZTSNSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE12_Vector_implE", !63, i64 0}
!63 = !{!"_ZTSNSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!64 = !{!"_ZTSSt6vectorIN3HIR11LifetimeDefESaIS1_EE", !65, i64 0}
!65 = !{!"_ZTSSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE", !66, i64 0}
!66 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE12_Vector_implE", !67, i64 0}
!67 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!68 = !{!"_ZTSSt6vectorIN3HIR13ValueParamDefESaIS1_EE", !69, i64 0}
!69 = !{!"_ZTSSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE", !70, i64 0}
!70 = !{!"_ZTSNSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE12_Vector_implE", !71, i64 0}
!71 = !{!"_ZTSNSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!72 = !{!"_ZTSSt6vectorIN3HIR12GenericBoundESaIS1_EE", !73, i64 0}
!73 = !{!"_ZTSSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE", !74, i64 0}
!74 = !{!"_ZTSNSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE12_Vector_implE", !75, i64 0}
!75 = !{!"_ZTSNSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!76 = !{!"_ZTSN3HIR4Enum5ClassE", !77, i64 0, !7, i64 8}
!77 = !{!"_ZTSN3HIR4Enum5Class3TagE", !7, i64 0}
!78 = !{!"_ZTSN3HIR13TraitMarkingsE", !10, i64 0, !10, i64 1, !10, i64 2, !79, i64 8}
!79 = !{!"_ZTSSt3mapIN3HIR10SimplePathENS0_13TraitMarkings11AutoMarkingESt4lessIS1_ESaISt4pairIKS1_S3_EEE", !80, i64 0}
!80 = !{!"_ZTSSt8_Rb_treeIN3HIR10SimplePathESt4pairIKS1_NS0_13TraitMarkings11AutoMarkingEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE", !81, i64 0}
!81 = !{!"_ZTSNSt8_Rb_treeIN3HIR10SimplePathESt4pairIKS1_NS0_13TraitMarkings11AutoMarkingEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE13_Rb_tree_implISA_Lb1EEE", !82, i64 0, !84, i64 8}
!82 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIN3HIR10SimplePathEEE", !83, i64 0}
!83 = !{!"_ZTSSt4lessIN3HIR10SimplePathEE"}
!84 = !{!"_ZTSSt15_Rb_tree_header", !85, i64 0, !44, i64 32}
!85 = !{!"_ZTSSt18_Rb_tree_node_base", !86, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!86 = !{!"_ZTSSt14_Rb_tree_color", !7, i64 0}
!87 = !{!58, !31, i64 100}
!88 = !{!78, !10, i64 0}
!89 = !{!78, !10, i64 1}
!90 = !{!78, !10, i64 2}


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

%"class.HIR::Publicity" = type { %"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 }
%"class.HIR::GenericParams" = type { %"class.std::vector.8", %"class.std::vector.13", %"class.std::vector.18", %"class.std::vector.23" }
%"class.std::vector.8" = type { %"struct.std::_Vector_base.9" }
%"struct.std::_Vector_base.9" = type { %"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::TypeParamDef, std::allocator<HIR::TypeParamDef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.13" = type { %"struct.std::_Vector_base.14" }
%"struct.std::_Vector_base.14" = type { %"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::LifetimeDef, std::allocator<HIR::LifetimeDef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.18" = type { %"struct.std::_Vector_base.19" }
%"struct.std::_Vector_base.19" = type { %"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::ValueParamDef, std::allocator<HIR::ValueParamDef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.23" = type { %"struct.std::_Vector_base.24" }
%"struct.std::_Vector_base.24" = type { %"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::GenericBound, std::allocator<HIR::GenericBound>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.HIR::TypeRef" = type { ptr }
%"class.HIR::ExprPtr" = type { %"class.HIR::ExprPtrInner", %"class.std::vector.93", %"class.std::vector.93", %"class.MIR::FunctionPointer", %"class.HIR::ExprStatePtr" }
%"class.HIR::ExprPtrInner" = type { ptr }
%"class.std::vector.93" = type { %"struct.std::_Vector_base.94" }
%"struct.std::_Vector_base.94" = type { %"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.MIR::FunctionPointer" = type { ptr }
%"class.HIR::ExprStatePtr" = type { ptr }
%"struct.HIR::PathParams" = type { %class.ThinVector.114, %class.ThinVector.115, %class.ThinVector.116 }
%class.ThinVector.114 = type { ptr }
%class.ThinVector.115 = type { ptr }
%class.ThinVector.116 = type { ptr }
%class.RcString = type { ptr }
%"class.HIR::Struct::Data" = type { i32, %"union.HIR::Struct::Data::DataUnion" }
%"union.HIR::Struct::Data::DataUnion" = type { %"class.std::vector.365" }
%"class.std::vector.365" = type { %"struct.std::_Vector_base.366" }
%"struct.std::_Vector_base.366" = type { %"struct.std::_Vector_base<HIR::VisEnt<HIR::TypeRef>, std::allocator<HIR::VisEnt<HIR::TypeRef>>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::VisEnt<HIR::TypeRef>, std::allocator<HIR::VisEnt<HIR::TypeRef>>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::VisEnt<HIR::TypeRef>, std::allocator<HIR::VisEnt<HIR::TypeRef>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::VisEnt<HIR::TypeRef>, std::allocator<HIR::VisEnt<HIR::TypeRef>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.std::pair.395" = type { %class.RcString, %"struct.HIR::VisEnt" }
%"struct.HIR::VisEnt" = type { %"class.HIR::Publicity", %"class.HIR::TypeRef" }
%"class.HIR::Enum" = type { %"class.HIR::GenericParams", i8, i32, %"class.HIR::Enum::Class", %"struct.HIR::TraitMarkings" }
%"class.HIR::Enum::Class" = type { i32, %"union.HIR::Enum::Class::DataUnion" }
%"union.HIR::Enum::Class::DataUnion" = type { %"class.std::vector.403", [8 x i8] }
%"class.std::vector.403" = type { %"struct.std::_Vector_base.404" }
%"struct.std::_Vector_base.404" = type { %"struct.std::_Vector_base<HIR::Enum::DataVariant, std::allocator<HIR::Enum::DataVariant>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::Enum::DataVariant, std::allocator<HIR::Enum::DataVariant>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::Enum::DataVariant, std::allocator<HIR::Enum::DataVariant>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::Enum::DataVariant, std::allocator<HIR::Enum::DataVariant>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.HIR::TraitMarkings" = type { i8, i8, i8, %"class.std::map.375" }
%"class.std::map.375" = type { %"class.std::_Rb_tree.376" }
%"class.std::_Rb_tree.376" = type { %"struct.std::_Rb_tree<HIR::SimplePath, std::pair<const HIR::SimplePath, HIR::TraitMarkings::AutoMarking>, std::_Select1st<std::pair<const HIR::SimplePath, HIR::TraitMarkings::AutoMarking>>, std::less<HIR::SimplePath>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<HIR::SimplePath, std::pair<const HIR::SimplePath, HIR::TraitMarkings::AutoMarking>, std::_Select1st<std::pair<const HIR::SimplePath, HIR::TraitMarkings::AutoMarking>>, std::less<HIR::SimplePath>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"class.HIR::ItemPath" = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%"class.__gnu_cxx::__normal_iterator.421" = type { ptr }
%struct.Span = type { ptr }
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%"class.std::_Function_base" = type { %"union.std::_Any_data", ptr }
%"union.std::_Any_data" = type { %"union.std::_Nocopy_types" }
%"union.std::_Nocopy_types" = type { { i64, i64 } }
%class.anon.422 = type { ptr }
%"class.std::vector.408" = type { %"struct.std::_Vector_base.409" }
%"struct.std::_Vector_base.409" = type { %"struct.std::_Vector_base<HIR::Enum::ValueVariant, std::allocator<HIR::Enum::ValueVariant>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::Enum::ValueVariant, std::allocator<HIR::Enum::ValueVariant>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::Enum::ValueVariant, std::allocator<HIR::Enum::ValueVariant>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::Enum::ValueVariant, std::allocator<HIR::Enum::ValueVariant>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.HIR::Enum::ValueVariant" = type { %class.RcString, %"class.HIR::ExprPtr", i64 }
%"struct.HIR::Enum::Class::Data_Value" = type <{ %"class.std::vector.408", i8, [7 x i8] }>
%"struct.HIR::Enum::DataVariant" = type { %class.RcString, i8, %"class.HIR::TypeRef" }
%"class.__gnu_cxx::__normal_iterator.393" = type { ptr }
%"class.std::vector.370" = type { %"struct.std::_Vector_base.371" }
%"struct.std::_Vector_base.371" = type { %"struct.std::_Vector_base<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>, std::allocator<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>, std::allocator<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>, std::allocator<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>, std::allocator<std::pair<RcString, HIR::VisEnt<HIR::TypeRef>>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.__gnu_cxx::__normal_iterator.394" = type { ptr }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::__cxx11::basic_ostringstream" = type { %"class.std::basic_ostream.base", %"class.std::__cxx11::basic_stringbuf", %"class.std::basic_ios" }
%"class.std::basic_ostream.base" = type { ptr }
%"class.std::__cxx11::basic_stringbuf" = type { %"class.std::basic_streambuf", i32, %"class.std::__cxx11::basic_string" }
%"class.std::basic_streambuf" = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, %"class.std::locale" }
%"class.std::locale" = type { ptr }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.HIR::Struct" = type <{ %"class.HIR::GenericParams", i32, [4 x i8], %"class.HIR::Struct::Data", i32, i32, %"struct.HIR::TraitMarkings", %"struct.HIR::StructMarkings", i32, [4 x i8] }>
%"struct.HIR::StructMarkings" = type { i8, i32, i32, i32, i32, i32, i32, i8, i8, %class.U128 }
%class.U128 = type { i64, i64 }
%"class.HIR::Path" = type { %"class.HIR::Path::Data" }
%"class.HIR::Path::Data" = type { i32, %"union.HIR::Path::Data::DataUnion" }
%"union.HIR::Path::Data::DataUnion" = type { %"struct.HIR::Path::Data::Data_UfcsKnown" }
%"struct.HIR::Path::Data::Data_UfcsKnown" = type { %"class.HIR::TypeRef", %"class.HIR::GenericPath", %class.RcString, %"struct.HIR::PathParams", %"class.std::unique_ptr.106" }
%"class.HIR::GenericPath" = type { %"struct.HIR::SimplePath", %"struct.HIR::PathParams" }
%"struct.HIR::SimplePath" = type { %class.ThinVector }
%class.ThinVector = type { ptr }
%"class.std::unique_ptr.106" = type { %"struct.std::__uniq_ptr_data.107" }
%"struct.std::__uniq_ptr_data.107" = type { %"class.std::__uniq_ptr_impl.108" }
%"class.std::__uniq_ptr_impl.108" = type { %"class.std::tuple.109" }
%"class.std::tuple.109" = type { %"struct.std::_Tuple_impl.110" }
%"struct.std::_Tuple_impl.110" = type { %"struct.std::_Head_base.113" }
%"struct.std::_Head_base.113" = type { ptr }
%"class.HIR::TypePathBinding" = type { i32, %"union.HIR::TypePathBinding::DataUnion" }
%"union.HIR::TypePathBinding::DataUnion" = type { ptr }

@.str.5 = external hidden unnamed_addr constant [75 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [1 x i8], align 1
@_ZTISt13runtime_error = external constant ptr
@.str.12 = external hidden unnamed_addr constant [24 x i8], align 1
@_ZTIPKc = external constant ptr
@.str.33 = external hidden unnamed_addr constant [22 x i8], align 1
@__PRETTY_FUNCTION__._Z13LowerHIR_EnumN3HIR8ItemPathERKN3AST4EnumERKNS1_13AttributeListESt8functionIFv8RcStringNS_6StructEEE = external hidden unnamed_addr constant [143 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [2 x i8], align 1
@switch.table._Z13LowerHIR_EnumN3HIR8ItemPathERKN3AST4EnumERKNS1_13AttributeListESt8functionIFv8RcStringNS_6StructEEE = private unnamed_addr constant [10 x i32] [i32 2, i32 3, i32 4, i32 5, i32 1, i32 7, i32 8, i32 9, i32 10, i32 6], align 4

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

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

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

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

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

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

declare i32 @__gxx_personality_v0(...)

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z13LowerHIR_TypeRK7TypeRef(ptr dead_on_unwind noalias writable sret(%"class.HIR::TypeRef") align 8, ptr noundef nonnull align 8 dereferenceable(120)) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z13LowerHIR_ExprRKN3AST4ExprE(ptr dead_on_unwind noalias writable sret(%"class.HIR::ExprPtr") align 8, ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #3

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

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

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

declare void @__cxa_free_exception(ptr) local_unnamed_addr

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3AST4Expr8is_validEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #5 align 2

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN8RcString12new_internedERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind noalias writable sret(%class.RcString) align 8, ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #3 align 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN12_GLOBAL__N_110new_visentIN3HIR7TypeRefEEENS1_6VisEntIT_EENS1_9PublicityES4_(ptr dead_on_unwind noalias writable sret(%"struct.HIR::VisEnt") align 8, ptr noundef, ptr noundef) local_unnamed_addr #3

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_Z13LowerHIR_EnumN3HIR8ItemPathERKN3AST4EnumERKNS1_13AttributeListESt8functionIFv8RcStringNS_6StructEEE(ptr dead_on_unwind noalias writable sret(%"class.HIR::Enum") align 8 %0, ptr noundef byval(%"class.HIR::ItemPath") align 8 %1, ptr noundef nonnull align 8 dereferenceable(80) %2, ptr nocapture noundef nonnull readnone align 8 dereferenceable(24) %3, ptr noundef %4) local_unnamed_addr #3 personality ptr @__gxx_personality_v0 {
  %6 = alloca %"class.__gnu_cxx::__normal_iterator.421", align 8
  %7 = alloca %"class.__gnu_cxx::__normal_iterator.421", align 8
  %8 = alloca %struct.Span, align 8
  %9 = alloca %"class.std::function", align 8
  %10 = alloca %class.anon.422, align 8
  %11 = alloca %"class.HIR::GenericParams", align 8
  %12 = alloca %"class.HIR::Enum::Class", align 8
  %13 = alloca %"class.std::vector.408", align 8
  %14 = alloca %"class.__gnu_cxx::__normal_iterator.421", align 8
  %15 = alloca %"class.__gnu_cxx::__normal_iterator.421", align 8
  %16 = alloca %"struct.HIR::Enum::ValueVariant", align 8
  %17 = alloca %"class.HIR::Enum::Class", align 8
  %18 = alloca %"struct.HIR::Enum::Class::Data_Value", align 8
  %19 = alloca %"class.std::vector.403", align 8
  %20 = alloca %"class.__gnu_cxx::__normal_iterator.421", align 8
  %21 = alloca %"class.__gnu_cxx::__normal_iterator.421", align 8
  %22 = alloca %"struct.HIR::Enum::DataVariant", align 8
  %23 = alloca %"class.HIR::Struct::Data", align 8
  %24 = alloca %"class.std::vector.365", align 8
  %25 = alloca %"class.__gnu_cxx::__normal_iterator.393", align 8
  %26 = alloca %"class.__gnu_cxx::__normal_iterator.393", align 8
  %27 = alloca %"struct.HIR::VisEnt", align 8
  %28 = alloca %"class.HIR::Publicity", align 8
  %29 = alloca %"class.HIR::TypeRef", align 8
  %30 = alloca %"class.HIR::Struct::Data", align 8
  %31 = alloca %"class.std::vector.365", align 8
  %32 = alloca %"class.std::vector.370", align 8
  %33 = alloca %"class.__gnu_cxx::__normal_iterator.394", align 8
  %34 = alloca %"class.__gnu_cxx::__normal_iterator.394", align 8
  %35 = alloca %"struct.std::pair.395", align 8
  %36 = alloca %"struct.HIR::VisEnt", align 8
  %37 = alloca %"class.HIR::Publicity", align 8
  %38 = alloca %"class.HIR::TypeRef", align 8
  %39 = alloca %"class.HIR::Struct::Data", align 8
  %40 = alloca %"class.std::vector.370", align 8
  %41 = alloca %class.RcString, align 8
  %42 = alloca %"class.std::__cxx11::basic_string", align 8
  %43 = alloca %"class.std::__cxx11::basic_ostringstream", align 8
  %44 = alloca %class.RcString, align 8
  %45 = alloca %"class.HIR::Struct", align 8
  %46 = alloca %"class.HIR::GenericParams", align 8
  %47 = alloca %"class.HIR::Struct::Data", align 8
  %48 = alloca %"class.HIR::ItemPath", align 8
  %49 = alloca %"class.HIR::Path", align 8
  %50 = alloca %"struct.HIR::PathParams", align 8
  %51 = alloca %"struct.HIR::Enum::DataVariant", align 8
  %52 = alloca %"class.HIR::Path", align 8
  %53 = alloca %"class.HIR::TypePathBinding", align 8
  %54 = alloca %"class.HIR::Enum::Class", align 8
  %55 = alloca %"class.std::vector.403", align 8
  %56 = tail call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3AST4Enum8variantsEv(ptr noundef nonnull align 8 dereferenceable(80) %2)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #10
  %57 = tail call ptr @_ZNKSt6vectorIN3AST11EnumVariantESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %56) #10
  store ptr %57, ptr %6, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #10
  %58 = tail call ptr @_ZNKSt6vectorIN3AST11EnumVariantESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %56) #10
  store ptr %58, ptr %7, align 8
  %59 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3AST11EnumVariantESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %6, ptr noundef nonnull align 8 dereferenceable(8) %7) #10
  br i1 %59, label %.lr.ph, label %._crit_edge.thread

._crit_edge.thread:                               ; preds = %5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #10
  br label %86

._crit_edge:                                      ; preds = %73
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #10
  br i1 %.149, label %76, label %86

.lr.ph:                                           ; preds = %5, %73
  %.048150 = phi i1 [ %.149, %73 ], [ false, %5 ]
  %.050149 = phi i8 [ %.151, %73 ], [ 0, %5 ]
  %60 = call noundef nonnull align 8 dereferenceable(64) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3AST11EnumVariantESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %6) #10
  %61 = getelementptr inbounds i8, ptr %60, i64 32
  %62 = call noundef zeroext i1 @_ZNK3AST15EnumVariantData8is_ValueEv(ptr noundef nonnull align 8 dereferenceable(32) %61)
  br i1 %62, label %63, label %66

63:                                               ; preds = %.lr.ph
  %64 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3AST15EnumVariantData8as_ValueEv(ptr noundef nonnull align 8 dereferenceable(32) %61)
  %65 = call noundef zeroext i1 @_ZNK3AST4Expr8is_validEv(ptr noundef nonnull align 8 dereferenceable(16) %64)
  br i1 %65, label %73, label %66

66:                                               ; preds = %63, %.lr.ph
  %67 = call noundef zeroext i1 @_ZNK3AST15EnumVariantData8is_TupleEv(ptr noundef nonnull align 8 dereferenceable(32) %61)
  br i1 %67, label %73, label %68

68:                                               ; preds = %66
  %69 = call noundef zeroext i1 @_ZNK3AST15EnumVariantData9is_StructEv(ptr noundef nonnull align 8 dereferenceable(32) %61)
  br i1 %69, label %73, label %70

70:                                               ; preds = %68
  %71 = call noundef zeroext i1 @_ZNK3AST15EnumVariantData8is_ValueEv(ptr noundef nonnull align 8 dereferenceable(32) %61)
  br i1 %71, label %73, label %72

72:                                               ; preds = %70
  call void @__assert_fail(ptr noundef nonnull @.str.33, ptr noundef nonnull @.str.5, i32 noundef 1299, ptr noundef nonnull @__PRETTY_FUNCTION__._Z13LowerHIR_EnumN3HIR8ItemPathERKN3AST4EnumERKNS1_13AttributeListESt8functionIFv8RcStringNS_6StructEEE) #11
  unreachable

73:                                               ; preds = %66, %68, %63, %70
  %.151 = phi i8 [ %.050149, %70 ], [ %.050149, %63 ], [ 1, %68 ], [ 1, %66 ]
  %.149 = phi i1 [ %.048150, %70 ], [ true, %63 ], [ %.048150, %68 ], [ %.048150, %66 ]
  %74 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3AST11EnumVariantESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %6) #10
  %75 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3AST11EnumVariantESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %6, ptr noundef nonnull align 8 dereferenceable(8) %7) #10
  br i1 %75, label %.lr.ph, label %._crit_edge

76:                                               ; preds = %._crit_edge
  %77 = trunc nuw i8 %.151 to i1
  br i1 %77, label %78, label %86

78:                                               ; preds = %76
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #10
  call void @_ZN4SpanC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %8)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #10
  store ptr %1, ptr %10, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ13LowerHIR_EnumN3HIR8ItemPathERKN3AST4EnumERKNS6_13AttributeListES_IFv8RcStringNS4_6StructEEEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef nonnull align 8 dereferenceable(8) %10) #10
  invoke void @_ZNK4Span5errorE9ErrorTypeSt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(8) %8, i32 noundef 0, ptr noundef nonnull %9)
          to label %79 unwind label %82

79:                                               ; preds = %78
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #10
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %8) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #10
  %80 = call ptr @__cxa_allocate_exception(i64 16) #10
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %80, ptr noundef nonnull @.str.12)
          to label %81 unwind label %84

81:                                               ; preds = %79
  call void @__cxa_throw(ptr nonnull %80, ptr nonnull @_ZTISt13runtime_error, ptr nonnull @_ZNSt13runtime_errorD1Ev) #12
  unreachable

82:                                               ; preds = %78
  %83 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #10
  call void @_ZN4SpanD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %8) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #10
  br label %324

84:                                               ; preds = %79
  %85 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %80) #10
  br label %324

86:                                               ; preds = %._crit_edge.thread, %76, %._crit_edge
  %.050.lcssa166 = phi i8 [ 0, %._crit_edge.thread ], [ %.151, %76 ], [ %.151, %._crit_edge ]
  %87 = getelementptr inbounds i8, ptr %2, i64 72
  %88 = getelementptr inbounds i8, ptr %2, i64 76
  %89 = load i8, ptr %88, align 4, !tbaa !9, !range !27, !noundef !28
  %90 = load i32, ptr %87, align 8, !tbaa !29
  %switch.tableidx = add i32 %90, -1
  %91 = icmp ult i32 %switch.tableidx, 10
  br i1 %91, label %switch.lookup, label %93

switch.lookup:                                    ; preds = %86
  %92 = zext nneg i32 %switch.tableidx to i64
  %switch.gep = getelementptr inbounds [10 x i32], ptr @switch.table._Z13LowerHIR_EnumN3HIR8ItemPathERKN3AST4EnumERKNS1_13AttributeListESt8functionIFv8RcStringNS_6StructEEE, i64 0, i64 %92
  %switch.load = load i32, ptr %switch.gep, align 4
  br label %93

93:                                               ; preds = %switch.lookup, %86
  %.090 = phi i32 [ 0, %86 ], [ %switch.load, %switch.lookup ]
  call void @llvm.lifetime.start.p0(i64 96, ptr nonnull %11) #10
  %94 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNK3AST4Enum6paramsEv(ptr noundef nonnull align 8 dereferenceable(80) %2)
  call void @_Z22LowerHIR_GenericParamsRKN3AST13GenericParamsEPb(ptr dead_on_unwind nonnull writable sret(%"class.HIR::GenericParams") align 8 %11, ptr noundef nonnull align 8 dereferenceable(48) %94, ptr noundef null)
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %12) #10
  invoke void @_ZN3HIR4Enum5ClassC2Ev(ptr noundef nonnull align 8 dereferenceable(40) %12)
          to label %95 unwind label %108

95:                                               ; preds = %93
  %96 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3AST4Enum8variantsEv(ptr noundef nonnull align 8 dereferenceable(80) %2)
  %97 = call noundef i64 @_ZNKSt6vectorIN3AST11EnumVariantESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %96) #10
  %.not = icmp eq i64 %97, 0
  br i1 %.not, label %133, label %98

98:                                               ; preds = %95
  %99 = trunc nuw i8 %.050.lcssa166 to i1
  br i1 %99, label %133, label %100

100:                                              ; preds = %98
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %13) #10
  call void @_ZNSt6vectorIN3HIR4Enum12ValueVariantESaIS2_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #10
  %101 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3AST4Enum8variantsEv(ptr noundef nonnull align 8 dereferenceable(80) %2)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #10
  %102 = call ptr @_ZNKSt6vectorIN3AST11EnumVariantESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %101) #10
  store ptr %102, ptr %14, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #10
  %103 = call ptr @_ZNKSt6vectorIN3AST11EnumVariantESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %101) #10
  store ptr %103, ptr %15, align 8
  %104 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3AST11EnumVariantESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %14, ptr noundef nonnull align 8 dereferenceable(8) %15) #10
  br i1 %104, label %.lr.ph153, label %._crit_edge154

.lr.ph153:                                        ; preds = %100
  %105 = getelementptr inbounds i8, ptr %16, i64 8
  %106 = getelementptr inbounds i8, ptr %16, i64 80
  br label %110

._crit_edge154:                                   ; preds = %116, %100
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #10
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %17) #10
  call void @_ZNSt6vectorIN3HIR4Enum12ValueVariantESaIS2_EEC2EOS4_(ptr noundef nonnull align 8 dereferenceable(24) %18, ptr noundef nonnull align 8 dereferenceable(24) %13) #10
  %107 = getelementptr inbounds i8, ptr %18, i64 24
  store i8 0, ptr %107, align 8, !tbaa !30
  invoke void @_ZN3HIR4Enum5Class10make_ValueENS1_10Data_ValueE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::Enum::Class") align 8 %17, ptr noundef nonnull %18)
          to label %124 unwind label %127

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

110:                                              ; preds = %.lr.ph153, %116
  %111 = call noundef nonnull align 8 dereferenceable(64) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3AST11EnumVariantESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %14) #10
  %112 = getelementptr inbounds i8, ptr %111, i64 32
  %113 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3AST15EnumVariantData8as_ValueEv(ptr noundef nonnull align 8 dereferenceable(32) %112)
  call void @llvm.lifetime.start.p0(i64 88, ptr nonnull %16) #10
  %114 = getelementptr inbounds i8, ptr %111, i64 24
  call void @_ZN8RcStringC2ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %16, ptr noundef nonnull align 8 dereferenceable(8) %114)
  invoke void @_Z13LowerHIR_ExprRKN3AST4ExprE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::ExprPtr") align 8 %105, ptr noundef nonnull align 8 dereferenceable(16) %113)
          to label %115 unwind label %119

115:                                              ; preds = %110
  store i64 0, ptr %106, align 8, !tbaa !36
  invoke void @_ZNSt6vectorIN3HIR4Enum12ValueVariantESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %13, ptr noundef nonnull align 8 dereferenceable(88) %16)
          to label %116 unwind label %121

116:                                              ; preds = %115
  call void @_ZN3HIR4Enum12ValueVariantD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %16) #10
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %16) #10
  %117 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3AST11EnumVariantESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %14) #10
  %118 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3AST11EnumVariantESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %14, ptr noundef nonnull align 8 dereferenceable(8) %15) #10
  br i1 %118, label %110, label %._crit_edge154

119:                                              ; preds = %110
  %120 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN8RcStringD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %16) #10
  br label %123

121:                                              ; preds = %115
  %122 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR4Enum12ValueVariantD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %16) #10
  br label %123

123:                                              ; preds = %121, %119
  %.pn94 = phi { ptr, i32 } [ %122, %121 ], [ %120, %119 ]
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %16) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #10
  br label %132

124:                                              ; preds = %._crit_edge154
  %125 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3HIR4Enum5ClassaSEOS1_(ptr noundef nonnull align 8 dereferenceable(40) %12, ptr noundef nonnull align 8 dereferenceable(40) %17)
          to label %126 unwind label %129

126:                                              ; preds = %124
  call void @_ZN3HIR4Enum5ClassD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %17) #10
  call void @_ZN3HIR4Enum5Class10Data_ValueD2Ev(ptr noundef nonnull align 8 dereferenceable(25) %18) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %17) #10
  call void @_ZNSt6vectorIN3HIR4Enum12ValueVariantESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #10
  br label %314

127:                                              ; preds = %._crit_edge154
  %128 = landingpad { ptr, i32 }
          cleanup
  br label %131

129:                                              ; preds = %124
  %130 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR4Enum5ClassD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %17) #10
  br label %131

131:                                              ; preds = %129, %127
  %.pn = phi { ptr, i32 } [ %130, %129 ], [ %128, %127 ]
  call void @_ZN3HIR4Enum5Class10Data_ValueD2Ev(ptr noundef nonnull align 8 dereferenceable(25) %18) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %17) #10
  br label %132

132:                                              ; preds = %131, %123
  %.pn94.pn = phi { ptr, i32 } [ %.pn94, %123 ], [ %.pn, %131 ]
  call void @_ZNSt6vectorIN3HIR4Enum12ValueVariantESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #10
  br label %322

133:                                              ; preds = %98, %95
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %19) #10
  call void @_ZNSt6vectorIN3HIR4Enum11DataVariantESaIS2_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #10
  %134 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3AST4Enum8variantsEv(ptr noundef nonnull align 8 dereferenceable(80) %2)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #10
  %135 = call ptr @_ZNKSt6vectorIN3AST11EnumVariantESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %134) #10
  store ptr %135, ptr %20, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #10
  %136 = call ptr @_ZNKSt6vectorIN3AST11EnumVariantESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %134) #10
  store ptr %136, ptr %21, align 8
  %137 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3AST11EnumVariantESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %20, ptr noundef nonnull align 8 dereferenceable(8) %21) #10
  br i1 %137, label %.lr.ph162, label %._crit_edge163

.lr.ph162:                                        ; preds = %133
  %138 = getelementptr inbounds i8, ptr %1, i64 32
  %139 = getelementptr inbounds i8, ptr %48, i64 32
  %140 = getelementptr inbounds i8, ptr %51, i64 8
  %141 = getelementptr inbounds i8, ptr %51, i64 16
  %142 = getelementptr inbounds i8, ptr %22, i64 8
  %143 = getelementptr inbounds i8, ptr %22, i64 16
  br label %144

._crit_edge163:                                   ; preds = %301, %133
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #10
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %54) #10
  call void @_ZNSt6vectorIN3HIR4Enum11DataVariantESaIS2_EEC2EOS4_(ptr noundef nonnull align 8 dereferenceable(24) %55, ptr noundef nonnull align 8 dereferenceable(24) %19) #10
  invoke void @_ZN3HIR4Enum5Class9make_DataESt6vectorINS0_11DataVariantESaIS3_EE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::Enum::Class") align 8 %54, ptr noundef nonnull %55)
          to label %305 unwind label %308

144:                                              ; preds = %.lr.ph162, %301
  %145 = call noundef nonnull align 8 dereferenceable(64) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3AST11EnumVariantESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %20) #10
  %146 = getelementptr inbounds i8, ptr %145, i64 32
  %147 = call noundef zeroext i1 @_ZNK3AST15EnumVariantData8is_ValueEv(ptr noundef nonnull align 8 dereferenceable(32) %146)
  br i1 %147, label %148, label %157

148:                                              ; preds = %144
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %22) #10
  %149 = getelementptr inbounds i8, ptr %145, i64 24
  call void @_ZN8RcStringC2ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %22, ptr noundef nonnull align 8 dereferenceable(8) %149)
  store i8 0, ptr %142, align 8, !tbaa !48
  invoke void @_ZN3HIR7TypeRef8new_unitEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %143)
          to label %150 unwind label %152

150:                                              ; preds = %148
  invoke void @_ZNSt6vectorIN3HIR4Enum11DataVariantESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %19, ptr noundef nonnull align 8 dereferenceable(24) %22)
          to label %151 unwind label %154

151:                                              ; preds = %150
  call void @_ZN3HIR4Enum11DataVariantD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %22) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %22) #10
  br label %301

152:                                              ; preds = %148
  %153 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN8RcStringD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %22) #10
  br label %156

154:                                              ; preds = %150
  %155 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR4Enum11DataVariantD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %22) #10
  br label %156

156:                                              ; preds = %154, %152
  %.pn135 = phi { ptr, i32 } [ %155, %154 ], [ %153, %152 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %22) #10
  br label %304

157:                                              ; preds = %144
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %23) #10
  invoke void @_ZN3HIR6Struct4DataC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23)
          to label %158 unwind label %164

158:                                              ; preds = %157
  %159 = call noundef ptr @_ZNK3AST15EnumVariantData9opt_TupleEv(ptr noundef nonnull align 8 dereferenceable(32) %146)
  %.not99 = icmp eq ptr %159, null
  br i1 %.not99, label %194, label %160

160:                                              ; preds = %158
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %24) #10
  call void @_ZNSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %24) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %25) #10
  %161 = call ptr @_ZNKSt6vectorIN3AST9TupleItemESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %159) #10
  store ptr %161, ptr %25, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %26) #10
  %162 = call ptr @_ZNKSt6vectorIN3AST9TupleItemESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %159) #10
  store ptr %162, ptr %26, align 8
  %163 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3AST9TupleItemESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %25, ptr noundef nonnull align 8 dereferenceable(8) %26) #10
  br i1 %163, label %.lr.ph156, label %._crit_edge157

._crit_edge157:                                   ; preds = %171, %160
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %30) #10
  call void @_ZNSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EEC2EOS5_(ptr noundef nonnull align 8 dereferenceable(24) %31, ptr noundef nonnull align 8 dereferenceable(24) %24) #10
  invoke void @_ZN3HIR6Struct4Data10make_TupleESt6vectorINS_6VisEntINS_7TypeRefEEESaIS5_EE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::Struct::Data") align 8 %30, ptr noundef nonnull %31)
          to label %185 unwind label %188

164:                                              ; preds = %157
  %165 = landingpad { ptr, i32 }
          cleanup
  br label %300

.lr.ph156:                                        ; preds = %160, %171
  %166 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3AST9TupleItemESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %25) #10
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %27) #10
  invoke void @_ZN3HIR9Publicity10new_globalEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::Publicity") align 8 %28)
          to label %167 unwind label %174

167:                                              ; preds = %.lr.ph156
  %168 = getelementptr inbounds i8, ptr %166, i64 64
  invoke void @_Z13LowerHIR_TypeRK7TypeRef(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %29, ptr noundef nonnull align 8 dereferenceable(120) %168)
          to label %169 unwind label %176

169:                                              ; preds = %167
  invoke void @_ZN12_GLOBAL__N_110new_visentIN3HIR7TypeRefEEENS1_6VisEntIT_EENS1_9PublicityES4_(ptr dead_on_unwind nonnull writable sret(%"struct.HIR::VisEnt") align 8 %27, ptr noundef nonnull %28, ptr noundef nonnull %29)
          to label %170 unwind label %178

170:                                              ; preds = %169
  invoke void @_ZNSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EE9push_backEOS3_(ptr noundef nonnull align 8 dereferenceable(24) %24, ptr noundef nonnull align 8 dereferenceable(24) %27)
          to label %171 unwind label %180

171:                                              ; preds = %170
  call void @_ZN3HIR6VisEntINS_7TypeRefEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #10
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %29) #10
  call void @_ZN3HIR9PublicityD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %28) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %27) #10
  %172 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3AST9TupleItemESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %25) #10
  %173 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3AST9TupleItemESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %25, ptr noundef nonnull align 8 dereferenceable(8) %26) #10
  br i1 %173, label %.lr.ph156, label %._crit_edge157

174:                                              ; preds = %.lr.ph156
  %175 = landingpad { ptr, i32 }
          cleanup
  br label %184

176:                                              ; preds = %167
  %177 = landingpad { ptr, i32 }
          cleanup
  br label %183

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

180:                                              ; preds = %170
  %181 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR6VisEntINS_7TypeRefEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %27) #10
  br label %182

182:                                              ; preds = %180, %178
  %.pn127 = phi { ptr, i32 } [ %181, %180 ], [ %179, %178 ]
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %29) #10
  br label %183

183:                                              ; preds = %182, %176
  %.pn127.pn = phi { ptr, i32 } [ %.pn127, %182 ], [ %177, %176 ]
  call void @_ZN3HIR9PublicityD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %28) #10
  br label %184

184:                                              ; preds = %183, %174
  %.pn127.pn.pn = phi { ptr, i32 } [ %.pn127.pn, %183 ], [ %175, %174 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %27) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %25) #10
  br label %193

185:                                              ; preds = %._crit_edge157
  %186 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZN3HIR6Struct4DataaSEOS1_(ptr noundef nonnull align 8 dereferenceable(32) %23, ptr noundef nonnull align 8 dereferenceable(32) %30)
          to label %187 unwind label %190

187:                                              ; preds = %185
  call void @_ZN3HIR6Struct4DataD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #10
  call void @_ZNSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %31) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %30) #10
  call void @_ZNSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %24) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %24) #10
  br label %237

188:                                              ; preds = %._crit_edge157
  %189 = landingpad { ptr, i32 }
          cleanup
  br label %192

190:                                              ; preds = %185
  %191 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR6Struct4DataD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #10
  br label %192

192:                                              ; preds = %190, %188
  %.pn110 = phi { ptr, i32 } [ %191, %190 ], [ %189, %188 ]
  call void @_ZNSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %31) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %30) #10
  br label %193

193:                                              ; preds = %192, %184
  %.pn127.pn.pn.pn = phi { ptr, i32 } [ %.pn127.pn.pn, %184 ], [ %.pn110, %192 ]
  call void @_ZNSt6vectorIN3HIR6VisEntINS0_7TypeRefEEESaIS3_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %24) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %24) #10
  br label %299

194:                                              ; preds = %158
  %195 = call noundef ptr @_ZNK3AST15EnumVariantData10opt_StructEv(ptr noundef nonnull align 8 dereferenceable(32) %146)
  %.not100 = icmp eq ptr %195, null
  br i1 %.not100, label %235, label %196

196:                                              ; preds = %194
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %32) #10
  call void @_ZNSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %32) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %33) #10
  %197 = call ptr @_ZNKSt6vectorIN3AST10StructItemESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %195) #10
  store ptr %197, ptr %33, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %34) #10
  %198 = call ptr @_ZNKSt6vectorIN3AST10StructItemESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %195) #10
  store ptr %198, ptr %34, align 8
  %199 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3AST10StructItemESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %33, ptr noundef nonnull align 8 dereferenceable(8) %34) #10
  br i1 %199, label %.lr.ph159, label %._crit_edge160

._crit_edge160:                                   ; preds = %209, %196
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %39) #10
  call void @_ZNSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EEC2EOS8_(ptr noundef nonnull align 8 dereferenceable(24) %40, ptr noundef nonnull align 8 dereferenceable(24) %32) #10
  invoke void @_ZN3HIR6Struct4Data10make_NamedESt6vectorISt4pairI8RcStringNS_6VisEntINS_7TypeRefEEEESaIS8_EE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::Struct::Data") align 8 %39, ptr noundef nonnull %40)
          to label %226 unwind label %229

200:                                              ; preds = %235
  %201 = landingpad { ptr, i32 }
          cleanup
  br label %299

.lr.ph159:                                        ; preds = %196, %209
  %202 = call noundef nonnull align 8 dereferenceable(192) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN3AST10StructItemESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %33) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %35) #10
  %203 = getelementptr inbounds i8, ptr %202, i64 64
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %36) #10
  invoke void @_ZN3HIR9Publicity10new_globalEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::Publicity") align 8 %37)
          to label %204 unwind label %212

204:                                              ; preds = %.lr.ph159
  %205 = getelementptr inbounds i8, ptr %202, i64 72
  invoke void @_Z13LowerHIR_TypeRK7TypeRef(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %38, ptr noundef nonnull align 8 dereferenceable(120) %205)
          to label %206 unwind label %214

206:                                              ; preds = %204
  invoke void @_ZN12_GLOBAL__N_110new_visentIN3HIR7TypeRefEEENS1_6VisEntIT_EENS1_9PublicityES4_(ptr dead_on_unwind nonnull writable sret(%"struct.HIR::VisEnt") align 8 %36, ptr noundef nonnull %37, ptr noundef nonnull %38)
          to label %207 unwind label %216

207:                                              ; preds = %206
  invoke void @_ZSt9make_pairIRK8RcStringN3HIR6VisEntINS3_7TypeRefEEEESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS8_INS9_IT0_E4typeEE6__typeEEOSA_OSF_(ptr dead_on_unwind nonnull writable sret(%"struct.std::pair.395") align 8 %35, ptr noundef nonnull align 8 dereferenceable(8) %203, ptr noundef nonnull align 8 dereferenceable(24) %36)
          to label %208 unwind label %218

208:                                              ; preds = %207
  invoke void @_ZNSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EE9push_backEOS6_(ptr noundef nonnull align 8 dereferenceable(24) %32, ptr noundef nonnull align 8 dereferenceable(32) %35)
          to label %209 unwind label %220

209:                                              ; preds = %208
  call void @_ZNSt4pairI8RcStringN3HIR6VisEntINS1_7TypeRefEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #10
  call void @_ZN3HIR6VisEntINS_7TypeRefEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %36) #10
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %38) #10
  call void @_ZN3HIR9PublicityD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %37) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %36) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #10
  %210 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3AST10StructItemESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %33) #10
  %211 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3AST10StructItemESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %33, ptr noundef nonnull align 8 dereferenceable(8) %34) #10
  br i1 %211, label %.lr.ph159, label %._crit_edge160

212:                                              ; preds = %.lr.ph159
  %213 = landingpad { ptr, i32 }
          cleanup
  br label %225

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

216:                                              ; preds = %206
  %217 = landingpad { ptr, i32 }
          cleanup
  br label %223

218:                                              ; preds = %207
  %219 = landingpad { ptr, i32 }
          cleanup
  br label %222

220:                                              ; preds = %208
  %221 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt4pairI8RcStringN3HIR6VisEntINS1_7TypeRefEEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #10
  br label %222

222:                                              ; preds = %220, %218
  %.pn103 = phi { ptr, i32 } [ %221, %220 ], [ %219, %218 ]
  call void @_ZN3HIR6VisEntINS_7TypeRefEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %36) #10
  br label %223

223:                                              ; preds = %222, %216
  %.pn103.pn = phi { ptr, i32 } [ %.pn103, %222 ], [ %217, %216 ]
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %38) #10
  br label %224

224:                                              ; preds = %223, %214
  %.pn103.pn.pn = phi { ptr, i32 } [ %.pn103.pn, %223 ], [ %215, %214 ]
  call void @_ZN3HIR9PublicityD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %37) #10
  br label %225

225:                                              ; preds = %224, %212
  %.pn103.pn.pn.pn = phi { ptr, i32 } [ %.pn103.pn.pn, %224 ], [ %213, %212 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %36) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %34) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %33) #10
  br label %234

226:                                              ; preds = %._crit_edge160
  %227 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZN3HIR6Struct4DataaSEOS1_(ptr noundef nonnull align 8 dereferenceable(32) %23, ptr noundef nonnull align 8 dereferenceable(32) %39)
          to label %228 unwind label %231

228:                                              ; preds = %226
  call void @_ZN3HIR6Struct4DataD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #10
  call void @_ZNSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %40) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #10
  call void @_ZNSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %32) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %32) #10
  br label %237

229:                                              ; preds = %._crit_edge160
  %230 = landingpad { ptr, i32 }
          cleanup
  br label %233

231:                                              ; preds = %226
  %232 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR6Struct4DataD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #10
  br label %233

233:                                              ; preds = %231, %229
  %.pn101 = phi { ptr, i32 } [ %232, %231 ], [ %230, %229 ]
  call void @_ZNSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %40) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #10
  br label %234

234:                                              ; preds = %233, %225
  %.pn103.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn103.pn.pn.pn, %225 ], [ %.pn101, %233 ]
  call void @_ZNSt6vectorISt4pairI8RcStringN3HIR6VisEntINS2_7TypeRefEEEESaIS6_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %32) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %32) #10
  br label %299

235:                                              ; preds = %194
  %236 = call ptr @__cxa_allocate_exception(i64 8) #10
  store ptr @.str.6, ptr %236, align 16, !tbaa !5
  invoke void @__cxa_throw(ptr nonnull %236, ptr nonnull @_ZTIPKc, ptr null) #12
          to label %325 unwind label %200

237:                                              ; preds = %228, %187
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %41) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %42) #10
  call void @llvm.lifetime.start.p0(i64 376, ptr nonnull %43) #10
  invoke void @_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC1Ev(ptr noundef nonnull align 8 dereferenceable(112) %43)
          to label %238 unwind label %264

238:                                              ; preds = %237
  %239 = invoke noundef nonnull align 8 dereferenceable(112) ptr @_ZStlsINSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEEPKcEOT_S9_RKT0_(ptr noundef nonnull align 8 dereferenceable(112) %43, ptr noundef nonnull align 8 dereferenceable(8) %138)
          to label %240 unwind label %266

240:                                              ; preds = %238
  %241 = invoke noundef nonnull align 8 dereferenceable(112) ptr @_ZStlsINSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEEA2_cEOT_S8_RKT0_(ptr noundef nonnull align 8 dereferenceable(112) %239, ptr noundef nonnull align 1 dereferenceable(2) @.str.34)
          to label %242 unwind label %266

242:                                              ; preds = %240
  %243 = getelementptr inbounds i8, ptr %145, i64 24
  %244 = invoke noundef nonnull align 8 dereferenceable(112) ptr @_ZStlsINSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEE8RcStringEOT_S8_RKT0_(ptr noundef nonnull align 8 dereferenceable(112) %241, ptr noundef nonnull align 8 dereferenceable(8) %243)
          to label %245 unwind label %266

245:                                              ; preds = %242
  invoke void @_ZNKSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %42, ptr noundef nonnull align 8 dereferenceable(112) %244)
          to label %246 unwind label %266

246:                                              ; preds = %245
  invoke void @_ZN8RcString12new_internedERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%class.RcString) align 8 %41, ptr noundef nonnull align 8 dereferenceable(32) %42)
          to label %247 unwind label %268

247:                                              ; preds = %246
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #10
  call void @_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(112) %43) #10
  call void @llvm.lifetime.end.p0(i64 376, ptr nonnull %43) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %42) #10
  call void @_ZN8RcStringC2ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %44, ptr noundef nonnull align 8 dereferenceable(8) %41)
  %248 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNK3AST4Enum6paramsEv(ptr noundef nonnull align 8 dereferenceable(80) %2)
  invoke void @_Z22LowerHIR_GenericParamsRKN3AST13GenericParamsEPb(ptr dead_on_unwind nonnull writable sret(%"class.HIR::GenericParams") align 8 %46, ptr noundef nonnull align 8 dereferenceable(48) %248, ptr noundef null)
          to label %249 unwind label %272

249:                                              ; preds = %247
  call void @_ZN3HIR6Struct4DataC2EOS1_(ptr noundef nonnull align 8 dereferenceable(32) %47, ptr noundef nonnull align 8 dereferenceable(32) %23) #10
  invoke void @_ZN3HIR6StructC2ENS_13GenericParamsENS0_4ReprENS0_4DataE(ptr noundef nonnull align 8 dereferenceable(252) %45, ptr noundef nonnull %46, i32 noundef 0, ptr noundef nonnull %47)
          to label %250 unwind label %274

250:                                              ; preds = %249
  invoke void @_ZNKSt8functionIFv8RcStringN3HIR6StructEEEclES0_S2_(ptr noundef nonnull align 8 dereferenceable(32) %4, ptr noundef nonnull %44, ptr noundef nonnull %45)
          to label %251 unwind label %276

251:                                              ; preds = %250
  call void @_ZN3HIR6StructD2Ev(ptr noundef nonnull align 8 dereferenceable(252) %45) #10
  call void @_ZN3HIR6Struct4DataD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #10
  call void @_ZN3HIR13GenericParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %46) #10
  call void @_ZN8RcStringD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %44) #10
  call void @llvm.lifetime.start.p0(i64 56, ptr nonnull %48) #10
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(56) %48, ptr noundef nonnull align 8 dereferenceable(56) %1, i64 56, i1 false), !tbaa.struct !51
  %252 = call noundef ptr @_ZNK8RcString5c_strEv(ptr noundef nonnull align 8 dereferenceable(8) %41)
  store ptr %252, ptr %139, align 8, !tbaa !52
  call void @llvm.lifetime.start.p0(i64 88, ptr nonnull %49) #10
  invoke void @_ZNK3HIR8ItemPath13get_full_pathEv(ptr dead_on_unwind nonnull writable sret(%"class.HIR::Path") align 8 %49, ptr noundef nonnull align 8 dereferenceable(56) %48)
          to label %253 unwind label %280

253:                                              ; preds = %251
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %50) #10
  invoke void @_ZNK3HIR13GenericParams15make_nop_paramsEjb(ptr dead_on_unwind nonnull writable sret(%"struct.HIR::PathParams") align 8 %50, ptr noundef nonnull align 8 dereferenceable(96) %11, i32 noundef 0, i1 noundef zeroext false)
          to label %254 unwind label %282

254:                                              ; preds = %253
  %255 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZN3HIR4Path4Data10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(88) %49)
  %256 = getelementptr inbounds i8, ptr %255, i64 8
  %257 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3HIR10PathParamsaSEOS0_(ptr noundef nonnull align 8 dereferenceable(24) %256, ptr noundef nonnull align 8 dereferenceable(24) %50)
          to label %258 unwind label %284

258:                                              ; preds = %254
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %50) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %50) #10
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %51) #10
  call void @_ZN8RcStringC2ERKS_(ptr noundef nonnull align 8 dereferenceable(8) %51, ptr noundef nonnull align 8 dereferenceable(8) %243)
  %259 = call noundef zeroext i1 @_ZNK3AST15EnumVariantData9is_StructEv(ptr noundef nonnull align 8 dereferenceable(32) %146)
  %260 = zext i1 %259 to i8
  store i8 %260, ptr %140, align 8, !tbaa !48
  call void @_ZN3HIR4PathC2EOS0_(ptr noundef nonnull align 8 dereferenceable(88) %52, ptr noundef nonnull align 8 dereferenceable(88) %49) #10
  invoke void @_ZN3HIR15TypePathBindingC2Ev(ptr noundef nonnull align 8 dereferenceable(16) %53)
          to label %261 unwind label %.thread

261:                                              ; preds = %258
  invoke void @_ZN3HIR7TypeRef8new_pathENS_4PathENS_15TypePathBindingE(ptr dead_on_unwind nonnull writable sret(%"class.HIR::TypeRef") align 8 %141, ptr noundef nonnull %52, ptr noundef nonnull %53)
          to label %262 unwind label %288

262:                                              ; preds = %261
  invoke void @_ZNSt6vectorIN3HIR4Enum11DataVariantESaIS2_EE9push_backEOS2_(ptr noundef nonnull align 8 dereferenceable(24) %19, ptr noundef nonnull align 8 dereferenceable(24) %51)
          to label %263 unwind label %290

263:                                              ; preds = %262
  call void @_ZN3HIR4Enum11DataVariantD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %51) #10
  call void @_ZN3HIR15TypePathBindingD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %53) #10
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %52) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %51) #10
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %49) #10
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %49) #10
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %48) #10
  call void @_ZN8RcStringD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %41) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #10
  call void @_ZN3HIR6Struct4DataD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #10
  br label %301

264:                                              ; preds = %237
  %265 = landingpad { ptr, i32 }
          cleanup
  br label %271

266:                                              ; preds = %245, %242, %240, %238
  %267 = landingpad { ptr, i32 }
          cleanup
  br label %270

268:                                              ; preds = %246
  %269 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #10
  br label %270

270:                                              ; preds = %268, %266
  %.pn112 = phi { ptr, i32 } [ %269, %268 ], [ %267, %266 ]
  call void @_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev(ptr noundef nonnull align 8 dereferenceable(112) %43) #10
  br label %271

271:                                              ; preds = %270, %264
  %.pn112.pn = phi { ptr, i32 } [ %.pn112, %270 ], [ %265, %264 ]
  call void @llvm.lifetime.end.p0(i64 376, ptr nonnull %43) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %42) #10
  br label %298

272:                                              ; preds = %247
  %273 = landingpad { ptr, i32 }
          cleanup
  br label %279

274:                                              ; preds = %249
  %275 = landingpad { ptr, i32 }
          cleanup
  br label %278

276:                                              ; preds = %250
  %277 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR6StructD2Ev(ptr noundef nonnull align 8 dereferenceable(252) %45) #10
  br label %278

278:                                              ; preds = %276, %274
  %.pn115 = phi { ptr, i32 } [ %277, %276 ], [ %275, %274 ]
  call void @_ZN3HIR6Struct4DataD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #10
  call void @_ZN3HIR13GenericParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %46) #10
  br label %279

279:                                              ; preds = %278, %272
  %.pn115.pn = phi { ptr, i32 } [ %.pn115, %278 ], [ %273, %272 ]
  call void @_ZN8RcStringD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %44) #10
  br label %297

280:                                              ; preds = %251
  %281 = landingpad { ptr, i32 }
          cleanup
  br label %296

282:                                              ; preds = %253
  %283 = landingpad { ptr, i32 }
          cleanup
  br label %286

284:                                              ; preds = %254
  %285 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR10PathParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %50) #10
  br label %286

286:                                              ; preds = %284, %282
  %.pn118 = phi { ptr, i32 } [ %285, %284 ], [ %283, %282 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %50) #10
  br label %295

.thread:                                          ; preds = %258
  %287 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %52) #10
  br label %293

288:                                              ; preds = %261
  %289 = landingpad { ptr, i32 }
          cleanup
  br label %292

290:                                              ; preds = %262
  %291 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR4Enum11DataVariantD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %51) #10
  br label %292

292:                                              ; preds = %288, %290
  %.pn120 = phi { ptr, i32 } [ %291, %290 ], [ %289, %288 ]
  %.0 = phi i1 [ false, %290 ], [ true, %288 ]
  call void @_ZN3HIR15TypePathBindingD2Ev(ptr noundef nonnull align 8 dereferenceable(16) %53) #10
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %52) #10
  br i1 %.0, label %293, label %294

293:                                              ; preds = %.thread, %292
  %.pn120.pn146 = phi { ptr, i32 } [ %287, %.thread ], [ %.pn120, %292 ]
  call void @_ZN8RcStringD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %51) #10
  br label %294

294:                                              ; preds = %292, %293
  %.pn120.pn145 = phi { ptr, i32 } [ %.pn120, %292 ], [ %.pn120.pn146, %293 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %51) #10
  br label %295

295:                                              ; preds = %294, %286
  %.pn120.pn.pn = phi { ptr, i32 } [ %.pn120.pn145, %294 ], [ %.pn118, %286 ]
  call void @_ZN3HIR4PathD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %49) #10
  br label %296

296:                                              ; preds = %295, %280
  %.pn120.pn.pn.pn = phi { ptr, i32 } [ %.pn120.pn.pn, %295 ], [ %281, %280 ]
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %49) #10
  call void @llvm.lifetime.end.p0(i64 56, ptr nonnull %48) #10
  br label %297

297:                                              ; preds = %296, %279
  %.pn120.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn120.pn.pn.pn, %296 ], [ %.pn115.pn, %279 ]
  call void @_ZN8RcStringD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %41) #10
  br label %298

298:                                              ; preds = %297, %271
  %.pn120.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn120.pn.pn.pn.pn, %297 ], [ %.pn112.pn, %271 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #10
  br label %299

299:                                              ; preds = %193, %234, %200, %298
  %.pn127.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn120.pn.pn.pn.pn.pn, %298 ], [ %.pn127.pn.pn.pn, %193 ], [ %.pn103.pn.pn.pn.pn, %234 ], [ %201, %200 ]
  call void @_ZN3HIR6Struct4DataD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #10
  br label %300

300:                                              ; preds = %299, %164
  %.pn127.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn127.pn.pn.pn.pn.pn, %299 ], [ %165, %164 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #10
  br label %304

301:                                              ; preds = %263, %151
  %302 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN3AST11EnumVariantESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %20) #10
  %303 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN3AST11EnumVariantESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESD_(ptr noundef nonnull align 8 dereferenceable(8) %20, ptr noundef nonnull align 8 dereferenceable(8) %21) #10
  br i1 %303, label %144, label %._crit_edge163

304:                                              ; preds = %300, %156
  %.pn135.pn = phi { ptr, i32 } [ %.pn135, %156 ], [ %.pn127.pn.pn.pn.pn.pn.pn, %300 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #10
  br label %313

305:                                              ; preds = %._crit_edge163
  %306 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3HIR4Enum5ClassaSEOS1_(ptr noundef nonnull align 8 dereferenceable(40) %12, ptr noundef nonnull align 8 dereferenceable(40) %54)
          to label %307 unwind label %310

307:                                              ; preds = %305
  call void @_ZN3HIR4Enum5ClassD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %54) #10
  call void @_ZNSt6vectorIN3HIR4Enum11DataVariantESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %55) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %54) #10
  call void @_ZNSt6vectorIN3HIR4Enum11DataVariantESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %19) #10
  br label %314

308:                                              ; preds = %._crit_edge163
  %309 = landingpad { ptr, i32 }
          cleanup
  br label %312

310:                                              ; preds = %305
  %311 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3HIR4Enum5ClassD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %54) #10
  br label %312

312:                                              ; preds = %310, %308
  %.pn97 = phi { ptr, i32 } [ %311, %310 ], [ %309, %308 ]
  call void @_ZNSt6vectorIN3HIR4Enum11DataVariantESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %55) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %54) #10
  br label %313

313:                                              ; preds = %312, %304
  %.pn135.pn.pn = phi { ptr, i32 } [ %.pn135.pn, %304 ], [ %.pn97, %312 ]
  call void @_ZNSt6vectorIN3HIR4Enum11DataVariantESaIS2_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %19) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %19) #10
  br label %322

314:                                              ; preds = %307, %126
  call void @_ZN3HIR13GenericParamsC2EOS0_(ptr noundef nonnull align 8 dereferenceable(96) %0, ptr noundef nonnull align 8 dereferenceable(96) %11) #10
  %315 = getelementptr inbounds i8, ptr %0, i64 96
  store i8 %89, ptr %315, align 8, !tbaa !54
  %316 = getelementptr inbounds i8, ptr %0, i64 100
  store i32 %.090, ptr %316, align 4, !tbaa !85
  %317 = getelementptr inbounds i8, ptr %0, i64 104
  call void @_ZN3HIR4Enum5ClassC2EOS1_(ptr noundef nonnull align 8 dereferenceable(40) %317, ptr noundef nonnull align 8 dereferenceable(40) %12) #10
  %318 = getelementptr inbounds i8, ptr %0, i64 144
  store i8 0, ptr %318, align 8, !tbaa !86
  %319 = getelementptr inbounds i8, ptr %0, i64 145
  store i8 0, ptr %319, align 1, !tbaa !87
  %320 = getelementptr inbounds i8, ptr %0, i64 146
  store i8 0, ptr %320, align 2, !tbaa !88
  %321 = getelementptr inbounds i8, ptr %0, i64 152
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(48) %321, i8 0, i64 48, i1 false)
  call void @_ZNSt3mapIN3HIR10SimplePathENS0_13TraitMarkings11AutoMarkingESt4lessIS1_ESaISt4pairIKS1_S3_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %321) #10
  call void @_ZN3HIR4Enum5ClassD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %12) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %12) #10
  call void @_ZN3HIR13GenericParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %11) #10
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %11) #10
  ret void

322:                                              ; preds = %313, %132
  %.pn135.pn.pn.pn = phi { ptr, i32 } [ %.pn135.pn.pn, %313 ], [ %.pn94.pn, %132 ]
  call void @_ZN3HIR4Enum5ClassD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %12) #10
  br label %323

323:                                              ; preds = %322, %108
  %.pn135.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn135.pn.pn.pn, %322 ], [ %109, %108 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %12) #10
  call void @_ZN3HIR13GenericParamsD2Ev(ptr noundef nonnull align 8 dereferenceable(96) %11) #10
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %11) #10
  br label %324

324:                                              ; preds = %323, %84, %82
  %.pn141 = phi { ptr, i32 } [ %85, %84 ], [ %83, %82 ], [ %.pn135.pn.pn.pn.pn, %323 ]
  resume { ptr, i32 } %.pn141

325:                                              ; preds = %235
  unreachable
}

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3AST15EnumVariantData8is_ValueEv(ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #5 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3AST15EnumVariantData8is_TupleEv(ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3AST15EnumVariantData9is_StructEv(ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #5 align 2

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3HIR4Enum5Class10make_ValueENS1_10Data_ValueE(ptr dead_on_unwind noalias writable sret(%"class.HIR::Enum::Class") align 8, ptr noundef) local_unnamed_addr #3 align 2

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

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

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

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(112) ptr @_ZStlsINSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEE8RcStringEOT_S8_RKT0_(ptr noundef nonnull align 8 dereferenceable(112), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #7

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(112) ptr @_ZStlsINSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEEA2_cEOT_S8_RKT0_(ptr noundef nonnull align 8 dereferenceable(112), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #7

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(112) ptr @_ZStlsINSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEEPKcEOT_S9_RKT0_(ptr noundef nonnull align 8 dereferenceable(112), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #7

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

; Function Attrs: mustprogress uwtable
declare void @_ZNKSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEE3strEv(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(112)) local_unnamed_addr #3 align 2

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3HIR8ItemPath13get_full_pathEv(ptr dead_on_unwind noalias writable sret(%"class.HIR::Path") align 8, ptr noundef nonnull align 8 dereferenceable(56)) local_unnamed_addr #3 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3HIR4Enum5Class9make_DataESt6vectorINS0_11DataVariantESaIS3_EE(ptr dead_on_unwind noalias writable sret(%"class.HIR::Enum::Class") align 8, ptr noundef) local_unnamed_addr #3 align 2

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

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

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

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

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

attributes #0 = { 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 #1 = { 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 #2 = { 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 #3 = { 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 #4 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { 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 = { "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 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #9 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #10 = { nounwind }
attributes #11 = { noreturn nounwind }
attributes #12 = { noreturn }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !26, i64 76}
!10 = !{!"_ZTSN3AST4EnumE", !11, i64 0, !20, i64 48, !24, i64 72}
!11 = !{!"_ZTSN3AST13GenericParamsE", !12, i64 0, !16, i64 24}
!12 = !{!"_ZTSSt6vectorIN3AST12GenericParamESaIS1_EE", !13, i64 0}
!13 = !{!"_ZTSSt12_Vector_baseIN3AST12GenericParamESaIS1_EE", !14, i64 0}
!14 = !{!"_ZTSNSt12_Vector_baseIN3AST12GenericParamESaIS1_EE12_Vector_implE", !15, i64 0}
!15 = !{!"_ZTSNSt12_Vector_baseIN3AST12GenericParamESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!16 = !{!"_ZTSSt6vectorIN3AST12GenericBoundESaIS1_EE", !17, i64 0}
!17 = !{!"_ZTSSt12_Vector_baseIN3AST12GenericBoundESaIS1_EE", !18, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseIN3AST12GenericBoundESaIS1_EE12_Vector_implE", !19, i64 0}
!19 = !{!"_ZTSNSt12_Vector_baseIN3AST12GenericBoundESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!20 = !{!"_ZTSSt6vectorIN3AST11EnumVariantESaIS1_EE", !21, i64 0}
!21 = !{!"_ZTSSt12_Vector_baseIN3AST11EnumVariantESaIS1_EE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseIN3AST11EnumVariantESaIS1_EE12_Vector_implE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseIN3AST11EnumVariantESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!24 = !{!"_ZTSN3AST4Enum8MarkingsE", !25, i64 0, !26, i64 4}
!25 = !{!"_ZTSN3AST4Enum8Markings4ReprE", !7, i64 0}
!26 = !{!"bool", !7, i64 0}
!27 = !{i8 0, i8 2}
!28 = !{}
!29 = !{!10, !25, i64 72}
!30 = !{!31, !26, i64 24}
!31 = !{!"_ZTSN3HIR4Enum5Class10Data_ValueE", !32, i64 0, !26, i64 24}
!32 = !{!"_ZTSSt6vectorIN3HIR4Enum12ValueVariantESaIS2_EE", !33, i64 0}
!33 = !{!"_ZTSSt12_Vector_baseIN3HIR4Enum12ValueVariantESaIS2_EE", !34, i64 0}
!34 = !{!"_ZTSNSt12_Vector_baseIN3HIR4Enum12ValueVariantESaIS2_EE12_Vector_implE", !35, i64 0}
!35 = !{!"_ZTSNSt12_Vector_baseIN3HIR4Enum12ValueVariantESaIS2_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!36 = !{!37, !47, i64 80}
!37 = !{!"_ZTSN3HIR4Enum12ValueVariantE", !38, i64 0, !39, i64 8, !47, i64 80}
!38 = !{!"_ZTS8RcString", !6, i64 0}
!39 = !{!"_ZTSN3HIR7ExprPtrE", !40, i64 0, !41, i64 8, !41, i64 32, !45, i64 56, !46, i64 64}
!40 = !{!"_ZTSN3HIR12ExprPtrInnerE", !6, i64 0}
!41 = !{!"_ZTSSt6vectorIN3HIR7TypeRefESaIS1_EE", !42, i64 0}
!42 = !{!"_ZTSSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE", !43, i64 0}
!43 = !{!"_ZTSNSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE12_Vector_implE", !44, i64 0}
!44 = !{!"_ZTSNSt12_Vector_baseIN3HIR7TypeRefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!45 = !{!"_ZTSN3MIR15FunctionPointerE", !6, i64 0}
!46 = !{!"_ZTSN3HIR12ExprStatePtrE", !6, i64 0}
!47 = !{!"long", !7, i64 0}
!48 = !{!49, !26, i64 8}
!49 = !{!"_ZTSN3HIR4Enum11DataVariantE", !38, i64 0, !26, i64 8, !50, i64 16}
!50 = !{!"_ZTSN3HIR7TypeRefE", !6, i64 0}
!51 = !{i64 0, i64 8, !5, i64 8, i64 8, !5, i64 16, i64 8, !5, i64 24, i64 8, !5, i64 32, i64 8, !5, i64 40, i64 8, !5, i64 48, i64 8, !5}
!52 = !{!53, !6, i64 32}
!53 = !{!"_ZTSN3HIR8ItemPathE", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48}
!54 = !{!55, !26, i64 96}
!55 = !{!"_ZTSN3HIR4EnumE", !56, i64 0, !26, i64 96, !73, i64 100, !74, i64 104, !76, i64 144}
!56 = !{!"_ZTSN3HIR13GenericParamsE", !57, i64 0, !61, i64 24, !65, i64 48, !69, i64 72}
!57 = !{!"_ZTSSt6vectorIN3HIR12TypeParamDefESaIS1_EE", !58, i64 0}
!58 = !{!"_ZTSSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE", !59, i64 0}
!59 = !{!"_ZTSNSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE12_Vector_implE", !60, i64 0}
!60 = !{!"_ZTSNSt12_Vector_baseIN3HIR12TypeParamDefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!61 = !{!"_ZTSSt6vectorIN3HIR11LifetimeDefESaIS1_EE", !62, i64 0}
!62 = !{!"_ZTSSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE", !63, i64 0}
!63 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE12_Vector_implE", !64, i64 0}
!64 = !{!"_ZTSNSt12_Vector_baseIN3HIR11LifetimeDefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!65 = !{!"_ZTSSt6vectorIN3HIR13ValueParamDefESaIS1_EE", !66, i64 0}
!66 = !{!"_ZTSSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE", !67, i64 0}
!67 = !{!"_ZTSNSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE12_Vector_implE", !68, i64 0}
!68 = !{!"_ZTSNSt12_Vector_baseIN3HIR13ValueParamDefESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!69 = !{!"_ZTSSt6vectorIN3HIR12GenericBoundESaIS1_EE", !70, i64 0}
!70 = !{!"_ZTSSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE", !71, i64 0}
!71 = !{!"_ZTSNSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE12_Vector_implE", !72, i64 0}
!72 = !{!"_ZTSNSt12_Vector_baseIN3HIR12GenericBoundESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!73 = !{!"_ZTSN3HIR4Enum4ReprE", !7, i64 0}
!74 = !{!"_ZTSN3HIR4Enum5ClassE", !75, i64 0, !7, i64 8}
!75 = !{!"_ZTSN3HIR4Enum5Class3TagE", !7, i64 0}
!76 = !{!"_ZTSN3HIR13TraitMarkingsE", !26, i64 0, !26, i64 1, !26, i64 2, !77, i64 8}
!77 = !{!"_ZTSSt3mapIN3HIR10SimplePathENS0_13TraitMarkings11AutoMarkingESt4lessIS1_ESaISt4pairIKS1_S3_EEE", !78, i64 0}
!78 = !{!"_ZTSSt8_Rb_treeIN3HIR10SimplePathESt4pairIKS1_NS0_13TraitMarkings11AutoMarkingEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE", !79, i64 0}
!79 = !{!"_ZTSNSt8_Rb_treeIN3HIR10SimplePathESt4pairIKS1_NS0_13TraitMarkings11AutoMarkingEESt10_Select1stIS6_ESt4lessIS1_ESaIS6_EE13_Rb_tree_implISA_Lb1EEE", !80, i64 0, !82, i64 8}
!80 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIN3HIR10SimplePathEEE", !81, i64 0}
!81 = !{!"_ZTSSt4lessIN3HIR10SimplePathEE"}
!82 = !{!"_ZTSSt15_Rb_tree_header", !83, i64 0, !47, i64 32}
!83 = !{!"_ZTSSt18_Rb_tree_node_base", !84, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!84 = !{!"_ZTSSt14_Rb_tree_color", !7, i64 0}
!85 = !{!55, !73, i64 100}
!86 = !{!76, !26, i64 0}
!87 = !{!76, !26, i64 1}
!88 = !{!76, !26, i64 2}


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