; LLVM IR from thepowersgang/mrustc :: src/hir/expr.ll (ZN3HIR14ExprVisitorDef13visit_patternERK4SpanRNS_7PatternE)

; 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.__gnu_cxx::__normal_iterator.103" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.213" = type { ptr }
%"struct.HIR::Pattern" = type <{ %"class.std::vector.54", %"class.HIR::Pattern::Data", i32, [4 x i8] }>
%"class.std::vector.54" = type { %"struct.std::_Vector_base.55" }
%"struct.std::_Vector_base.55" = type { %"struct.std::_Vector_base<HIR::PatternBinding, std::allocator<HIR::PatternBinding>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::PatternBinding, std::allocator<HIR::PatternBinding>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::PatternBinding, std::allocator<HIR::PatternBinding>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::PatternBinding, std::allocator<HIR::PatternBinding>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.HIR::Pattern::Data" = type { i32, %"union.HIR::Pattern::Data::DataUnion" }
%"union.HIR::Pattern::Data::DataUnion" = type { %"struct.HIR::Pattern::Data::Data_PathValue", [64 x i8] }
%"struct.HIR::Pattern::Data::Data_PathValue" = type { %"class.HIR::Path", %"class.HIR::Pattern::PathBinding" }
%"class.HIR::Path" = type { %"class.HIR::Path::Data" }
%"class.HIR::Path::Data" = type { i32, %"union.HIR::Path::Data::DataUnion" }
%"union.HIR::Path::Data::DataUnion" = type { %"struct.HIR::Path::Data::Data_UfcsKnown" }
%"struct.HIR::Path::Data::Data_UfcsKnown" = type { %"class.HIR::TypeRef", %"class.HIR::GenericPath", %class.RcString, %"struct.HIR::PathParams", %"class.std::unique_ptr.42" }
%"class.HIR::TypeRef" = type { ptr }
%"class.HIR::GenericPath" = type { %"struct.HIR::SimplePath", %"struct.HIR::PathParams" }
%"struct.HIR::SimplePath" = type { %class.ThinVector }
%class.ThinVector = type { ptr }
%class.RcString = type { ptr }
%"struct.HIR::PathParams" = type { %class.ThinVector.39, %class.ThinVector.40, %class.ThinVector.41 }
%class.ThinVector.39 = type { ptr }
%class.ThinVector.40 = type { ptr }
%class.ThinVector.41 = type { ptr }
%"class.std::unique_ptr.42" = type { %"struct.std::__uniq_ptr_data.43" }
%"struct.std::__uniq_ptr_data.43" = type { %"class.std::__uniq_ptr_impl.44" }
%"class.std::__uniq_ptr_impl.44" = type { %"class.std::tuple.45" }
%"class.std::tuple.45" = type { %"struct.std::_Tuple_impl.46" }
%"struct.std::_Tuple_impl.46" = type { %"struct.std::_Head_base.49" }
%"struct.std::_Head_base.49" = type { ptr }
%"class.HIR::Pattern::PathBinding" = type { i32, %"union.HIR::Pattern::PathBinding::DataUnion" }
%"union.HIR::Pattern::PathBinding::DataUnion" = type { %"struct.HIR::Pattern::PathBinding::Data_Enum" }
%"struct.HIR::Pattern::PathBinding::Data_Enum" = type { ptr, i32 }
%"struct.HIR::Pattern::Data::Data_Box" = type { %"class.std::unique_ptr.59" }
%"class.std::unique_ptr.59" = type { %"struct.std::__uniq_ptr_data.60" }
%"struct.std::__uniq_ptr_data.60" = type { %"class.std::__uniq_ptr_impl.61" }
%"class.std::__uniq_ptr_impl.61" = type { %"class.std::tuple.62" }
%"class.std::tuple.62" = type { %"struct.std::_Tuple_impl.63" }
%"struct.std::_Tuple_impl.63" = type { %"struct.std::_Head_base.66" }
%"struct.std::_Head_base.66" = type { ptr }
%"struct.HIR::Pattern::Data::Data_Ref" = type { i32, %"class.std::unique_ptr.59" }
%"struct.HIR::Pattern::Data::Data_Tuple" = type { %"class.std::vector.67" }
%"class.std::vector.67" = type { %"struct.std::_Vector_base.68" }
%"struct.std::_Vector_base.68" = type { %"struct.std::_Vector_base<HIR::Pattern, std::allocator<HIR::Pattern>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::Pattern, std::allocator<HIR::Pattern>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::Pattern, std::allocator<HIR::Pattern>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::Pattern, std::allocator<HIR::Pattern>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.HIR::Pattern::Data::Data_SplitTuple" = type <{ %"class.std::vector.67", %"class.std::vector.67", i32, [4 x i8] }>
%"struct.HIR::Pattern::Data::Data_PathTuple" = type <{ %"class.HIR::Path", %"class.HIR::Pattern::PathBinding", %"class.std::vector.67", i8, [7 x i8], %"class.std::vector.67", i32, [4 x i8] }>
%"struct.HIR::Pattern::Data::Data_PathNamed" = type <{ %"class.HIR::Path", %"class.HIR::Pattern::PathBinding", %"class.std::vector.72", i8, [7 x i8] }>
%"class.std::vector.72" = type { %"struct.std::_Vector_base.73" }
%"struct.std::_Vector_base.73" = type { %"struct.std::_Vector_base<std::pair<RcString, HIR::Pattern>, std::allocator<std::pair<RcString, HIR::Pattern>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<RcString, HIR::Pattern>, std::allocator<std::pair<RcString, HIR::Pattern>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<RcString, HIR::Pattern>, std::allocator<std::pair<RcString, HIR::Pattern>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<RcString, HIR::Pattern>, std::allocator<std::pair<RcString, HIR::Pattern>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.std::pair.214" = type { %class.RcString, %"struct.HIR::Pattern" }
%"struct.HIR::Pattern::Data::Data_Slice" = type { %"class.std::vector.67" }
%"struct.HIR::Pattern::Data::Data_SplitSlice" = type { %"class.std::vector.67", %"struct.HIR::PatternBinding", %"class.std::vector.67" }
%"struct.HIR::PatternBinding" = type { i8, i32, %class.RcString, i32, i32 }

@.str.1 = external hidden unnamed_addr constant [71 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [39 x i8], align 1
@__PRETTY_FUNCTION__._ZN3HIR14ExprVisitorDef13visit_patternERK4SpanRNS_7PatternE = external hidden unnamed_addr constant [80 x i8], align 1

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3HIR14ExprVisitorDef13visit_patternERK4SpanRNS_7PatternE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(212) %2) unnamed_addr #4 align 2 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i8, align 1
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca i8, align 1
  %11 = alloca ptr, align 8
  %12 = alloca i8, align 1
  %13 = alloca ptr, align 8
  %14 = alloca i8, align 1
  %15 = alloca ptr, align 8
  %16 = alloca i8, align 1
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca %"class.__gnu_cxx::__normal_iterator.103", align 8
  %20 = alloca %"class.__gnu_cxx::__normal_iterator.103", align 8
  %21 = alloca ptr, align 8
  %22 = alloca i8, align 1
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca %"class.__gnu_cxx::__normal_iterator.103", align 8
  %26 = alloca %"class.__gnu_cxx::__normal_iterator.103", align 8
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca %"class.__gnu_cxx::__normal_iterator.103", align 8
  %30 = alloca %"class.__gnu_cxx::__normal_iterator.103", align 8
  %31 = alloca ptr, align 8
  %32 = alloca i8, align 1
  %33 = alloca ptr, align 8
  %34 = alloca i8, align 1
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca %"class.__gnu_cxx::__normal_iterator.103", align 8
  %38 = alloca %"class.__gnu_cxx::__normal_iterator.103", align 8
  %39 = alloca ptr, align 8
  %40 = alloca ptr, align 8
  %41 = alloca %"class.__gnu_cxx::__normal_iterator.103", align 8
  %42 = alloca %"class.__gnu_cxx::__normal_iterator.103", align 8
  %43 = alloca ptr, align 8
  %44 = alloca i8, align 1
  %45 = alloca ptr, align 8
  %46 = alloca ptr, align 8
  %47 = alloca %"class.__gnu_cxx::__normal_iterator.213", align 8
  %48 = alloca %"class.__gnu_cxx::__normal_iterator.213", align 8
  %49 = alloca ptr, align 8
  %50 = alloca i8, align 1
  %51 = alloca ptr, align 8
  %52 = alloca i8, align 1
  %53 = alloca ptr, align 8
  %54 = alloca i8, align 1
  %55 = alloca ptr, align 8
  %56 = alloca ptr, align 8
  %57 = alloca %"class.__gnu_cxx::__normal_iterator.103", align 8
  %58 = alloca %"class.__gnu_cxx::__normal_iterator.103", align 8
  %59 = alloca ptr, align 8
  %60 = alloca i8, align 1
  %61 = alloca ptr, align 8
  %62 = alloca ptr, align 8
  %63 = alloca %"class.__gnu_cxx::__normal_iterator.103", align 8
  %64 = alloca %"class.__gnu_cxx::__normal_iterator.103", align 8
  %65 = alloca ptr, align 8
  %66 = alloca ptr, align 8
  %67 = alloca %"class.__gnu_cxx::__normal_iterator.103", align 8
  %68 = alloca %"class.__gnu_cxx::__normal_iterator.103", align 8
  %69 = alloca ptr, align 8
  %70 = alloca i8, align 1
  %71 = alloca ptr, align 8
  %72 = alloca ptr, align 8
  %73 = alloca %"class.__gnu_cxx::__normal_iterator.103", align 8
  %74 = alloca %"class.__gnu_cxx::__normal_iterator.103", align 8
  %75 = alloca ptr, align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  %76 = load ptr, ptr %4, align 8
  call void @llvm.lifetime.start.p0(i64 1, ptr %7) #5
  store i8 1, ptr %7, align 1, !tbaa !9
  br label %77

77:                                               ; preds = %568, %3
  %78 = load i8, ptr %7, align 1, !tbaa !9, !range !11, !noundef !12
  %79 = trunc i8 %78 to i1
  br i1 %79, label %81, label %80

80:                                               ; preds = %77
  store i32 2, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %7) #5
  br label %569

81:                                               ; preds = %77
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #5
  %82 = load ptr, ptr %6, align 8, !tbaa !5
  %83 = getelementptr inbounds %"struct.HIR::Pattern", ptr %82, i32 0, i32 1
  store ptr %83, ptr %9, align 8, !tbaa !5
  br label %84

84:                                               ; preds = %566, %81
  %85 = load i8, ptr %7, align 1, !tbaa !9, !range !11, !noundef !12
  %86 = trunc i8 %85 to i1
  br i1 %86, label %88, label %87

87:                                               ; preds = %84
  store i32 5, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #5
  br label %567

88:                                               ; preds = %84
  %89 = load ptr, ptr %9, align 8, !tbaa !5
  %90 = call noundef i32 @_ZNK3HIR7Pattern4Data3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %89)
  switch i32 %90, label %565 [
    i32 0, label %91
    i32 1, label %92
    i32 2, label %110
    i32 3, label %135
    i32 4, label %160
    i32 5, label %199
    i32 6, label %259
    i32 7, label %282
    i32 8, label %347
    i32 10, label %392
    i32 11, label %410
    i32 12, label %428
    i32 13, label %467
    i32 9, label %527
  ]

91:                                               ; preds = %88
  call void @__assert_fail(ptr noundef @.str.2, ptr noundef @.str.1, i32 noundef 332, ptr noundef @__PRETTY_FUNCTION__._ZN3HIR14ExprVisitorDef13visit_patternERK4SpanRNS_7PatternE) #6
  unreachable

92:                                               ; preds = %88
  call void @llvm.lifetime.start.p0(i64 1, ptr %10) #5
  store i8 1, ptr %10, align 1, !tbaa !9
  br label %93

93:                                               ; preds = %108, %92
  %94 = load i8, ptr %10, align 1, !tbaa !9, !range !11, !noundef !12
  %95 = trunc i8 %94 to i1
  br i1 %95, label %97, label %96

96:                                               ; preds = %93
  store i32 9, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %10) #5
  br label %109

97:                                               ; preds = %93
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #5
  %98 = load ptr, ptr %9, align 8, !tbaa !5
  %99 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZN3HIR7Pattern4Data6as_AnyEv(ptr noundef nonnull align 8 dereferenceable(184) %98)
  store ptr %99, ptr %11, align 8, !tbaa !5
  br label %100

100:                                              ; preds = %106, %97
  %101 = load ptr, ptr %11, align 8, !tbaa !5
  %102 = load i8, ptr %10, align 1, !tbaa !9, !range !11, !noundef !12
  %103 = trunc i8 %102 to i1
  br i1 %103, label %105, label %104

104:                                              ; preds = %100
  store i32 12, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #5
  br label %107

105:                                              ; preds = %100
  br label %106

106:                                              ; preds = %105
  store i8 0, ptr %10, align 1, !tbaa !9
  br label %100, !llvm.loop !13

107:                                              ; preds = %104
  br label %108

108:                                              ; preds = %107
  store i8 0, ptr %10, align 1, !tbaa !9
  br label %93, !llvm.loop !15

109:                                              ; preds = %96
  br label %565

110:                                              ; preds = %88
  call void @llvm.lifetime.start.p0(i64 1, ptr %12) #5
  store i8 1, ptr %12, align 1, !tbaa !9
  br label %111

111:                                              ; preds = %133, %110
  %112 = load i8, ptr %12, align 1, !tbaa !9, !range !11, !noundef !12
  %113 = trunc i8 %112 to i1
  br i1 %113, label %115, label %114

114:                                              ; preds = %111
  store i32 15, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %12) #5
  br label %134

115:                                              ; preds = %111
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #5
  %116 = load ptr, ptr %9, align 8, !tbaa !5
  %117 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIR7Pattern4Data6as_BoxEv(ptr noundef nonnull align 8 dereferenceable(184) %116)
  store ptr %117, ptr %13, align 8, !tbaa !5
  br label %118

118:                                              ; preds = %131, %115
  %119 = load ptr, ptr %13, align 8, !tbaa !5
  %120 = load i8, ptr %12, align 1, !tbaa !9, !range !11, !noundef !12
  %121 = trunc i8 %120 to i1
  br i1 %121, label %123, label %122

122:                                              ; preds = %118
  store i32 18, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #5
  br label %132

123:                                              ; preds = %118
  %124 = load ptr, ptr %5, align 8, !tbaa !5
  %125 = load ptr, ptr %13, align 8, !tbaa !5
  %126 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_Box", ptr %125, i32 0, i32 0
  %127 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNKSt10unique_ptrIN3HIR7PatternESt14default_deleteIS1_EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %126) #5
  %128 = load ptr, ptr %76, align 8, !tbaa !16
  %129 = getelementptr inbounds ptr, ptr %128, i64 42
  %130 = load ptr, ptr %129, align 8
  call void %130(ptr noundef nonnull align 8 dereferenceable(8) %76, ptr noundef nonnull align 8 dereferenceable(8) %124, ptr noundef nonnull align 8 dereferenceable(212) %127)
  br label %131

131:                                              ; preds = %123
  store i8 0, ptr %12, align 1, !tbaa !9
  br label %118, !llvm.loop !18

132:                                              ; preds = %122
  br label %133

133:                                              ; preds = %132
  store i8 0, ptr %12, align 1, !tbaa !9
  br label %111, !llvm.loop !19

134:                                              ; preds = %114
  br label %565

135:                                              ; preds = %88
  call void @llvm.lifetime.start.p0(i64 1, ptr %14) #5
  store i8 1, ptr %14, align 1, !tbaa !9
  br label %136

136:                                              ; preds = %158, %135
  %137 = load i8, ptr %14, align 1, !tbaa !9, !range !11, !noundef !12
  %138 = trunc i8 %137 to i1
  br i1 %138, label %140, label %139

139:                                              ; preds = %136
  store i32 21, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #5
  br label %159

140:                                              ; preds = %136
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #5
  %141 = load ptr, ptr %9, align 8, !tbaa !5
  %142 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN3HIR7Pattern4Data6as_RefEv(ptr noundef nonnull align 8 dereferenceable(184) %141)
  store ptr %142, ptr %15, align 8, !tbaa !5
  br label %143

143:                                              ; preds = %156, %140
  %144 = load ptr, ptr %15, align 8, !tbaa !5
  %145 = load i8, ptr %14, align 1, !tbaa !9, !range !11, !noundef !12
  %146 = trunc i8 %145 to i1
  br i1 %146, label %148, label %147

147:                                              ; preds = %143
  store i32 24, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  br label %157

148:                                              ; preds = %143
  %149 = load ptr, ptr %5, align 8, !tbaa !5
  %150 = load ptr, ptr %15, align 8, !tbaa !5
  %151 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_Ref", ptr %150, i32 0, i32 1
  %152 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNKSt10unique_ptrIN3HIR7PatternESt14default_deleteIS1_EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %151) #5
  %153 = load ptr, ptr %76, align 8, !tbaa !16
  %154 = getelementptr inbounds ptr, ptr %153, i64 42
  %155 = load ptr, ptr %154, align 8
  call void %155(ptr noundef nonnull align 8 dereferenceable(8) %76, ptr noundef nonnull align 8 dereferenceable(8) %149, ptr noundef nonnull align 8 dereferenceable(212) %152)
  br label %156

156:                                              ; preds = %148
  store i8 0, ptr %14, align 1, !tbaa !9
  br label %143, !llvm.loop !20

157:                                              ; preds = %147
  br label %158

158:                                              ; preds = %157
  store i8 0, ptr %14, align 1, !tbaa !9
  br label %136, !llvm.loop !21

159:                                              ; preds = %139
  br label %565

160:                                              ; preds = %88
  call void @llvm.lifetime.start.p0(i64 1, ptr %16) #5
  store i8 1, ptr %16, align 1, !tbaa !9
  br label %161

161:                                              ; preds = %197, %160
  %162 = load i8, ptr %16, align 1, !tbaa !9, !range !11, !noundef !12
  %163 = trunc i8 %162 to i1
  br i1 %163, label %165, label %164

164:                                              ; preds = %161
  store i32 27, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %16) #5
  br label %198

165:                                              ; preds = %161
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #5
  %166 = load ptr, ptr %9, align 8, !tbaa !5
  %167 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN3HIR7Pattern4Data8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(184) %166)
  store ptr %167, ptr %17, align 8, !tbaa !5
  br label %168

168:                                              ; preds = %195, %165
  %169 = load ptr, ptr %17, align 8, !tbaa !5
  %170 = load i8, ptr %16, align 1, !tbaa !9, !range !11, !noundef !12
  %171 = trunc i8 %170 to i1
  br i1 %171, label %173, label %172

172:                                              ; preds = %168
  store i32 30, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #5
  br label %196

173:                                              ; preds = %168
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #5
  %174 = load ptr, ptr %17, align 8, !tbaa !5
  %175 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_Tuple", ptr %174, i32 0, i32 0
  store ptr %175, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #5
  %176 = load ptr, ptr %18, align 8, !tbaa !5
  %177 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %176) #5
  %178 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.103", ptr %19, i32 0, i32 0
  store ptr %177, ptr %178, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #5
  %179 = load ptr, ptr %18, align 8, !tbaa !5
  %180 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %179) #5
  %181 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.103", ptr %20, i32 0, i32 0
  store ptr %180, ptr %181, align 8
  br label %182

182:                                              ; preds = %192, %173
  %183 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %19, ptr noundef nonnull align 8 dereferenceable(8) %20) #5
  br i1 %183, label %185, label %184

184:                                              ; preds = %182
  store i32 33, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  br label %194

185:                                              ; preds = %182
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #5
  %186 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %19) #5
  store ptr %186, ptr %21, align 8, !tbaa !5
  %187 = load ptr, ptr %5, align 8, !tbaa !5
  %188 = load ptr, ptr %21, align 8, !tbaa !5
  %189 = load ptr, ptr %76, align 8, !tbaa !16
  %190 = getelementptr inbounds ptr, ptr %189, i64 42
  %191 = load ptr, ptr %190, align 8
  call void %191(ptr noundef nonnull align 8 dereferenceable(8) %76, ptr noundef nonnull align 8 dereferenceable(8) %187, ptr noundef nonnull align 8 dereferenceable(212) %188)
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  br label %192

192:                                              ; preds = %185
  %193 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %19) #5
  br label %182

194:                                              ; preds = %184
  br label %195

195:                                              ; preds = %194
  store i8 0, ptr %16, align 1, !tbaa !9
  br label %168, !llvm.loop !22

196:                                              ; preds = %172
  br label %197

197:                                              ; preds = %196
  store i8 0, ptr %16, align 1, !tbaa !9
  br label %161, !llvm.loop !23

198:                                              ; preds = %164
  br label %565

199:                                              ; preds = %88
  call void @llvm.lifetime.start.p0(i64 1, ptr %22) #5
  store i8 1, ptr %22, align 1, !tbaa !9
  br label %200

200:                                              ; preds = %257, %199
  %201 = load i8, ptr %22, align 1, !tbaa !9, !range !11, !noundef !12
  %202 = trunc i8 %201 to i1
  br i1 %202, label %204, label %203

203:                                              ; preds = %200
  store i32 35, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #5
  br label %258

204:                                              ; preds = %200
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #5
  %205 = load ptr, ptr %9, align 8, !tbaa !5
  %206 = call noundef nonnull align 8 dereferenceable(52) ptr @_ZN3HIR7Pattern4Data13as_SplitTupleEv(ptr noundef nonnull align 8 dereferenceable(184) %205)
  store ptr %206, ptr %23, align 8, !tbaa !5
  br label %207

207:                                              ; preds = %255, %204
  %208 = load ptr, ptr %23, align 8, !tbaa !5
  %209 = load i8, ptr %22, align 1, !tbaa !9, !range !11, !noundef !12
  %210 = trunc i8 %209 to i1
  br i1 %210, label %212, label %211

211:                                              ; preds = %207
  store i32 38, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  br label %256

212:                                              ; preds = %207
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #5
  %213 = load ptr, ptr %23, align 8, !tbaa !5
  %214 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_SplitTuple", ptr %213, i32 0, i32 0
  store ptr %214, ptr %24, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #5
  %215 = load ptr, ptr %24, align 8, !tbaa !5
  %216 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %215) #5
  %217 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.103", ptr %25, i32 0, i32 0
  store ptr %216, ptr %217, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #5
  %218 = load ptr, ptr %24, align 8, !tbaa !5
  %219 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %218) #5
  %220 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.103", ptr %26, i32 0, i32 0
  store ptr %219, ptr %220, align 8
  br label %221

221:                                              ; preds = %231, %212
  %222 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %25, ptr noundef nonnull align 8 dereferenceable(8) %26) #5
  br i1 %222, label %224, label %223

223:                                              ; preds = %221
  store i32 41, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  br label %233

224:                                              ; preds = %221
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #5
  %225 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %25) #5
  store ptr %225, ptr %27, align 8, !tbaa !5
  %226 = load ptr, ptr %5, align 8, !tbaa !5
  %227 = load ptr, ptr %27, align 8, !tbaa !5
  %228 = load ptr, ptr %76, align 8, !tbaa !16
  %229 = getelementptr inbounds ptr, ptr %228, i64 42
  %230 = load ptr, ptr %229, align 8
  call void %230(ptr noundef nonnull align 8 dereferenceable(8) %76, ptr noundef nonnull align 8 dereferenceable(8) %226, ptr noundef nonnull align 8 dereferenceable(212) %227)
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  br label %231

231:                                              ; preds = %224
  %232 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %25) #5
  br label %221

233:                                              ; preds = %223
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #5
  %234 = load ptr, ptr %23, align 8, !tbaa !5
  %235 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_SplitTuple", ptr %234, i32 0, i32 1
  store ptr %235, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #5
  %236 = load ptr, ptr %28, align 8, !tbaa !5
  %237 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %236) #5
  %238 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.103", ptr %29, i32 0, i32 0
  store ptr %237, ptr %238, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #5
  %239 = load ptr, ptr %28, align 8, !tbaa !5
  %240 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %239) #5
  %241 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.103", ptr %30, i32 0, i32 0
  store ptr %240, ptr %241, align 8
  br label %242

242:                                              ; preds = %252, %233
  %243 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %29, ptr noundef nonnull align 8 dereferenceable(8) %30) #5
  br i1 %243, label %245, label %244

244:                                              ; preds = %242
  store i32 43, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  br label %254

245:                                              ; preds = %242
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #5
  %246 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %29) #5
  store ptr %246, ptr %31, align 8, !tbaa !5
  %247 = load ptr, ptr %5, align 8, !tbaa !5
  %248 = load ptr, ptr %31, align 8, !tbaa !5
  %249 = load ptr, ptr %76, align 8, !tbaa !16
  %250 = getelementptr inbounds ptr, ptr %249, i64 42
  %251 = load ptr, ptr %250, align 8
  call void %251(ptr noundef nonnull align 8 dereferenceable(8) %76, ptr noundef nonnull align 8 dereferenceable(8) %247, ptr noundef nonnull align 8 dereferenceable(212) %248)
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #5
  br label %252

252:                                              ; preds = %245
  %253 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %29) #5
  br label %242

254:                                              ; preds = %244
  br label %255

255:                                              ; preds = %254
  store i8 0, ptr %22, align 1, !tbaa !9
  br label %207, !llvm.loop !24

256:                                              ; preds = %211
  br label %257

257:                                              ; preds = %256
  store i8 0, ptr %22, align 1, !tbaa !9
  br label %200, !llvm.loop !25

258:                                              ; preds = %203
  br label %565

259:                                              ; preds = %88
  call void @llvm.lifetime.start.p0(i64 1, ptr %32) #5
  store i8 1, ptr %32, align 1, !tbaa !9
  br label %260

260:                                              ; preds = %280, %259
  %261 = load i8, ptr %32, align 1, !tbaa !9, !range !11, !noundef !12
  %262 = trunc i8 %261 to i1
  br i1 %262, label %264, label %263

263:                                              ; preds = %260
  store i32 45, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %32) #5
  br label %281

264:                                              ; preds = %260
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #5
  %265 = load ptr, ptr %9, align 8, !tbaa !5
  %266 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZN3HIR7Pattern4Data12as_PathValueEv(ptr noundef nonnull align 8 dereferenceable(184) %265)
  store ptr %266, ptr %33, align 8, !tbaa !5
  br label %267

267:                                              ; preds = %278, %264
  %268 = load ptr, ptr %33, align 8, !tbaa !5
  %269 = load i8, ptr %32, align 1, !tbaa !9, !range !11, !noundef !12
  %270 = trunc i8 %269 to i1
  br i1 %270, label %272, label %271

271:                                              ; preds = %267
  store i32 48, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #5
  br label %279

272:                                              ; preds = %267
  %273 = load ptr, ptr %33, align 8, !tbaa !5
  %274 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_PathValue", ptr %273, i32 0, i32 0
  %275 = load ptr, ptr %76, align 8, !tbaa !16
  %276 = getelementptr inbounds ptr, ptr %275, i64 46
  %277 = load ptr, ptr %276, align 8
  call void %277(ptr noundef nonnull align 8 dereferenceable(8) %76, i32 noundef 2, ptr noundef nonnull align 8 dereferenceable(88) %274)
  br label %278

278:                                              ; preds = %272
  store i8 0, ptr %32, align 1, !tbaa !9
  br label %267, !llvm.loop !26

279:                                              ; preds = %271
  br label %280

280:                                              ; preds = %279
  store i8 0, ptr %32, align 1, !tbaa !9
  br label %260, !llvm.loop !27

281:                                              ; preds = %263
  br label %565

282:                                              ; preds = %88
  call void @llvm.lifetime.start.p0(i64 1, ptr %34) #5
  store i8 1, ptr %34, align 1, !tbaa !9
  br label %283

283:                                              ; preds = %345, %282
  %284 = load i8, ptr %34, align 1, !tbaa !9, !range !11, !noundef !12
  %285 = trunc i8 %284 to i1
  br i1 %285, label %287, label %286

286:                                              ; preds = %283
  store i32 51, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %34) #5
  br label %346

287:                                              ; preds = %283
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #5
  %288 = load ptr, ptr %9, align 8, !tbaa !5
  %289 = call noundef nonnull align 8 dereferenceable(172) ptr @_ZN3HIR7Pattern4Data12as_PathTupleEv(ptr noundef nonnull align 8 dereferenceable(184) %288)
  store ptr %289, ptr %35, align 8, !tbaa !5
  br label %290

290:                                              ; preds = %343, %287
  %291 = load ptr, ptr %35, align 8, !tbaa !5
  %292 = load i8, ptr %34, align 1, !tbaa !9, !range !11, !noundef !12
  %293 = trunc i8 %292 to i1
  br i1 %293, label %295, label %294

294:                                              ; preds = %290
  store i32 54, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #5
  br label %344

295:                                              ; preds = %290
  %296 = load ptr, ptr %35, align 8, !tbaa !5
  %297 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_PathTuple", ptr %296, i32 0, i32 0
  %298 = load ptr, ptr %76, align 8, !tbaa !16
  %299 = getelementptr inbounds ptr, ptr %298, i64 46
  %300 = load ptr, ptr %299, align 8
  call void %300(ptr noundef nonnull align 8 dereferenceable(8) %76, i32 noundef 2, ptr noundef nonnull align 8 dereferenceable(88) %297)
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #5
  %301 = load ptr, ptr %35, align 8, !tbaa !5
  %302 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_PathTuple", ptr %301, i32 0, i32 2
  store ptr %302, ptr %36, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #5
  %303 = load ptr, ptr %36, align 8, !tbaa !5
  %304 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %303) #5
  %305 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.103", ptr %37, i32 0, i32 0
  store ptr %304, ptr %305, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #5
  %306 = load ptr, ptr %36, align 8, !tbaa !5
  %307 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %306) #5
  %308 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.103", ptr %38, i32 0, i32 0
  store ptr %307, ptr %308, align 8
  br label %309

309:                                              ; preds = %319, %295
  %310 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %37, ptr noundef nonnull align 8 dereferenceable(8) %38) #5
  br i1 %310, label %312, label %311

311:                                              ; preds = %309
  store i32 57, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #5
  br label %321

312:                                              ; preds = %309
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #5
  %313 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %37) #5
  store ptr %313, ptr %39, align 8, !tbaa !5
  %314 = load ptr, ptr %5, align 8, !tbaa !5
  %315 = load ptr, ptr %39, align 8, !tbaa !5
  %316 = load ptr, ptr %76, align 8, !tbaa !16
  %317 = getelementptr inbounds ptr, ptr %316, i64 42
  %318 = load ptr, ptr %317, align 8
  call void %318(ptr noundef nonnull align 8 dereferenceable(8) %76, ptr noundef nonnull align 8 dereferenceable(8) %314, ptr noundef nonnull align 8 dereferenceable(212) %315)
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #5
  br label %319

319:                                              ; preds = %312
  %320 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %37) #5
  br label %309

321:                                              ; preds = %311
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #5
  %322 = load ptr, ptr %35, align 8, !tbaa !5
  %323 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_PathTuple", ptr %322, i32 0, i32 5
  store ptr %323, ptr %40, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #5
  %324 = load ptr, ptr %40, align 8, !tbaa !5
  %325 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %324) #5
  %326 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.103", ptr %41, i32 0, i32 0
  store ptr %325, ptr %326, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #5
  %327 = load ptr, ptr %40, align 8, !tbaa !5
  %328 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %327) #5
  %329 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.103", ptr %42, i32 0, i32 0
  store ptr %328, ptr %329, align 8
  br label %330

330:                                              ; preds = %340, %321
  %331 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %41, ptr noundef nonnull align 8 dereferenceable(8) %42) #5
  br i1 %331, label %333, label %332

332:                                              ; preds = %330
  store i32 59, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #5
  br label %342

333:                                              ; preds = %330
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #5
  %334 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %41) #5
  store ptr %334, ptr %43, align 8, !tbaa !5
  %335 = load ptr, ptr %5, align 8, !tbaa !5
  %336 = load ptr, ptr %43, align 8, !tbaa !5
  %337 = load ptr, ptr %76, align 8, !tbaa !16
  %338 = getelementptr inbounds ptr, ptr %337, i64 42
  %339 = load ptr, ptr %338, align 8
  call void %339(ptr noundef nonnull align 8 dereferenceable(8) %76, ptr noundef nonnull align 8 dereferenceable(8) %335, ptr noundef nonnull align 8 dereferenceable(212) %336)
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #5
  br label %340

340:                                              ; preds = %333
  %341 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %41) #5
  br label %330

342:                                              ; preds = %332
  br label %343

343:                                              ; preds = %342
  store i8 0, ptr %34, align 1, !tbaa !9
  br label %290, !llvm.loop !28

344:                                              ; preds = %294
  br label %345

345:                                              ; preds = %344
  store i8 0, ptr %34, align 1, !tbaa !9
  br label %283, !llvm.loop !29

346:                                              ; preds = %286
  br label %565

347:                                              ; preds = %88
  call void @llvm.lifetime.start.p0(i64 1, ptr %44) #5
  store i8 1, ptr %44, align 1, !tbaa !9
  br label %348

348:                                              ; preds = %390, %347
  %349 = load i8, ptr %44, align 1, !tbaa !9, !range !11, !noundef !12
  %350 = trunc i8 %349 to i1
  br i1 %350, label %352, label %351

351:                                              ; preds = %348
  store i32 61, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %44) #5
  br label %391

352:                                              ; preds = %348
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #5
  %353 = load ptr, ptr %9, align 8, !tbaa !5
  %354 = call noundef nonnull align 8 dereferenceable(137) ptr @_ZN3HIR7Pattern4Data12as_PathNamedEv(ptr noundef nonnull align 8 dereferenceable(184) %353)
  store ptr %354, ptr %45, align 8, !tbaa !5
  br label %355

355:                                              ; preds = %388, %352
  %356 = load ptr, ptr %45, align 8, !tbaa !5
  %357 = load i8, ptr %44, align 1, !tbaa !9, !range !11, !noundef !12
  %358 = trunc i8 %357 to i1
  br i1 %358, label %360, label %359

359:                                              ; preds = %355
  store i32 64, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #5
  br label %389

360:                                              ; preds = %355
  %361 = load ptr, ptr %45, align 8, !tbaa !5
  %362 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_PathNamed", ptr %361, i32 0, i32 0
  %363 = load ptr, ptr %76, align 8, !tbaa !16
  %364 = getelementptr inbounds ptr, ptr %363, i64 46
  %365 = load ptr, ptr %364, align 8
  call void %365(ptr noundef nonnull align 8 dereferenceable(8) %76, i32 noundef 0, ptr noundef nonnull align 8 dereferenceable(88) %362)
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #5
  %366 = load ptr, ptr %45, align 8, !tbaa !5
  %367 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_PathNamed", ptr %366, i32 0, i32 2
  store ptr %367, ptr %46, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #5
  %368 = load ptr, ptr %46, align 8, !tbaa !5
  %369 = call ptr @_ZNSt6vectorISt4pairI8RcStringN3HIR7PatternEESaIS4_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %368) #5
  %370 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.213", ptr %47, i32 0, i32 0
  store ptr %369, ptr %370, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #5
  %371 = load ptr, ptr %46, align 8, !tbaa !5
  %372 = call ptr @_ZNSt6vectorISt4pairI8RcStringN3HIR7PatternEESaIS4_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %371) #5
  %373 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.213", ptr %48, i32 0, i32 0
  store ptr %372, ptr %373, align 8
  br label %374

374:                                              ; preds = %385, %360
  %375 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPSt4pairI8RcStringN3HIR7PatternEESt6vectorIS5_SaIS5_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_(ptr noundef nonnull align 8 dereferenceable(8) %47, ptr noundef nonnull align 8 dereferenceable(8) %48) #5
  br i1 %375, label %377, label %376

376:                                              ; preds = %374
  store i32 67, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #5
  br label %387

377:                                              ; preds = %374
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #5
  %378 = call noundef nonnull align 8 dereferenceable(224) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairI8RcStringN3HIR7PatternEESt6vectorIS5_SaIS5_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %47) #5
  store ptr %378, ptr %49, align 8, !tbaa !5
  %379 = load ptr, ptr %5, align 8, !tbaa !5
  %380 = load ptr, ptr %49, align 8, !tbaa !5
  %381 = getelementptr inbounds %"struct.std::pair.214", ptr %380, i32 0, i32 1
  %382 = load ptr, ptr %76, align 8, !tbaa !16
  %383 = getelementptr inbounds ptr, ptr %382, i64 42
  %384 = load ptr, ptr %383, align 8
  call void %384(ptr noundef nonnull align 8 dereferenceable(8) %76, ptr noundef nonnull align 8 dereferenceable(8) %379, ptr noundef nonnull align 8 dereferenceable(212) %381)
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #5
  br label %385

385:                                              ; preds = %377
  %386 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPSt4pairI8RcStringN3HIR7PatternEESt6vectorIS5_SaIS5_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %47) #5
  br label %374

387:                                              ; preds = %376
  br label %388

388:                                              ; preds = %387
  store i8 0, ptr %44, align 1, !tbaa !9
  br label %355, !llvm.loop !30

389:                                              ; preds = %359
  br label %390

390:                                              ; preds = %389
  store i8 0, ptr %44, align 1, !tbaa !9
  br label %348, !llvm.loop !31

391:                                              ; preds = %351
  br label %565

392:                                              ; preds = %88
  call void @llvm.lifetime.start.p0(i64 1, ptr %50) #5
  store i8 1, ptr %50, align 1, !tbaa !9
  br label %393

393:                                              ; preds = %408, %392
  %394 = load i8, ptr %50, align 1, !tbaa !9, !range !11, !noundef !12
  %395 = trunc i8 %394 to i1
  br i1 %395, label %397, label %396

396:                                              ; preds = %393
  store i32 69, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %50) #5
  br label %409

397:                                              ; preds = %393
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #5
  %398 = load ptr, ptr %9, align 8, !tbaa !5
  %399 = call noundef nonnull align 8 dereferenceable(104) ptr @_ZN3HIR7Pattern4Data8as_ValueEv(ptr noundef nonnull align 8 dereferenceable(184) %398)
  store ptr %399, ptr %51, align 8, !tbaa !5
  br label %400

400:                                              ; preds = %406, %397
  %401 = load ptr, ptr %51, align 8, !tbaa !5
  %402 = load i8, ptr %50, align 1, !tbaa !9, !range !11, !noundef !12
  %403 = trunc i8 %402 to i1
  br i1 %403, label %405, label %404

404:                                              ; preds = %400
  store i32 72, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #5
  br label %407

405:                                              ; preds = %400
  br label %406

406:                                              ; preds = %405
  store i8 0, ptr %50, align 1, !tbaa !9
  br label %400, !llvm.loop !32

407:                                              ; preds = %404
  br label %408

408:                                              ; preds = %407
  store i8 0, ptr %50, align 1, !tbaa !9
  br label %393, !llvm.loop !33

409:                                              ; preds = %396
  br label %565

410:                                              ; preds = %88
  call void @llvm.lifetime.start.p0(i64 1, ptr %52) #5
  store i8 1, ptr %52, align 1, !tbaa !9
  br label %411

411:                                              ; preds = %426, %410
  %412 = load i8, ptr %52, align 1, !tbaa !9, !range !11, !noundef !12
  %413 = trunc i8 %412 to i1
  br i1 %413, label %415, label %414

414:                                              ; preds = %411
  store i32 75, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %52) #5
  br label %427

415:                                              ; preds = %411
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #5
  %416 = load ptr, ptr %9, align 8, !tbaa !5
  %417 = call noundef nonnull align 8 dereferenceable(17) ptr @_ZN3HIR7Pattern4Data8as_RangeEv(ptr noundef nonnull align 8 dereferenceable(184) %416)
  store ptr %417, ptr %53, align 8, !tbaa !5
  br label %418

418:                                              ; preds = %424, %415
  %419 = load ptr, ptr %53, align 8, !tbaa !5
  %420 = load i8, ptr %52, align 1, !tbaa !9, !range !11, !noundef !12
  %421 = trunc i8 %420 to i1
  br i1 %421, label %423, label %422

422:                                              ; preds = %418
  store i32 78, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #5
  br label %425

423:                                              ; preds = %418
  br label %424

424:                                              ; preds = %423
  store i8 0, ptr %52, align 1, !tbaa !9
  br label %418, !llvm.loop !34

425:                                              ; preds = %422
  br label %426

426:                                              ; preds = %425
  store i8 0, ptr %52, align 1, !tbaa !9
  br label %411, !llvm.loop !35

427:                                              ; preds = %414
  br label %565

428:                                              ; preds = %88
  call void @llvm.lifetime.start.p0(i64 1, ptr %54) #5
  store i8 1, ptr %54, align 1, !tbaa !9
  br label %429

429:                                              ; preds = %465, %428
  %430 = load i8, ptr %54, align 1, !tbaa !9, !range !11, !noundef !12
  %431 = trunc i8 %430 to i1
  br i1 %431, label %433, label %432

432:                                              ; preds = %429
  store i32 81, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %54) #5
  br label %466

433:                                              ; preds = %429
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #5
  %434 = load ptr, ptr %9, align 8, !tbaa !5
  %435 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN3HIR7Pattern4Data8as_SliceEv(ptr noundef nonnull align 8 dereferenceable(184) %434)
  store ptr %435, ptr %55, align 8, !tbaa !5
  br label %436

436:                                              ; preds = %463, %433
  %437 = load ptr, ptr %55, align 8, !tbaa !5
  %438 = load i8, ptr %54, align 1, !tbaa !9, !range !11, !noundef !12
  %439 = trunc i8 %438 to i1
  br i1 %439, label %441, label %440

440:                                              ; preds = %436
  store i32 84, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #5
  br label %464

441:                                              ; preds = %436
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #5
  %442 = load ptr, ptr %55, align 8, !tbaa !5
  %443 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_Slice", ptr %442, i32 0, i32 0
  store ptr %443, ptr %56, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #5
  %444 = load ptr, ptr %56, align 8, !tbaa !5
  %445 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %444) #5
  %446 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.103", ptr %57, i32 0, i32 0
  store ptr %445, ptr %446, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #5
  %447 = load ptr, ptr %56, align 8, !tbaa !5
  %448 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %447) #5
  %449 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.103", ptr %58, i32 0, i32 0
  store ptr %448, ptr %449, align 8
  br label %450

450:                                              ; preds = %460, %441
  %451 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %57, ptr noundef nonnull align 8 dereferenceable(8) %58) #5
  br i1 %451, label %453, label %452

452:                                              ; preds = %450
  store i32 87, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #5
  br label %462

453:                                              ; preds = %450
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #5
  %454 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %57) #5
  store ptr %454, ptr %59, align 8, !tbaa !5
  %455 = load ptr, ptr %5, align 8, !tbaa !5
  %456 = load ptr, ptr %59, align 8, !tbaa !5
  %457 = load ptr, ptr %76, align 8, !tbaa !16
  %458 = getelementptr inbounds ptr, ptr %457, i64 42
  %459 = load ptr, ptr %458, align 8
  call void %459(ptr noundef nonnull align 8 dereferenceable(8) %76, ptr noundef nonnull align 8 dereferenceable(8) %455, ptr noundef nonnull align 8 dereferenceable(212) %456)
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #5
  br label %460

460:                                              ; preds = %453
  %461 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %57) #5
  br label %450

462:                                              ; preds = %452
  br label %463

463:                                              ; preds = %462
  store i8 0, ptr %54, align 1, !tbaa !9
  br label %436, !llvm.loop !36

464:                                              ; preds = %440
  br label %465

465:                                              ; preds = %464
  store i8 0, ptr %54, align 1, !tbaa !9
  br label %429, !llvm.loop !37

466:                                              ; preds = %432
  br label %565

467:                                              ; preds = %88
  call void @llvm.lifetime.start.p0(i64 1, ptr %60) #5
  store i8 1, ptr %60, align 1, !tbaa !9
  br label %468

468:                                              ; preds = %525, %467
  %469 = load i8, ptr %60, align 1, !tbaa !9, !range !11, !noundef !12
  %470 = trunc i8 %469 to i1
  br i1 %470, label %472, label %471

471:                                              ; preds = %468
  store i32 89, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %60) #5
  br label %526

472:                                              ; preds = %468
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #5
  %473 = load ptr, ptr %9, align 8, !tbaa !5
  %474 = call noundef nonnull align 8 dereferenceable(72) ptr @_ZN3HIR7Pattern4Data13as_SplitSliceEv(ptr noundef nonnull align 8 dereferenceable(184) %473)
  store ptr %474, ptr %61, align 8, !tbaa !5
  br label %475

475:                                              ; preds = %523, %472
  %476 = load ptr, ptr %61, align 8, !tbaa !5
  %477 = load i8, ptr %60, align 1, !tbaa !9, !range !11, !noundef !12
  %478 = trunc i8 %477 to i1
  br i1 %478, label %480, label %479

479:                                              ; preds = %475
  store i32 92, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #5
  br label %524

480:                                              ; preds = %475
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #5
  %481 = load ptr, ptr %61, align 8, !tbaa !5
  %482 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_SplitSlice", ptr %481, i32 0, i32 0
  store ptr %482, ptr %62, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #5
  %483 = load ptr, ptr %62, align 8, !tbaa !5
  %484 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %483) #5
  %485 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.103", ptr %63, i32 0, i32 0
  store ptr %484, ptr %485, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #5
  %486 = load ptr, ptr %62, align 8, !tbaa !5
  %487 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %486) #5
  %488 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.103", ptr %64, i32 0, i32 0
  store ptr %487, ptr %488, align 8
  br label %489

489:                                              ; preds = %499, %480
  %490 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %63, ptr noundef nonnull align 8 dereferenceable(8) %64) #5
  br i1 %490, label %492, label %491

491:                                              ; preds = %489
  store i32 95, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #5
  br label %501

492:                                              ; preds = %489
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #5
  %493 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %63) #5
  store ptr %493, ptr %65, align 8, !tbaa !5
  %494 = load ptr, ptr %5, align 8, !tbaa !5
  %495 = load ptr, ptr %65, align 8, !tbaa !5
  %496 = load ptr, ptr %76, align 8, !tbaa !16
  %497 = getelementptr inbounds ptr, ptr %496, i64 42
  %498 = load ptr, ptr %497, align 8
  call void %498(ptr noundef nonnull align 8 dereferenceable(8) %76, ptr noundef nonnull align 8 dereferenceable(8) %494, ptr noundef nonnull align 8 dereferenceable(212) %495)
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #5
  br label %499

499:                                              ; preds = %492
  %500 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %63) #5
  br label %489

501:                                              ; preds = %491
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #5
  %502 = load ptr, ptr %61, align 8, !tbaa !5
  %503 = getelementptr inbounds %"struct.HIR::Pattern::Data::Data_SplitSlice", ptr %502, i32 0, i32 2
  store ptr %503, ptr %66, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #5
  %504 = load ptr, ptr %66, align 8, !tbaa !5
  %505 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %504) #5
  %506 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.103", ptr %67, i32 0, i32 0
  store ptr %505, ptr %506, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #5
  %507 = load ptr, ptr %66, align 8, !tbaa !5
  %508 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %507) #5
  %509 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.103", ptr %68, i32 0, i32 0
  store ptr %508, ptr %509, align 8
  br label %510

510:                                              ; preds = %520, %501
  %511 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %67, ptr noundef nonnull align 8 dereferenceable(8) %68) #5
  br i1 %511, label %513, label %512

512:                                              ; preds = %510
  store i32 97, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #5
  br label %522

513:                                              ; preds = %510
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #5
  %514 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %67) #5
  store ptr %514, ptr %69, align 8, !tbaa !5
  %515 = load ptr, ptr %5, align 8, !tbaa !5
  %516 = load ptr, ptr %69, align 8, !tbaa !5
  %517 = load ptr, ptr %76, align 8, !tbaa !16
  %518 = getelementptr inbounds ptr, ptr %517, i64 42
  %519 = load ptr, ptr %518, align 8
  call void %519(ptr noundef nonnull align 8 dereferenceable(8) %76, ptr noundef nonnull align 8 dereferenceable(8) %515, ptr noundef nonnull align 8 dereferenceable(212) %516)
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #5
  br label %520

520:                                              ; preds = %513
  %521 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %67) #5
  br label %510

522:                                              ; preds = %512
  br label %523

523:                                              ; preds = %522
  store i8 0, ptr %60, align 1, !tbaa !9
  br label %475, !llvm.loop !38

524:                                              ; preds = %479
  br label %525

525:                                              ; preds = %524
  store i8 0, ptr %60, align 1, !tbaa !9
  br label %468, !llvm.loop !39

526:                                              ; preds = %471
  br label %565

527:                                              ; preds = %88
  call void @llvm.lifetime.start.p0(i64 1, ptr %70) #5
  store i8 1, ptr %70, align 1, !tbaa !9
  br label %528

528:                                              ; preds = %563, %527
  %529 = load i8, ptr %70, align 1, !tbaa !9, !range !11, !noundef !12
  %530 = trunc i8 %529 to i1
  br i1 %530, label %532, label %531

531:                                              ; preds = %528
  store i32 99, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %70) #5
  br label %564

532:                                              ; preds = %528
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #5
  %533 = load ptr, ptr %9, align 8, !tbaa !5
  %534 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN3HIR7Pattern4Data5as_OrEv(ptr noundef nonnull align 8 dereferenceable(184) %533)
  store ptr %534, ptr %71, align 8, !tbaa !5
  br label %535

535:                                              ; preds = %561, %532
  %536 = load ptr, ptr %71, align 8, !tbaa !5
  %537 = load i8, ptr %70, align 1, !tbaa !9, !range !11, !noundef !12
  %538 = trunc i8 %537 to i1
  br i1 %538, label %540, label %539

539:                                              ; preds = %535
  store i32 102, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #5
  br label %562

540:                                              ; preds = %535
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #5
  %541 = load ptr, ptr %71, align 8, !tbaa !5
  store ptr %541, ptr %72, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #5
  %542 = load ptr, ptr %72, align 8, !tbaa !5
  %543 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %542) #5
  %544 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.103", ptr %73, i32 0, i32 0
  store ptr %543, ptr %544, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #5
  %545 = load ptr, ptr %72, align 8, !tbaa !5
  %546 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %545) #5
  %547 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.103", ptr %74, i32 0, i32 0
  store ptr %546, ptr %547, align 8
  br label %548

548:                                              ; preds = %558, %540
  %549 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %73, ptr noundef nonnull align 8 dereferenceable(8) %74) #5
  br i1 %549, label %551, label %550

550:                                              ; preds = %548
  store i32 105, ptr %8, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #5
  br label %560

551:                                              ; preds = %548
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #5
  %552 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %73) #5
  store ptr %552, ptr %75, align 8, !tbaa !5
  %553 = load ptr, ptr %5, align 8, !tbaa !5
  %554 = load ptr, ptr %75, align 8, !tbaa !5
  %555 = load ptr, ptr %76, align 8, !tbaa !16
  %556 = getelementptr inbounds ptr, ptr %555, i64 42
  %557 = load ptr, ptr %556, align 8
  call void %557(ptr noundef nonnull align 8 dereferenceable(8) %76, ptr noundef nonnull align 8 dereferenceable(8) %553, ptr noundef nonnull align 8 dereferenceable(212) %554)
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #5
  br label %558

558:                                              ; preds = %551
  %559 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %73) #5
  br label %548

560:                                              ; preds = %550
  br label %561

561:                                              ; preds = %560
  store i8 0, ptr %70, align 1, !tbaa !9
  br label %535, !llvm.loop !40

562:                                              ; preds = %539
  br label %563

563:                                              ; preds = %562
  store i8 0, ptr %70, align 1, !tbaa !9
  br label %528, !llvm.loop !41

564:                                              ; preds = %531
  br label %565

565:                                              ; preds = %564, %526, %466, %427, %409, %391, %346, %281, %258, %198, %159, %134, %109, %88
  br label %566

566:                                              ; preds = %565
  store i8 0, ptr %7, align 1, !tbaa !9
  br label %84, !llvm.loop !42

567:                                              ; preds = %87
  br label %568

568:                                              ; preds = %567
  store i8 0, ptr %7, align 1, !tbaa !9
  br label %77, !llvm.loop !43

569:                                              ; preds = %80
  ret void
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"bool", !7, i64 0}
!11 = !{i8 0, i8 2}
!12 = !{}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}
!16 = !{!17, !17, i64 0}
!17 = !{!"vtable pointer", !8, i64 0}
!18 = distinct !{!18, !14}
!19 = distinct !{!19, !14}
!20 = distinct !{!20, !14}
!21 = distinct !{!21, !14}
!22 = distinct !{!22, !14}
!23 = distinct !{!23, !14}
!24 = distinct !{!24, !14}
!25 = distinct !{!25, !14}
!26 = distinct !{!26, !14}
!27 = distinct !{!27, !14}
!28 = distinct !{!28, !14}
!29 = distinct !{!29, !14}
!30 = distinct !{!30, !14}
!31 = distinct !{!31, !14}
!32 = distinct !{!32, !14}
!33 = distinct !{!33, !14}
!34 = distinct !{!34, !14}
!35 = distinct !{!35, !14}
!36 = distinct !{!36, !14}
!37 = distinct !{!37, !14}
!38 = distinct !{!38, !14}
!39 = distinct !{!39, !14}
!40 = distinct !{!40, !14}
!41 = distinct !{!41, !14}
!42 = distinct !{!42, !14}
!43 = distinct !{!43, !14}


; 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.__gnu_cxx::__normal_iterator.103" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.213" = type { ptr }

@.str.1 = external hidden unnamed_addr constant [71 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [39 x i8], align 1
@__PRETTY_FUNCTION__._ZN3HIR14ExprVisitorDef13visit_patternERK4SpanRNS_7PatternE = external hidden unnamed_addr constant [80 x i8], align 1

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN3HIR14ExprVisitorDef13visit_patternERK4SpanRNS_7PatternE(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(212) %2) unnamed_addr #4 align 2 {
.lr.ph355:
  %3 = alloca %"class.__gnu_cxx::__normal_iterator.103", align 8
  %4 = alloca %"class.__gnu_cxx::__normal_iterator.103", align 8
  %5 = alloca %"class.__gnu_cxx::__normal_iterator.103", align 8
  %6 = alloca %"class.__gnu_cxx::__normal_iterator.103", align 8
  %7 = alloca %"class.__gnu_cxx::__normal_iterator.103", align 8
  %8 = alloca %"class.__gnu_cxx::__normal_iterator.103", align 8
  %9 = alloca %"class.__gnu_cxx::__normal_iterator.103", align 8
  %10 = alloca %"class.__gnu_cxx::__normal_iterator.103", align 8
  %11 = alloca %"class.__gnu_cxx::__normal_iterator.103", align 8
  %12 = alloca %"class.__gnu_cxx::__normal_iterator.103", align 8
  %13 = alloca %"class.__gnu_cxx::__normal_iterator.213", align 8
  %14 = alloca %"class.__gnu_cxx::__normal_iterator.213", align 8
  %15 = alloca %"class.__gnu_cxx::__normal_iterator.103", align 8
  %16 = alloca %"class.__gnu_cxx::__normal_iterator.103", align 8
  %17 = alloca %"class.__gnu_cxx::__normal_iterator.103", align 8
  %18 = alloca %"class.__gnu_cxx::__normal_iterator.103", align 8
  %19 = alloca %"class.__gnu_cxx::__normal_iterator.103", align 8
  %20 = alloca %"class.__gnu_cxx::__normal_iterator.103", align 8
  %21 = alloca %"class.__gnu_cxx::__normal_iterator.103", align 8
  %22 = alloca %"class.__gnu_cxx::__normal_iterator.103", align 8
  %23 = getelementptr inbounds i8, ptr %2, i64 24
  %24 = tail call noundef i32 @_ZNK3HIR7Pattern4Data3tagEv(ptr noundef nonnull align 8 dereferenceable(184) %23)
  switch i32 %24, label %.loopexit176 [
    i32 0, label %63
    i32 1, label %.preheader
    i32 2, label %.preheader152
    i32 3, label %.preheader154
    i32 4, label %.preheader156
    i32 5, label %.lr.ph272
    i32 6, label %.preheader160
    i32 7, label %.lr.ph248
    i32 8, label %.preheader164
    i32 10, label %.preheader166
    i32 11, label %.preheader168
    i32 12, label %.preheader170
    i32 13, label %.lr.ph191
    i32 9, label %.preheader174
  ]

.loopexit176:                                     ; preds = %.preheader168, %.preheader166, %.preheader, %.lr.ph355, %.preheader152, %.preheader154, %..loopexit141_crit_edge, %.preheader160, %..loopexit145_crit_edge, %..loopexit148_crit_edge, %..loopexit150_crit_edge, %..loopexit142_crit_edge, %..loopexit144_crit_edge, %..loopexit149_crit_edge
  ret void

.preheader174:                                    ; preds = %.lr.ph355
  %25 = tail call noundef nonnull align 8 dereferenceable(24) ptr @_ZN3HIR7Pattern4Data5as_OrEv(ptr noundef nonnull align 8 dereferenceable(184) %23)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #5
  %26 = tail call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %25) #5
  store ptr %26, ptr %21, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #5
  %27 = tail call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %25) #5
  store ptr %27, ptr %22, align 8
  %28 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %21, ptr noundef nonnull align 8 dereferenceable(8) %22) #5
  br i1 %28, label %.lr.ph, label %..loopexit150_crit_edge

.preheader170:                                    ; preds = %.lr.ph355
  %29 = tail call noundef nonnull align 8 dereferenceable(24) ptr @_ZN3HIR7Pattern4Data8as_SliceEv(ptr noundef nonnull align 8 dereferenceable(184) %23)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #5
  %30 = tail call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %29) #5
  store ptr %30, ptr %15, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #5
  %31 = tail call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %29) #5
  store ptr %31, ptr %16, align 8
  %32 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(8) %16) #5
  br i1 %32, label %.lr.ph194, label %..loopexit148_crit_edge

.preheader168:                                    ; preds = %.lr.ph355
  %33 = tail call noundef nonnull align 8 dereferenceable(17) ptr @_ZN3HIR7Pattern4Data8as_RangeEv(ptr noundef nonnull align 8 dereferenceable(184) %23)
  br label %.loopexit176

.preheader166:                                    ; preds = %.lr.ph355
  %34 = tail call noundef nonnull align 8 dereferenceable(104) ptr @_ZN3HIR7Pattern4Data8as_ValueEv(ptr noundef nonnull align 8 dereferenceable(184) %23)
  br label %.loopexit176

.preheader164:                                    ; preds = %.lr.ph355
  %35 = tail call noundef nonnull align 8 dereferenceable(137) ptr @_ZN3HIR7Pattern4Data12as_PathNamedEv(ptr noundef nonnull align 8 dereferenceable(184) %23)
  %36 = getelementptr inbounds i8, ptr %35, i64 112
  %37 = load ptr, ptr %0, align 8, !tbaa !5
  %38 = getelementptr inbounds i8, ptr %37, i64 368
  %39 = load ptr, ptr %38, align 8
  tail call void %39(ptr noundef nonnull align 8 dereferenceable(8) %0, i32 noundef 0, ptr noundef nonnull align 8 dereferenceable(88) %35)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #5
  %40 = tail call ptr @_ZNSt6vectorISt4pairI8RcStringN3HIR7PatternEESaIS4_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %36) #5
  store ptr %40, ptr %13, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #5
  %41 = tail call ptr @_ZNSt6vectorISt4pairI8RcStringN3HIR7PatternEESaIS4_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %36) #5
  store ptr %41, ptr %14, align 8
  %42 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPSt4pairI8RcStringN3HIR7PatternEESt6vectorIS5_SaIS5_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %14) #5
  br i1 %42, label %.lr.ph223, label %..loopexit145_crit_edge

.preheader160:                                    ; preds = %.lr.ph355
  %43 = tail call noundef nonnull align 8 dereferenceable(112) ptr @_ZN3HIR7Pattern4Data12as_PathValueEv(ptr noundef nonnull align 8 dereferenceable(184) %23)
  %44 = load ptr, ptr %0, align 8, !tbaa !5
  %45 = getelementptr inbounds i8, ptr %44, i64 368
  %46 = load ptr, ptr %45, align 8
  tail call void %46(ptr noundef nonnull align 8 dereferenceable(8) %0, i32 noundef 2, ptr noundef nonnull align 8 dereferenceable(88) %43)
  br label %.loopexit176

.preheader156:                                    ; preds = %.lr.ph355
  %47 = tail call noundef nonnull align 8 dereferenceable(24) ptr @_ZN3HIR7Pattern4Data8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(184) %23)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #5
  %48 = tail call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %47) #5
  store ptr %48, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #5
  %49 = tail call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %47) #5
  store ptr %49, ptr %4, align 8
  %50 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef nonnull align 8 dereferenceable(8) %4) #5
  br i1 %50, label %.lr.ph275, label %..loopexit141_crit_edge

.preheader154:                                    ; preds = %.lr.ph355
  %51 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZN3HIR7Pattern4Data6as_RefEv(ptr noundef nonnull align 8 dereferenceable(184) %23)
  %52 = getelementptr inbounds i8, ptr %51, i64 8
  %53 = tail call noundef nonnull align 8 dereferenceable(212) ptr @_ZNKSt10unique_ptrIN3HIR7PatternESt14default_deleteIS1_EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %52) #5
  %54 = load ptr, ptr %0, align 8, !tbaa !5
  %55 = getelementptr inbounds i8, ptr %54, i64 336
  %56 = load ptr, ptr %55, align 8
  tail call void %56(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(212) %53)
  br label %.loopexit176

.preheader152:                                    ; preds = %.lr.ph355
  %57 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3HIR7Pattern4Data6as_BoxEv(ptr noundef nonnull align 8 dereferenceable(184) %23)
  %58 = tail call noundef nonnull align 8 dereferenceable(212) ptr @_ZNKSt10unique_ptrIN3HIR7PatternESt14default_deleteIS1_EEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %57) #5
  %59 = load ptr, ptr %0, align 8, !tbaa !5
  %60 = getelementptr inbounds i8, ptr %59, i64 336
  %61 = load ptr, ptr %60, align 8
  tail call void %61(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(212) %58)
  br label %.loopexit176

.preheader:                                       ; preds = %.lr.ph355
  %62 = tail call noundef nonnull align 1 dereferenceable(1) ptr @_ZN3HIR7Pattern4Data6as_AnyEv(ptr noundef nonnull align 8 dereferenceable(184) %23)
  br label %.loopexit176

63:                                               ; preds = %.lr.ph355
  tail call void @__assert_fail(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.1, i32 noundef 332, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN3HIR14ExprVisitorDef13visit_patternERK4SpanRNS_7PatternE) #6
  unreachable

..loopexit141_crit_edge:                          ; preds = %.lr.ph275, %.preheader156
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #5
  br label %.loopexit176

.lr.ph275:                                        ; preds = %.preheader156, %.lr.ph275
  %64 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %3) #5
  %65 = load ptr, ptr %0, align 8, !tbaa !5
  %66 = getelementptr inbounds i8, ptr %65, i64 336
  %67 = load ptr, ptr %66, align 8
  call void %67(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(212) %64)
  %68 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %3) #5
  %69 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef nonnull align 8 dereferenceable(8) %4) #5
  br i1 %69, label %.lr.ph275, label %..loopexit141_crit_edge

.lr.ph272:                                        ; preds = %.lr.ph355
  %70 = tail call noundef nonnull align 8 dereferenceable(52) ptr @_ZN3HIR7Pattern4Data13as_SplitTupleEv(ptr noundef nonnull align 8 dereferenceable(184) %23)
  %71 = getelementptr inbounds i8, ptr %70, i64 24
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #5
  %72 = tail call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %70) #5
  store ptr %72, ptr %5, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #5
  %73 = tail call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %70) #5
  store ptr %73, ptr %6, align 8
  %74 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %5, ptr noundef nonnull align 8 dereferenceable(8) %6) #5
  br i1 %74, label %.lr.ph266, label %._crit_edge267

._crit_edge267:                                   ; preds = %.lr.ph266, %.lr.ph272
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #5
  %75 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %71) #5
  store ptr %75, ptr %7, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #5
  %76 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %71) #5
  store ptr %76, ptr %8, align 8
  %77 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %7, ptr noundef nonnull align 8 dereferenceable(8) %8) #5
  br i1 %77, label %.lr.ph269, label %..loopexit142_crit_edge

.lr.ph266:                                        ; preds = %.lr.ph272, %.lr.ph266
  %78 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %5) #5
  %79 = load ptr, ptr %0, align 8, !tbaa !5
  %80 = getelementptr inbounds i8, ptr %79, i64 336
  %81 = load ptr, ptr %80, align 8
  call void %81(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(212) %78)
  %82 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %5) #5
  %83 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %5, ptr noundef nonnull align 8 dereferenceable(8) %6) #5
  br i1 %83, label %.lr.ph266, label %._crit_edge267

..loopexit142_crit_edge:                          ; preds = %.lr.ph269, %._crit_edge267
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #5
  br label %.loopexit176

.lr.ph269:                                        ; preds = %._crit_edge267, %.lr.ph269
  %84 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #5
  %85 = load ptr, ptr %0, align 8, !tbaa !5
  %86 = getelementptr inbounds i8, ptr %85, i64 336
  %87 = load ptr, ptr %86, align 8
  call void %87(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(212) %84)
  %88 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %7) #5
  %89 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %7, ptr noundef nonnull align 8 dereferenceable(8) %8) #5
  br i1 %89, label %.lr.ph269, label %..loopexit142_crit_edge

.lr.ph248:                                        ; preds = %.lr.ph355
  %90 = tail call noundef nonnull align 8 dereferenceable(172) ptr @_ZN3HIR7Pattern4Data12as_PathTupleEv(ptr noundef nonnull align 8 dereferenceable(184) %23)
  %91 = getelementptr inbounds i8, ptr %90, i64 112
  %92 = getelementptr inbounds i8, ptr %90, i64 144
  %93 = load ptr, ptr %0, align 8, !tbaa !5
  %94 = getelementptr inbounds i8, ptr %93, i64 368
  %95 = load ptr, ptr %94, align 8
  tail call void %95(ptr noundef nonnull align 8 dereferenceable(8) %0, i32 noundef 2, ptr noundef nonnull align 8 dereferenceable(88) %90)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #5
  %96 = tail call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %91) #5
  store ptr %96, ptr %9, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #5
  %97 = tail call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %91) #5
  store ptr %97, ptr %10, align 8
  %98 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef nonnull align 8 dereferenceable(8) %10) #5
  br i1 %98, label %.lr.ph242, label %._crit_edge243

._crit_edge243:                                   ; preds = %.lr.ph242, %.lr.ph248
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #5
  %99 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %92) #5
  store ptr %99, ptr %11, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #5
  %100 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %92) #5
  store ptr %100, ptr %12, align 8
  %101 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(8) %12) #5
  br i1 %101, label %.lr.ph245, label %..loopexit144_crit_edge

.lr.ph242:                                        ; preds = %.lr.ph248, %.lr.ph242
  %102 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %9) #5
  %103 = load ptr, ptr %0, align 8, !tbaa !5
  %104 = getelementptr inbounds i8, ptr %103, i64 336
  %105 = load ptr, ptr %104, align 8
  call void %105(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(212) %102)
  %106 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %9) #5
  %107 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef nonnull align 8 dereferenceable(8) %10) #5
  br i1 %107, label %.lr.ph242, label %._crit_edge243

..loopexit144_crit_edge:                          ; preds = %.lr.ph245, %._crit_edge243
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #5
  br label %.loopexit176

.lr.ph245:                                        ; preds = %._crit_edge243, %.lr.ph245
  %108 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %11) #5
  %109 = load ptr, ptr %0, align 8, !tbaa !5
  %110 = getelementptr inbounds i8, ptr %109, i64 336
  %111 = load ptr, ptr %110, align 8
  call void %111(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(212) %108)
  %112 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %11) #5
  %113 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(8) %12) #5
  br i1 %113, label %.lr.ph245, label %..loopexit144_crit_edge

..loopexit145_crit_edge:                          ; preds = %.lr.ph223, %.preheader164
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #5
  br label %.loopexit176

.lr.ph223:                                        ; preds = %.preheader164, %.lr.ph223
  %114 = call noundef nonnull align 8 dereferenceable(224) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairI8RcStringN3HIR7PatternEESt6vectorIS5_SaIS5_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %13) #5
  %115 = getelementptr inbounds i8, ptr %114, i64 8
  %116 = load ptr, ptr %0, align 8, !tbaa !5
  %117 = getelementptr inbounds i8, ptr %116, i64 336
  %118 = load ptr, ptr %117, align 8
  call void %118(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(212) %115)
  %119 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPSt4pairI8RcStringN3HIR7PatternEESt6vectorIS5_SaIS5_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %13) #5
  %120 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPSt4pairI8RcStringN3HIR7PatternEESt6vectorIS5_SaIS5_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %14) #5
  br i1 %120, label %.lr.ph223, label %..loopexit145_crit_edge

..loopexit148_crit_edge:                          ; preds = %.lr.ph194, %.preheader170
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #5
  br label %.loopexit176

.lr.ph194:                                        ; preds = %.preheader170, %.lr.ph194
  %121 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %15) #5
  %122 = load ptr, ptr %0, align 8, !tbaa !5
  %123 = getelementptr inbounds i8, ptr %122, i64 336
  %124 = load ptr, ptr %123, align 8
  call void %124(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(212) %121)
  %125 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %15) #5
  %126 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(8) %16) #5
  br i1 %126, label %.lr.ph194, label %..loopexit148_crit_edge

.lr.ph191:                                        ; preds = %.lr.ph355
  %127 = tail call noundef nonnull align 8 dereferenceable(72) ptr @_ZN3HIR7Pattern4Data13as_SplitSliceEv(ptr noundef nonnull align 8 dereferenceable(184) %23)
  %128 = getelementptr inbounds i8, ptr %127, i64 48
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #5
  %129 = tail call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %127) #5
  store ptr %129, ptr %17, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #5
  %130 = tail call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %127) #5
  store ptr %130, ptr %18, align 8
  %131 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef nonnull align 8 dereferenceable(8) %18) #5
  br i1 %131, label %.lr.ph185, label %._crit_edge186

._crit_edge186:                                   ; preds = %.lr.ph185, %.lr.ph191
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #5
  %132 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %128) #5
  store ptr %132, ptr %19, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #5
  %133 = call ptr @_ZNSt6vectorIN3HIR7PatternESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %128) #5
  store ptr %133, ptr %20, align 8
  %134 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %19, ptr noundef nonnull align 8 dereferenceable(8) %20) #5
  br i1 %134, label %.lr.ph188, label %..loopexit149_crit_edge

.lr.ph185:                                        ; preds = %.lr.ph191, %.lr.ph185
  %135 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %17) #5
  %136 = load ptr, ptr %0, align 8, !tbaa !5
  %137 = getelementptr inbounds i8, ptr %136, i64 336
  %138 = load ptr, ptr %137, align 8
  call void %138(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(212) %135)
  %139 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %17) #5
  %140 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef nonnull align 8 dereferenceable(8) %18) #5
  br i1 %140, label %.lr.ph185, label %._crit_edge186

..loopexit149_crit_edge:                          ; preds = %.lr.ph188, %._crit_edge186
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #5
  br label %.loopexit176

.lr.ph188:                                        ; preds = %._crit_edge186, %.lr.ph188
  %141 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %19) #5
  %142 = load ptr, ptr %0, align 8, !tbaa !5
  %143 = getelementptr inbounds i8, ptr %142, i64 336
  %144 = load ptr, ptr %143, align 8
  call void %144(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(212) %141)
  %145 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %19) #5
  %146 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %19, ptr noundef nonnull align 8 dereferenceable(8) %20) #5
  br i1 %146, label %.lr.ph188, label %..loopexit149_crit_edge

..loopexit150_crit_edge:                          ; preds = %.lr.ph, %.preheader174
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #5
  br label %.loopexit176

.lr.ph:                                           ; preds = %.preheader174, %.lr.ph
  %147 = call noundef nonnull align 8 dereferenceable(212) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %21) #5
  %148 = load ptr, ptr %0, align 8, !tbaa !5
  %149 = getelementptr inbounds i8, ptr %148, i64 336
  %150 = load ptr, ptr %149, align 8
  call void %150(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull align 8 dereferenceable(8) %1, ptr noundef nonnull align 8 dereferenceable(212) %147)
  %151 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %21) #5
  %152 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3HIR7PatternESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %21, ptr noundef nonnull align 8 dereferenceable(8) %22) #5
  br i1 %152, label %.lr.ph, label %..loopexit150_crit_edge
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"vtable pointer", !7, i64 0}
!7 = !{!"Simple C++ TBAA"}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass