; LLVM IR from indjev99/Evolving-Snakes :: sources/sight.ll (Z6seeAllRA140_A140_St6vectorISt4pairIiiESaIS1_EER5snake)

; 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"

%"struct.std::pair" = type <{ i32, i8, [3 x i8] }>
%struct.point = type { i32, i32 }
%struct.snake = type { %"class.std::__cxx11::basic_string", i32, double, double, double, double, double, i32, i32, i32, i8, i8, %"class.std::vector.5", ptr }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::vector.5" = type { %"struct.std::_Vector_base.6" }
%"struct.std::_Vector_base.6" = type { %"struct.std::_Vector_base<block, std::allocator<block>>::_Vector_impl" }
%"struct.std::_Vector_base<block, std::allocator<block>>::_Vector_impl" = type { %"struct.std::_Vector_base<block, std::allocator<block>>::_Vector_impl_data" }
%"struct.std::_Vector_base<block, std::allocator<block>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%struct.controller = type { ptr, [3 x i32], [3 x i8], [1 x i32], [1 x i8], [1 x i32], [1 x i8], i32, i32 }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<std::pair<int, int>, std::allocator<std::pair<int, int>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<int, int>, std::allocator<std::pair<int, int>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<int, int>, std::allocator<std::pair<int, int>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<int, int>, std::allocator<std::pair<int, int>>>::_Vector_impl_data" = type { ptr, ptr, ptr }

; Function Attrs: mustprogress uwtable
declare dso_local i64 @_Z6seeOneRA140_A140_St6vectorISt4pairIiiESaIS1_EE5pointi(ptr noundef nonnull align 8 dereferenceable(470400), i64, i32 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 nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #2

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

declare void @_ZN5pointpLEi(ptr noundef nonnull align 4 dereferenceable(8), i32 noundef) #4

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

; Function Attrs: mustprogress uwtable
define dso_local void @_Z6seeAllRA140_A140_St6vectorISt4pairIiiESaIS1_EER5snake(ptr noundef nonnull align 8 dereferenceable(470400) %0, ptr noundef nonnull align 8 dereferenceable(128) %1) #0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca %"struct.std::pair", align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca %struct.point, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca %"struct.std::pair", align 4
  %13 = alloca %struct.point, align 4
  %14 = alloca %struct.point, align 4
  %15 = alloca i32, align 4
  %16 = alloca %"struct.std::pair", align 4
  %17 = alloca %struct.point, align 4
  %18 = alloca %struct.point, align 4
  %19 = alloca i32, align 4
  %20 = alloca %"struct.std::pair", align 4
  %21 = alloca %struct.point, align 4
  %22 = alloca %struct.point, align 4
  %23 = alloca i32, align 4
  %24 = alloca %"struct.std::pair", align 4
  %25 = alloca %struct.point, align 4
  %26 = alloca %struct.point, align 4
  %27 = alloca i32, align 4
  %28 = alloca %"struct.std::pair", align 4
  %29 = alloca %struct.point, align 4
  %30 = alloca %struct.point, align 4
  %31 = alloca i32, align 4
  %32 = alloca %"struct.std::pair", align 4
  %33 = alloca %struct.point, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #5
  call void @_ZNSt4pairIibEC2IibTnNSt9enable_ifIXsr6__and_ISt37__is_implicitly_default_constructibleIT_ES3_IT0_EEE5valueEbE4typeELb1EEEv(ptr noundef nonnull align 4 dereferenceable(5) %5)
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #5
  store i32 0, ptr %7, align 4, !tbaa !9
  br label %34

34:                                               ; preds = %53, %2
  %35 = load i32, ptr %7, align 4, !tbaa !9
  %36 = icmp sle i32 %35, 2
  br i1 %36, label %38, label %37

37:                                               ; preds = %34
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #5
  br label %56

38:                                               ; preds = %34
  %39 = load ptr, ptr %4, align 8, !tbaa !5
  %40 = getelementptr inbounds %struct.snake, ptr %39, i32 0, i32 13
  %41 = load ptr, ptr %40, align 8, !tbaa !11
  %42 = getelementptr inbounds %struct.controller, ptr %41, i32 0, i32 1
  %43 = load i32, ptr %7, align 4, !tbaa !9
  %44 = sext i32 %43 to i64
  %45 = getelementptr inbounds [3 x i32], ptr %42, i64 0, i64 %44
  store i32 -1, ptr %45, align 4, !tbaa !9
  %46 = load ptr, ptr %4, align 8, !tbaa !5
  %47 = getelementptr inbounds %struct.snake, ptr %46, i32 0, i32 13
  %48 = load ptr, ptr %47, align 8, !tbaa !11
  %49 = getelementptr inbounds %struct.controller, ptr %48, i32 0, i32 2
  %50 = load i32, ptr %7, align 4, !tbaa !9
  %51 = sext i32 %50 to i64
  %52 = getelementptr inbounds [3 x i8], ptr %49, i64 0, i64 %51
  store i8 0, ptr %52, align 1, !tbaa !22
  br label %53

53:                                               ; preds = %38
  %54 = load i32, ptr %7, align 4, !tbaa !9
  %55 = add nsw i32 %54, 1
  store i32 %55, ptr %7, align 4, !tbaa !9
  br label %34, !llvm.loop !23

56:                                               ; preds = %37
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #5
  store i32 0, ptr %8, align 4, !tbaa !9
  br label %57

57:                                               ; preds = %90, %56
  %58 = load i32, ptr %8, align 4, !tbaa !9
  %59 = icmp sle i32 %58, 0
  br i1 %59, label %61, label %60

60:                                               ; preds = %57
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #5
  br label %93

61:                                               ; preds = %57
  %62 = load ptr, ptr %4, align 8, !tbaa !5
  %63 = getelementptr inbounds %struct.snake, ptr %62, i32 0, i32 13
  %64 = load ptr, ptr %63, align 8, !tbaa !11
  %65 = getelementptr inbounds %struct.controller, ptr %64, i32 0, i32 3
  %66 = load i32, ptr %8, align 4, !tbaa !9
  %67 = sext i32 %66 to i64
  %68 = getelementptr inbounds [1 x i32], ptr %65, i64 0, i64 %67
  store i32 -1, ptr %68, align 4, !tbaa !9
  %69 = load ptr, ptr %4, align 8, !tbaa !5
  %70 = getelementptr inbounds %struct.snake, ptr %69, i32 0, i32 13
  %71 = load ptr, ptr %70, align 8, !tbaa !11
  %72 = getelementptr inbounds %struct.controller, ptr %71, i32 0, i32 4
  %73 = load i32, ptr %8, align 4, !tbaa !9
  %74 = sext i32 %73 to i64
  %75 = getelementptr inbounds [1 x i8], ptr %72, i64 0, i64 %74
  store i8 0, ptr %75, align 1, !tbaa !22
  %76 = load ptr, ptr %4, align 8, !tbaa !5
  %77 = getelementptr inbounds %struct.snake, ptr %76, i32 0, i32 13
  %78 = load ptr, ptr %77, align 8, !tbaa !11
  %79 = getelementptr inbounds %struct.controller, ptr %78, i32 0, i32 5
  %80 = load i32, ptr %8, align 4, !tbaa !9
  %81 = sext i32 %80 to i64
  %82 = getelementptr inbounds [1 x i32], ptr %79, i64 0, i64 %81
  store i32 -1, ptr %82, align 4, !tbaa !9
  %83 = load ptr, ptr %4, align 8, !tbaa !5
  %84 = getelementptr inbounds %struct.snake, ptr %83, i32 0, i32 13
  %85 = load ptr, ptr %84, align 8, !tbaa !11
  %86 = getelementptr inbounds %struct.controller, ptr %85, i32 0, i32 6
  %87 = load i32, ptr %8, align 4, !tbaa !9
  %88 = sext i32 %87 to i64
  %89 = getelementptr inbounds [1 x i8], ptr %86, i64 0, i64 %88
  store i8 0, ptr %89, align 1, !tbaa !22
  br label %90

90:                                               ; preds = %61
  %91 = load i32, ptr %8, align 4, !tbaa !9
  %92 = add nsw i32 %91, 1
  store i32 %92, ptr %8, align 4, !tbaa !9
  br label %57, !llvm.loop !25

93:                                               ; preds = %60
  %94 = load ptr, ptr %4, align 8, !tbaa !5
  %95 = getelementptr inbounds %struct.snake, ptr %94, i32 0, i32 9
  %96 = load i32, ptr %95, align 8, !tbaa !26
  %97 = add nsw i32 %96, 1
  %98 = srem i32 %97, 4
  store i32 %98, ptr %6, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #5
  %99 = load ptr, ptr %4, align 8, !tbaa !5
  %100 = getelementptr inbounds %struct.snake, ptr %99, i32 0, i32 12
  %101 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNSt6vectorI5blockSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %100, i64 noundef 0) #5
  %102 = load ptr, ptr %4, align 8, !tbaa !5
  %103 = getelementptr inbounds %struct.snake, ptr %102, i32 0, i32 9
  %104 = load i32, ptr %103, align 8, !tbaa !26
  %105 = call i64 @_ZN5pointplEi(ptr noundef nonnull align 4 dereferenceable(8) %101, i32 noundef %104)
  store i64 %105, ptr %9, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #5
  store i32 0, ptr %10, align 4, !tbaa !9
  br label %106

106:                                              ; preds = %156, %93
  %107 = load i32, ptr %10, align 4, !tbaa !9
  %108 = icmp sle i32 %107, 1
  br i1 %108, label %110, label %109

109:                                              ; preds = %106
  store i32 8, ptr %11, align 4
  br label %159

110:                                              ; preds = %106
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #5
  %111 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %13, ptr align 4 %9, i64 8, i1 false), !tbaa.struct !27
  %112 = load ptr, ptr %4, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct.snake, ptr %112, i32 0, i32 9
  %114 = load i32, ptr %113, align 8, !tbaa !26
  %115 = load i64, ptr %13, align 4
  %116 = call i64 @_Z6seeOneRA140_A140_St6vectorISt4pairIiiESaIS1_EE5pointi(ptr noundef nonnull align 8 dereferenceable(470400) %111, i64 %115, i32 noundef %114)
  %117 = trunc i64 %116 to i40
  store i40 %117, ptr %12, align 4
  %118 = call noundef nonnull align 4 dereferenceable(5) ptr @_ZNSt4pairIibEaSEOS0_(ptr noundef nonnull align 4 dereferenceable(5) %5, ptr noundef nonnull align 4 dereferenceable(5) %12) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #5
  %119 = getelementptr inbounds %"struct.std::pair", ptr %5, i32 0, i32 0
  %120 = load i32, ptr %119, align 4, !tbaa !28
  %121 = load ptr, ptr %4, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct.snake, ptr %121, i32 0, i32 13
  %123 = load ptr, ptr %122, align 8, !tbaa !11
  %124 = getelementptr inbounds %struct.controller, ptr %123, i32 0, i32 1
  %125 = load i32, ptr %10, align 4, !tbaa !9
  %126 = add nsw i32 1, %125
  %127 = sext i32 %126 to i64
  %128 = getelementptr inbounds [3 x i32], ptr %124, i64 0, i64 %127
  store i32 %120, ptr %128, align 4, !tbaa !9
  %129 = getelementptr inbounds %"struct.std::pair", ptr %5, i32 0, i32 1
  %130 = load i8, ptr %129, align 4, !tbaa !30, !range !31, !noundef !32
  %131 = trunc i8 %130 to i1
  %132 = load ptr, ptr %4, align 8, !tbaa !5
  %133 = getelementptr inbounds %struct.snake, ptr %132, i32 0, i32 13
  %134 = load ptr, ptr %133, align 8, !tbaa !11
  %135 = getelementptr inbounds %struct.controller, ptr %134, i32 0, i32 2
  %136 = load i32, ptr %10, align 4, !tbaa !9
  %137 = add nsw i32 1, %136
  %138 = sext i32 %137 to i64
  %139 = getelementptr inbounds [3 x i8], ptr %135, i64 0, i64 %138
  %140 = zext i1 %131 to i8
  store i8 %140, ptr %139, align 1, !tbaa !22
  %141 = load ptr, ptr %3, align 8, !tbaa !5
  %142 = getelementptr inbounds %struct.point, ptr %9, i32 0, i32 0
  %143 = load i32, ptr %142, align 4, !tbaa !33
  %144 = add nsw i32 %143, 70
  %145 = sext i32 %144 to i64
  %146 = getelementptr inbounds [140 x [140 x %"class.std::vector"]], ptr %141, i64 0, i64 %145
  %147 = getelementptr inbounds %struct.point, ptr %9, i32 0, i32 1
  %148 = load i32, ptr %147, align 4, !tbaa !35
  %149 = add nsw i32 %148, 70
  %150 = sext i32 %149 to i64
  %151 = getelementptr inbounds [140 x %"class.std::vector"], ptr %146, i64 0, i64 %150
  %152 = call noundef zeroext i1 @_ZNKSt6vectorISt4pairIiiESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %151) #5
  br i1 %152, label %154, label %153

153:                                              ; preds = %110
  store i32 8, ptr %11, align 4
  br label %159

154:                                              ; preds = %110
  %155 = load i32, ptr %6, align 4, !tbaa !9
  call void @_ZN5pointpLEi(ptr noundef nonnull align 4 dereferenceable(8) %9, i32 noundef %155)
  br label %156

156:                                              ; preds = %154
  %157 = load i32, ptr %10, align 4, !tbaa !9
  %158 = add nsw i32 %157, 1
  store i32 %158, ptr %10, align 4, !tbaa !9
  br label %106, !llvm.loop !36

159:                                              ; preds = %153, %109
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #5
  br label %160

160:                                              ; preds = %159
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #5
  %161 = load ptr, ptr %4, align 8, !tbaa !5
  %162 = getelementptr inbounds %struct.snake, ptr %161, i32 0, i32 12
  %163 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNSt6vectorI5blockSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %162, i64 noundef 0) #5
  %164 = load ptr, ptr %4, align 8, !tbaa !5
  %165 = getelementptr inbounds %struct.snake, ptr %164, i32 0, i32 9
  %166 = load i32, ptr %165, align 8, !tbaa !26
  %167 = call i64 @_ZN5pointplEi(ptr noundef nonnull align 4 dereferenceable(8) %163, i32 noundef %166)
  store i64 %167, ptr %14, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %9, ptr align 4 %14, i64 8, i1 false), !tbaa.struct !27
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #5
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %168

168:                                              ; preds = %218, %160
  %169 = load i32, ptr %15, align 4, !tbaa !9
  %170 = icmp sle i32 %169, 1
  br i1 %170, label %172, label %171

171:                                              ; preds = %168
  store i32 11, ptr %11, align 4
  br label %221

172:                                              ; preds = %168
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #5
  %173 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %17, ptr align 4 %9, i64 8, i1 false), !tbaa.struct !27
  %174 = load ptr, ptr %4, align 8, !tbaa !5
  %175 = getelementptr inbounds %struct.snake, ptr %174, i32 0, i32 9
  %176 = load i32, ptr %175, align 8, !tbaa !26
  %177 = load i64, ptr %17, align 4
  %178 = call i64 @_Z6seeOneRA140_A140_St6vectorISt4pairIiiESaIS1_EE5pointi(ptr noundef nonnull align 8 dereferenceable(470400) %173, i64 %177, i32 noundef %176)
  %179 = trunc i64 %178 to i40
  store i40 %179, ptr %16, align 4
  %180 = call noundef nonnull align 4 dereferenceable(5) ptr @_ZNSt4pairIibEaSEOS0_(ptr noundef nonnull align 4 dereferenceable(5) %5, ptr noundef nonnull align 4 dereferenceable(5) %16) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  %181 = getelementptr inbounds %"struct.std::pair", ptr %5, i32 0, i32 0
  %182 = load i32, ptr %181, align 4, !tbaa !28
  %183 = load ptr, ptr %4, align 8, !tbaa !5
  %184 = getelementptr inbounds %struct.snake, ptr %183, i32 0, i32 13
  %185 = load ptr, ptr %184, align 8, !tbaa !11
  %186 = getelementptr inbounds %struct.controller, ptr %185, i32 0, i32 1
  %187 = load i32, ptr %15, align 4, !tbaa !9
  %188 = sub nsw i32 1, %187
  %189 = sext i32 %188 to i64
  %190 = getelementptr inbounds [3 x i32], ptr %186, i64 0, i64 %189
  store i32 %182, ptr %190, align 4, !tbaa !9
  %191 = getelementptr inbounds %"struct.std::pair", ptr %5, i32 0, i32 1
  %192 = load i8, ptr %191, align 4, !tbaa !30, !range !31, !noundef !32
  %193 = trunc i8 %192 to i1
  %194 = load ptr, ptr %4, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct.snake, ptr %194, i32 0, i32 13
  %196 = load ptr, ptr %195, align 8, !tbaa !11
  %197 = getelementptr inbounds %struct.controller, ptr %196, i32 0, i32 2
  %198 = load i32, ptr %15, align 4, !tbaa !9
  %199 = sub nsw i32 1, %198
  %200 = sext i32 %199 to i64
  %201 = getelementptr inbounds [3 x i8], ptr %197, i64 0, i64 %200
  %202 = zext i1 %193 to i8
  store i8 %202, ptr %201, align 1, !tbaa !22
  %203 = load ptr, ptr %3, align 8, !tbaa !5
  %204 = getelementptr inbounds %struct.point, ptr %9, i32 0, i32 0
  %205 = load i32, ptr %204, align 4, !tbaa !33
  %206 = add nsw i32 %205, 70
  %207 = sext i32 %206 to i64
  %208 = getelementptr inbounds [140 x [140 x %"class.std::vector"]], ptr %203, i64 0, i64 %207
  %209 = getelementptr inbounds %struct.point, ptr %9, i32 0, i32 1
  %210 = load i32, ptr %209, align 4, !tbaa !35
  %211 = add nsw i32 %210, 70
  %212 = sext i32 %211 to i64
  %213 = getelementptr inbounds [140 x %"class.std::vector"], ptr %208, i64 0, i64 %212
  %214 = call noundef zeroext i1 @_ZNKSt6vectorISt4pairIiiESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %213) #5
  br i1 %214, label %216, label %215

215:                                              ; preds = %172
  store i32 11, ptr %11, align 4
  br label %221

216:                                              ; preds = %172
  %217 = load i32, ptr %6, align 4, !tbaa !9
  call void @_ZN5pointmIEi(ptr noundef nonnull align 4 dereferenceable(8) %9, i32 noundef %217)
  br label %218

218:                                              ; preds = %216
  %219 = load i32, ptr %15, align 4, !tbaa !9
  %220 = add nsw i32 %219, 1
  store i32 %220, ptr %15, align 4, !tbaa !9
  br label %168, !llvm.loop !37

221:                                              ; preds = %215, %171
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  br label %222

222:                                              ; preds = %221
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #5
  %223 = load ptr, ptr %4, align 8, !tbaa !5
  %224 = getelementptr inbounds %struct.snake, ptr %223, i32 0, i32 12
  %225 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNSt6vectorI5blockSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %224, i64 noundef 0) #5
  %226 = load i32, ptr %6, align 4, !tbaa !9
  %227 = call i64 @_ZN5pointplEi(ptr noundef nonnull align 4 dereferenceable(8) %225, i32 noundef %226)
  store i64 %227, ptr %18, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %9, ptr align 4 %18, i64 8, i1 false), !tbaa.struct !27
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #5
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %228

228:                                              ; preds = %278, %222
  %229 = load i32, ptr %19, align 4, !tbaa !9
  %230 = icmp sle i32 %229, 0
  br i1 %230, label %232, label %231

231:                                              ; preds = %228
  store i32 14, ptr %11, align 4
  br label %281

232:                                              ; preds = %228
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #5
  %233 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %21, ptr align 4 %9, i64 8, i1 false), !tbaa.struct !27
  %234 = load i32, ptr %6, align 4, !tbaa !9
  %235 = load i64, ptr %21, align 4
  %236 = call i64 @_Z6seeOneRA140_A140_St6vectorISt4pairIiiESaIS1_EE5pointi(ptr noundef nonnull align 8 dereferenceable(470400) %233, i64 %235, i32 noundef %234)
  %237 = trunc i64 %236 to i40
  store i40 %237, ptr %20, align 4
  %238 = call noundef nonnull align 4 dereferenceable(5) ptr @_ZNSt4pairIibEaSEOS0_(ptr noundef nonnull align 4 dereferenceable(5) %5, ptr noundef nonnull align 4 dereferenceable(5) %20) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  %239 = getelementptr inbounds %"struct.std::pair", ptr %5, i32 0, i32 0
  %240 = load i32, ptr %239, align 4, !tbaa !28
  %241 = load ptr, ptr %4, align 8, !tbaa !5
  %242 = getelementptr inbounds %struct.snake, ptr %241, i32 0, i32 13
  %243 = load ptr, ptr %242, align 8, !tbaa !11
  %244 = getelementptr inbounds %struct.controller, ptr %243, i32 0, i32 3
  %245 = load i32, ptr %19, align 4, !tbaa !9
  %246 = add nsw i32 0, %245
  %247 = sext i32 %246 to i64
  %248 = getelementptr inbounds [1 x i32], ptr %244, i64 0, i64 %247
  store i32 %240, ptr %248, align 4, !tbaa !9
  %249 = getelementptr inbounds %"struct.std::pair", ptr %5, i32 0, i32 1
  %250 = load i8, ptr %249, align 4, !tbaa !30, !range !31, !noundef !32
  %251 = trunc i8 %250 to i1
  %252 = load ptr, ptr %4, align 8, !tbaa !5
  %253 = getelementptr inbounds %struct.snake, ptr %252, i32 0, i32 13
  %254 = load ptr, ptr %253, align 8, !tbaa !11
  %255 = getelementptr inbounds %struct.controller, ptr %254, i32 0, i32 4
  %256 = load i32, ptr %19, align 4, !tbaa !9
  %257 = add nsw i32 0, %256
  %258 = sext i32 %257 to i64
  %259 = getelementptr inbounds [1 x i8], ptr %255, i64 0, i64 %258
  %260 = zext i1 %251 to i8
  store i8 %260, ptr %259, align 1, !tbaa !22
  %261 = load ptr, ptr %3, align 8, !tbaa !5
  %262 = getelementptr inbounds %struct.point, ptr %9, i32 0, i32 0
  %263 = load i32, ptr %262, align 4, !tbaa !33
  %264 = add nsw i32 %263, 70
  %265 = sext i32 %264 to i64
  %266 = getelementptr inbounds [140 x [140 x %"class.std::vector"]], ptr %261, i64 0, i64 %265
  %267 = getelementptr inbounds %struct.point, ptr %9, i32 0, i32 1
  %268 = load i32, ptr %267, align 4, !tbaa !35
  %269 = add nsw i32 %268, 70
  %270 = sext i32 %269 to i64
  %271 = getelementptr inbounds [140 x %"class.std::vector"], ptr %266, i64 0, i64 %270
  %272 = call noundef zeroext i1 @_ZNKSt6vectorISt4pairIiiESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %271) #5
  br i1 %272, label %274, label %273

273:                                              ; preds = %232
  store i32 14, ptr %11, align 4
  br label %281

274:                                              ; preds = %232
  %275 = load ptr, ptr %4, align 8, !tbaa !5
  %276 = getelementptr inbounds %struct.snake, ptr %275, i32 0, i32 9
  %277 = load i32, ptr %276, align 8, !tbaa !26
  call void @_ZN5pointpLEi(ptr noundef nonnull align 4 dereferenceable(8) %9, i32 noundef %277)
  br label %278

278:                                              ; preds = %274
  %279 = load i32, ptr %19, align 4, !tbaa !9
  %280 = add nsw i32 %279, 1
  store i32 %280, ptr %19, align 4, !tbaa !9
  br label %228, !llvm.loop !38

281:                                              ; preds = %273, %231
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  br label %282

282:                                              ; preds = %281
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #5
  %283 = load ptr, ptr %4, align 8, !tbaa !5
  %284 = getelementptr inbounds %struct.snake, ptr %283, i32 0, i32 12
  %285 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNSt6vectorI5blockSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %284, i64 noundef 0) #5
  %286 = load i32, ptr %6, align 4, !tbaa !9
  %287 = call i64 @_ZN5pointplEi(ptr noundef nonnull align 4 dereferenceable(8) %285, i32 noundef %286)
  store i64 %287, ptr %22, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %9, ptr align 4 %22, i64 8, i1 false), !tbaa.struct !27
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #5
  store i32 0, ptr %23, align 4, !tbaa !9
  br label %288

288:                                              ; preds = %338, %282
  %289 = load i32, ptr %23, align 4, !tbaa !9
  %290 = icmp sle i32 %289, 0
  br i1 %290, label %292, label %291

291:                                              ; preds = %288
  store i32 17, ptr %11, align 4
  br label %341

292:                                              ; preds = %288
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #5
  %293 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %25, ptr align 4 %9, i64 8, i1 false), !tbaa.struct !27
  %294 = load i32, ptr %6, align 4, !tbaa !9
  %295 = load i64, ptr %25, align 4
  %296 = call i64 @_Z6seeOneRA140_A140_St6vectorISt4pairIiiESaIS1_EE5pointi(ptr noundef nonnull align 8 dereferenceable(470400) %293, i64 %295, i32 noundef %294)
  %297 = trunc i64 %296 to i40
  store i40 %297, ptr %24, align 4
  %298 = call noundef nonnull align 4 dereferenceable(5) ptr @_ZNSt4pairIibEaSEOS0_(ptr noundef nonnull align 4 dereferenceable(5) %5, ptr noundef nonnull align 4 dereferenceable(5) %24) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  %299 = getelementptr inbounds %"struct.std::pair", ptr %5, i32 0, i32 0
  %300 = load i32, ptr %299, align 4, !tbaa !28
  %301 = load ptr, ptr %4, align 8, !tbaa !5
  %302 = getelementptr inbounds %struct.snake, ptr %301, i32 0, i32 13
  %303 = load ptr, ptr %302, align 8, !tbaa !11
  %304 = getelementptr inbounds %struct.controller, ptr %303, i32 0, i32 3
  %305 = load i32, ptr %23, align 4, !tbaa !9
  %306 = sub nsw i32 0, %305
  %307 = sext i32 %306 to i64
  %308 = getelementptr inbounds [1 x i32], ptr %304, i64 0, i64 %307
  store i32 %300, ptr %308, align 4, !tbaa !9
  %309 = getelementptr inbounds %"struct.std::pair", ptr %5, i32 0, i32 1
  %310 = load i8, ptr %309, align 4, !tbaa !30, !range !31, !noundef !32
  %311 = trunc i8 %310 to i1
  %312 = load ptr, ptr %4, align 8, !tbaa !5
  %313 = getelementptr inbounds %struct.snake, ptr %312, i32 0, i32 13
  %314 = load ptr, ptr %313, align 8, !tbaa !11
  %315 = getelementptr inbounds %struct.controller, ptr %314, i32 0, i32 4
  %316 = load i32, ptr %23, align 4, !tbaa !9
  %317 = sub nsw i32 0, %316
  %318 = sext i32 %317 to i64
  %319 = getelementptr inbounds [1 x i8], ptr %315, i64 0, i64 %318
  %320 = zext i1 %311 to i8
  store i8 %320, ptr %319, align 1, !tbaa !22
  %321 = load ptr, ptr %3, align 8, !tbaa !5
  %322 = getelementptr inbounds %struct.point, ptr %9, i32 0, i32 0
  %323 = load i32, ptr %322, align 4, !tbaa !33
  %324 = add nsw i32 %323, 70
  %325 = sext i32 %324 to i64
  %326 = getelementptr inbounds [140 x [140 x %"class.std::vector"]], ptr %321, i64 0, i64 %325
  %327 = getelementptr inbounds %struct.point, ptr %9, i32 0, i32 1
  %328 = load i32, ptr %327, align 4, !tbaa !35
  %329 = add nsw i32 %328, 70
  %330 = sext i32 %329 to i64
  %331 = getelementptr inbounds [140 x %"class.std::vector"], ptr %326, i64 0, i64 %330
  %332 = call noundef zeroext i1 @_ZNKSt6vectorISt4pairIiiESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %331) #5
  br i1 %332, label %334, label %333

333:                                              ; preds = %292
  store i32 17, ptr %11, align 4
  br label %341

334:                                              ; preds = %292
  %335 = load ptr, ptr %4, align 8, !tbaa !5
  %336 = getelementptr inbounds %struct.snake, ptr %335, i32 0, i32 9
  %337 = load i32, ptr %336, align 8, !tbaa !26
  call void @_ZN5pointmIEi(ptr noundef nonnull align 4 dereferenceable(8) %9, i32 noundef %337)
  br label %338

338:                                              ; preds = %334
  %339 = load i32, ptr %23, align 4, !tbaa !9
  %340 = add nsw i32 %339, 1
  store i32 %340, ptr %23, align 4, !tbaa !9
  br label %288, !llvm.loop !39

341:                                              ; preds = %333, %291
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #5
  br label %342

342:                                              ; preds = %341
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #5
  %343 = load ptr, ptr %4, align 8, !tbaa !5
  %344 = getelementptr inbounds %struct.snake, ptr %343, i32 0, i32 12
  %345 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNSt6vectorI5blockSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %344, i64 noundef 0) #5
  %346 = load i32, ptr %6, align 4, !tbaa !9
  %347 = call i64 @_ZN5pointmiEi(ptr noundef nonnull align 4 dereferenceable(8) %345, i32 noundef %346)
  store i64 %347, ptr %26, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %9, ptr align 4 %26, i64 8, i1 false), !tbaa.struct !27
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #5
  store i32 0, ptr %27, align 4, !tbaa !9
  br label %348

348:                                              ; preds = %400, %342
  %349 = load i32, ptr %27, align 4, !tbaa !9
  %350 = icmp sle i32 %349, 0
  br i1 %350, label %352, label %351

351:                                              ; preds = %348
  store i32 20, ptr %11, align 4
  br label %403

352:                                              ; preds = %348
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #5
  %353 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %29, ptr align 4 %9, i64 8, i1 false), !tbaa.struct !27
  %354 = load i32, ptr %6, align 4, !tbaa !9
  %355 = add nsw i32 %354, 2
  %356 = srem i32 %355, 4
  %357 = load i64, ptr %29, align 4
  %358 = call i64 @_Z6seeOneRA140_A140_St6vectorISt4pairIiiESaIS1_EE5pointi(ptr noundef nonnull align 8 dereferenceable(470400) %353, i64 %357, i32 noundef %356)
  %359 = trunc i64 %358 to i40
  store i40 %359, ptr %28, align 4
  %360 = call noundef nonnull align 4 dereferenceable(5) ptr @_ZNSt4pairIibEaSEOS0_(ptr noundef nonnull align 4 dereferenceable(5) %5, ptr noundef nonnull align 4 dereferenceable(5) %28) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  %361 = getelementptr inbounds %"struct.std::pair", ptr %5, i32 0, i32 0
  %362 = load i32, ptr %361, align 4, !tbaa !28
  %363 = load ptr, ptr %4, align 8, !tbaa !5
  %364 = getelementptr inbounds %struct.snake, ptr %363, i32 0, i32 13
  %365 = load ptr, ptr %364, align 8, !tbaa !11
  %366 = getelementptr inbounds %struct.controller, ptr %365, i32 0, i32 5
  %367 = load i32, ptr %27, align 4, !tbaa !9
  %368 = add nsw i32 0, %367
  %369 = sext i32 %368 to i64
  %370 = getelementptr inbounds [1 x i32], ptr %366, i64 0, i64 %369
  store i32 %362, ptr %370, align 4, !tbaa !9
  %371 = getelementptr inbounds %"struct.std::pair", ptr %5, i32 0, i32 1
  %372 = load i8, ptr %371, align 4, !tbaa !30, !range !31, !noundef !32
  %373 = trunc i8 %372 to i1
  %374 = load ptr, ptr %4, align 8, !tbaa !5
  %375 = getelementptr inbounds %struct.snake, ptr %374, i32 0, i32 13
  %376 = load ptr, ptr %375, align 8, !tbaa !11
  %377 = getelementptr inbounds %struct.controller, ptr %376, i32 0, i32 6
  %378 = load i32, ptr %27, align 4, !tbaa !9
  %379 = add nsw i32 0, %378
  %380 = sext i32 %379 to i64
  %381 = getelementptr inbounds [1 x i8], ptr %377, i64 0, i64 %380
  %382 = zext i1 %373 to i8
  store i8 %382, ptr %381, align 1, !tbaa !22
  %383 = load ptr, ptr %3, align 8, !tbaa !5
  %384 = getelementptr inbounds %struct.point, ptr %9, i32 0, i32 0
  %385 = load i32, ptr %384, align 4, !tbaa !33
  %386 = add nsw i32 %385, 70
  %387 = sext i32 %386 to i64
  %388 = getelementptr inbounds [140 x [140 x %"class.std::vector"]], ptr %383, i64 0, i64 %387
  %389 = getelementptr inbounds %struct.point, ptr %9, i32 0, i32 1
  %390 = load i32, ptr %389, align 4, !tbaa !35
  %391 = add nsw i32 %390, 70
  %392 = sext i32 %391 to i64
  %393 = getelementptr inbounds [140 x %"class.std::vector"], ptr %388, i64 0, i64 %392
  %394 = call noundef zeroext i1 @_ZNKSt6vectorISt4pairIiiESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %393) #5
  br i1 %394, label %396, label %395

395:                                              ; preds = %352
  store i32 20, ptr %11, align 4
  br label %403

396:                                              ; preds = %352
  %397 = load ptr, ptr %4, align 8, !tbaa !5
  %398 = getelementptr inbounds %struct.snake, ptr %397, i32 0, i32 9
  %399 = load i32, ptr %398, align 8, !tbaa !26
  call void @_ZN5pointpLEi(ptr noundef nonnull align 4 dereferenceable(8) %9, i32 noundef %399)
  br label %400

400:                                              ; preds = %396
  %401 = load i32, ptr %27, align 4, !tbaa !9
  %402 = add nsw i32 %401, 1
  store i32 %402, ptr %27, align 4, !tbaa !9
  br label %348, !llvm.loop !40

403:                                              ; preds = %395, %351
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #5
  br label %404

404:                                              ; preds = %403
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #5
  %405 = load ptr, ptr %4, align 8, !tbaa !5
  %406 = getelementptr inbounds %struct.snake, ptr %405, i32 0, i32 12
  %407 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNSt6vectorI5blockSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %406, i64 noundef 0) #5
  %408 = load i32, ptr %6, align 4, !tbaa !9
  %409 = call i64 @_ZN5pointmiEi(ptr noundef nonnull align 4 dereferenceable(8) %407, i32 noundef %408)
  store i64 %409, ptr %30, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %9, ptr align 4 %30, i64 8, i1 false), !tbaa.struct !27
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #5
  store i32 0, ptr %31, align 4, !tbaa !9
  br label %410

410:                                              ; preds = %462, %404
  %411 = load i32, ptr %31, align 4, !tbaa !9
  %412 = icmp sle i32 %411, 0
  br i1 %412, label %414, label %413

413:                                              ; preds = %410
  store i32 23, ptr %11, align 4
  br label %465

414:                                              ; preds = %410
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #5
  %415 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %33, ptr align 4 %9, i64 8, i1 false), !tbaa.struct !27
  %416 = load i32, ptr %6, align 4, !tbaa !9
  %417 = add nsw i32 %416, 2
  %418 = srem i32 %417, 4
  %419 = load i64, ptr %33, align 4
  %420 = call i64 @_Z6seeOneRA140_A140_St6vectorISt4pairIiiESaIS1_EE5pointi(ptr noundef nonnull align 8 dereferenceable(470400) %415, i64 %419, i32 noundef %418)
  %421 = trunc i64 %420 to i40
  store i40 %421, ptr %32, align 4
  %422 = call noundef nonnull align 4 dereferenceable(5) ptr @_ZNSt4pairIibEaSEOS0_(ptr noundef nonnull align 4 dereferenceable(5) %5, ptr noundef nonnull align 4 dereferenceable(5) %32) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #5
  %423 = getelementptr inbounds %"struct.std::pair", ptr %5, i32 0, i32 0
  %424 = load i32, ptr %423, align 4, !tbaa !28
  %425 = load ptr, ptr %4, align 8, !tbaa !5
  %426 = getelementptr inbounds %struct.snake, ptr %425, i32 0, i32 13
  %427 = load ptr, ptr %426, align 8, !tbaa !11
  %428 = getelementptr inbounds %struct.controller, ptr %427, i32 0, i32 5
  %429 = load i32, ptr %31, align 4, !tbaa !9
  %430 = sub nsw i32 0, %429
  %431 = sext i32 %430 to i64
  %432 = getelementptr inbounds [1 x i32], ptr %428, i64 0, i64 %431
  store i32 %424, ptr %432, align 4, !tbaa !9
  %433 = getelementptr inbounds %"struct.std::pair", ptr %5, i32 0, i32 1
  %434 = load i8, ptr %433, align 4, !tbaa !30, !range !31, !noundef !32
  %435 = trunc i8 %434 to i1
  %436 = load ptr, ptr %4, align 8, !tbaa !5
  %437 = getelementptr inbounds %struct.snake, ptr %436, i32 0, i32 13
  %438 = load ptr, ptr %437, align 8, !tbaa !11
  %439 = getelementptr inbounds %struct.controller, ptr %438, i32 0, i32 6
  %440 = load i32, ptr %31, align 4, !tbaa !9
  %441 = sub nsw i32 0, %440
  %442 = sext i32 %441 to i64
  %443 = getelementptr inbounds [1 x i8], ptr %439, i64 0, i64 %442
  %444 = zext i1 %435 to i8
  store i8 %444, ptr %443, align 1, !tbaa !22
  %445 = load ptr, ptr %3, align 8, !tbaa !5
  %446 = getelementptr inbounds %struct.point, ptr %9, i32 0, i32 0
  %447 = load i32, ptr %446, align 4, !tbaa !33
  %448 = add nsw i32 %447, 70
  %449 = sext i32 %448 to i64
  %450 = getelementptr inbounds [140 x [140 x %"class.std::vector"]], ptr %445, i64 0, i64 %449
  %451 = getelementptr inbounds %struct.point, ptr %9, i32 0, i32 1
  %452 = load i32, ptr %451, align 4, !tbaa !35
  %453 = add nsw i32 %452, 70
  %454 = sext i32 %453 to i64
  %455 = getelementptr inbounds [140 x %"class.std::vector"], ptr %450, i64 0, i64 %454
  %456 = call noundef zeroext i1 @_ZNKSt6vectorISt4pairIiiESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %455) #5
  br i1 %456, label %458, label %457

457:                                              ; preds = %414
  store i32 23, ptr %11, align 4
  br label %465

458:                                              ; preds = %414
  %459 = load ptr, ptr %4, align 8, !tbaa !5
  %460 = getelementptr inbounds %struct.snake, ptr %459, i32 0, i32 9
  %461 = load i32, ptr %460, align 8, !tbaa !26
  call void @_ZN5pointmIEi(ptr noundef nonnull align 4 dereferenceable(8) %9, i32 noundef %461)
  br label %462

462:                                              ; preds = %458
  %463 = load i32, ptr %31, align 4, !tbaa !9
  %464 = add nsw i32 %463, 1
  store i32 %464, ptr %31, align 4, !tbaa !9
  br label %410, !llvm.loop !41

465:                                              ; preds = %457, %413
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #5
  br label %466

466:                                              ; preds = %465
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #5
  ret void
}

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(12) ptr @_ZNSt6vectorI5blockSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #3 align 2

declare i64 @_ZN5pointplEi(ptr noundef nonnull align 4 dereferenceable(8), i32 noundef) #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(5) ptr @_ZNSt4pairIibEaSEOS0_(ptr noundef nonnull align 4 dereferenceable(5), ptr noundef nonnull align 4 dereferenceable(5)) #3 align 2

declare void @_ZN5pointmIEi(ptr noundef nonnull align 4 dereferenceable(8), i32 noundef) #4

declare i64 @_ZN5pointmiEi(ptr noundef nonnull align 4 dereferenceable(8), i32 noundef) #4

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

!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 = !{!"int", !7, i64 0}
!11 = !{!12, !6, i64 120}
!12 = !{!"_ZTS5snake", !13, i64 0, !10, i64 32, !16, i64 40, !16, i64 48, !16, i64 56, !16, i64 64, !16, i64 72, !10, i64 80, !10, i64 84, !10, i64 88, !17, i64 92, !17, i64 93, !18, i64 96, !6, i64 120}
!13 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !14, i64 0, !15, i64 8, !7, i64 16}
!14 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!15 = !{!"long", !7, i64 0}
!16 = !{!"double", !7, i64 0}
!17 = !{!"bool", !7, i64 0}
!18 = !{!"_ZTSSt6vectorI5blockSaIS0_EE", !19, i64 0}
!19 = !{!"_ZTSSt12_Vector_baseI5blockSaIS0_EE", !20, i64 0}
!20 = !{!"_ZTSNSt12_Vector_baseI5blockSaIS0_EE12_Vector_implE", !21, i64 0}
!21 = !{!"_ZTSNSt12_Vector_baseI5blockSaIS0_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!22 = !{!17, !17, i64 0}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = distinct !{!25, !24}
!26 = !{!12, !10, i64 88}
!27 = !{i64 0, i64 4, !9, i64 4, i64 4, !9}
!28 = !{!29, !10, i64 0}
!29 = !{!"_ZTSSt4pairIibE", !10, i64 0, !17, i64 4}
!30 = !{!29, !17, i64 4}
!31 = !{i8 0, i8 2}
!32 = !{}
!33 = !{!34, !10, i64 0}
!34 = !{!"_ZTS5point", !10, i64 0, !10, i64 4}
!35 = !{!34, !10, i64 4}
!36 = distinct !{!36, !24}
!37 = distinct !{!37, !24}
!38 = distinct !{!38, !24}
!39 = distinct !{!39, !24}
!40 = distinct !{!40, !24}
!41 = distinct !{!41, !24}


; 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"

%"struct.std::pair" = type <{ i32, i8, [3 x i8] }>
%struct.point = type { i32, i32 }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<std::pair<int, int>, std::allocator<std::pair<int, int>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<int, int>, std::allocator<std::pair<int, int>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<int, int>, std::allocator<std::pair<int, int>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<int, int>, std::allocator<std::pair<int, int>>>::_Vector_impl_data" = type { ptr, ptr, ptr }

; Function Attrs: mustprogress uwtable
declare dso_local i64 @_Z6seeOneRA140_A140_St6vectorISt4pairIiiESaIS1_EE5pointi(ptr noundef nonnull align 8 dereferenceable(470400), i64, i32 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 nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt6vectorISt4pairIiiESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 align 2

declare void @_ZN5pointpLEi(ptr noundef nonnull align 4 dereferenceable(8), i32 noundef) local_unnamed_addr #3

; 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 uwtable
define dso_local void @_Z6seeAllRA140_A140_St6vectorISt4pairIiiESaIS1_EER5snake(ptr noundef nonnull align 8 dereferenceable(470400) %0, ptr noundef nonnull align 8 dereferenceable(128) %1) local_unnamed_addr #0 {
.critedge:
  %2 = alloca %"struct.std::pair", align 4
  %3 = alloca %struct.point, align 8
  %4 = alloca %"struct.std::pair", align 8
  %5 = alloca %"struct.std::pair", align 8
  %6 = alloca %"struct.std::pair", align 8
  %7 = alloca %"struct.std::pair", align 8
  %8 = alloca %"struct.std::pair", align 8
  %9 = alloca %"struct.std::pair", align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %2) #5
  call void @_ZNSt4pairIibEC2IibTnNSt9enable_ifIXsr6__and_ISt37__is_implicitly_default_constructibleIT_ES3_IT0_EEE5valueEbE4typeELb1EEEv(ptr noundef nonnull align 4 dereferenceable(5) %2)
  %10 = getelementptr inbounds i8, ptr %1, i64 120
  %11 = load ptr, ptr %10, align 8, !tbaa !5
  %12 = getelementptr inbounds i8, ptr %11, i64 8
  %13 = getelementptr inbounds i8, ptr %11, i64 20
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(12) %12, i8 -1, i64 12, i1 false), !tbaa !20
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 1 dereferenceable(3) %13, i8 0, i64 3, i1 false), !tbaa !21
  %14 = getelementptr inbounds i8, ptr %11, i64 24
  store i32 -1, ptr %14, align 4, !tbaa !20
  %15 = getelementptr inbounds i8, ptr %11, i64 28
  store i8 0, ptr %15, align 1, !tbaa !21
  %16 = getelementptr inbounds i8, ptr %11, i64 32
  store i32 -1, ptr %16, align 4, !tbaa !20
  %17 = getelementptr inbounds i8, ptr %11, i64 36
  store i8 0, ptr %17, align 1, !tbaa !21
  %18 = getelementptr inbounds i8, ptr %1, i64 88
  %19 = load i32, ptr %18, align 8, !tbaa !22
  %20 = add nsw i32 %19, 1
  %21 = srem i32 %20, 4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #5
  %22 = getelementptr inbounds i8, ptr %1, i64 96
  %23 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNSt6vectorI5blockSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef 0) #5
  %24 = load i32, ptr %18, align 8, !tbaa !22
  %25 = call i64 @_ZN5pointplEi(ptr noundef nonnull align 4 dereferenceable(8) %23, i32 noundef %24)
  store i64 %25, ptr %3, align 8
  %26 = getelementptr inbounds i8, ptr %2, i64 4
  %27 = getelementptr inbounds i8, ptr %3, i64 4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #5
  %28 = load i32, ptr %18, align 8, !tbaa !22
  %29 = call i64 @_Z6seeOneRA140_A140_St6vectorISt4pairIiiESaIS1_EE5pointi(ptr noundef nonnull align 8 dereferenceable(470400) %0, i64 %25, i32 noundef %28)
  %30 = trunc i64 %29 to i40
  store i40 %30, ptr %4, align 8
  %31 = call noundef nonnull align 4 dereferenceable(5) ptr @_ZNSt4pairIibEaSEOS0_(ptr noundef nonnull align 4 dereferenceable(5) %2, ptr noundef nonnull align 4 dereferenceable(5) %4) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #5
  %32 = load i32, ptr %2, align 4, !tbaa !23
  %33 = load ptr, ptr %10, align 8, !tbaa !5
  %34 = getelementptr inbounds i8, ptr %33, i64 12
  store i32 %32, ptr %34, align 4, !tbaa !20
  %35 = load i8, ptr %26, align 4, !tbaa !25, !range !26, !noundef !27
  %36 = getelementptr inbounds i8, ptr %33, i64 21
  store i8 %35, ptr %36, align 1, !tbaa !21
  %37 = shl i64 %25, 32
  %sext = add i64 %37, 300647710720
  %38 = ashr exact i64 %sext, 32
  %sext119 = add i64 %25, 300647710720
  %39 = ashr i64 %sext119, 32
  %40 = getelementptr inbounds [140 x [140 x %"class.std::vector"]], ptr %0, i64 0, i64 %38, i64 %39
  %41 = call noundef zeroext i1 @_ZNKSt6vectorISt4pairIiiESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %40) #5
  br i1 %41, label %42, label %61

42:                                               ; preds = %.critedge
  call void @_ZN5pointpLEi(ptr noundef nonnull align 4 dereferenceable(8) %3, i32 noundef %21)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #5
  %.sroa.029.0.copyload.1 = load i64, ptr %3, align 8
  %43 = load i32, ptr %18, align 8, !tbaa !22
  %44 = call i64 @_Z6seeOneRA140_A140_St6vectorISt4pairIiiESaIS1_EE5pointi(ptr noundef nonnull align 8 dereferenceable(470400) %0, i64 %.sroa.029.0.copyload.1, i32 noundef %43)
  %45 = trunc i64 %44 to i40
  store i40 %45, ptr %4, align 8
  %46 = call noundef nonnull align 4 dereferenceable(5) ptr @_ZNSt4pairIibEaSEOS0_(ptr noundef nonnull align 4 dereferenceable(5) %2, ptr noundef nonnull align 4 dereferenceable(5) %4) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #5
  %47 = load i32, ptr %2, align 4, !tbaa !23
  %48 = load ptr, ptr %10, align 8, !tbaa !5
  %49 = getelementptr inbounds i8, ptr %48, i64 16
  store i32 %47, ptr %49, align 4, !tbaa !20
  %50 = load i8, ptr %26, align 4, !tbaa !25, !range !26, !noundef !27
  %51 = getelementptr inbounds i8, ptr %48, i64 22
  store i8 %50, ptr %51, align 1, !tbaa !21
  %52 = load i32, ptr %3, align 8, !tbaa !28
  %53 = add nsw i32 %52, 70
  %54 = sext i32 %53 to i64
  %55 = load i32, ptr %27, align 4, !tbaa !30
  %56 = add nsw i32 %55, 70
  %57 = sext i32 %56 to i64
  %58 = getelementptr inbounds [140 x [140 x %"class.std::vector"]], ptr %0, i64 0, i64 %54, i64 %57
  %59 = call noundef zeroext i1 @_ZNKSt6vectorISt4pairIiiESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %58) #5
  br i1 %59, label %60, label %61

60:                                               ; preds = %42
  call void @_ZN5pointpLEi(ptr noundef nonnull align 4 dereferenceable(8) %3, i32 noundef %21)
  br label %61

61:                                               ; preds = %60, %42, %.critedge
  %62 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNSt6vectorI5blockSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef 0) #5
  %63 = load i32, ptr %18, align 8, !tbaa !22
  %64 = call i64 @_ZN5pointplEi(ptr noundef nonnull align 4 dereferenceable(8) %62, i32 noundef %63)
  store i64 %64, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #5
  %65 = load i32, ptr %18, align 8, !tbaa !22
  %66 = call i64 @_Z6seeOneRA140_A140_St6vectorISt4pairIiiESaIS1_EE5pointi(ptr noundef nonnull align 8 dereferenceable(470400) %0, i64 %64, i32 noundef %65)
  %67 = trunc i64 %66 to i40
  store i40 %67, ptr %5, align 8
  %68 = call noundef nonnull align 4 dereferenceable(5) ptr @_ZNSt4pairIibEaSEOS0_(ptr noundef nonnull align 4 dereferenceable(5) %2, ptr noundef nonnull align 4 dereferenceable(5) %5) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #5
  %69 = load i32, ptr %2, align 4, !tbaa !23
  %70 = load ptr, ptr %10, align 8, !tbaa !5
  %71 = getelementptr inbounds i8, ptr %70, i64 12
  store i32 %69, ptr %71, align 4, !tbaa !20
  %72 = load i8, ptr %26, align 4, !tbaa !25, !range !26, !noundef !27
  %73 = getelementptr inbounds i8, ptr %70, i64 21
  store i8 %72, ptr %73, align 1, !tbaa !21
  %74 = load i32, ptr %3, align 8, !tbaa !28
  %75 = add nsw i32 %74, 70
  %76 = sext i32 %75 to i64
  %77 = load i32, ptr %27, align 4, !tbaa !30
  %78 = add nsw i32 %77, 70
  %79 = sext i32 %78 to i64
  %80 = getelementptr inbounds [140 x [140 x %"class.std::vector"]], ptr %0, i64 0, i64 %76, i64 %79
  %81 = call noundef zeroext i1 @_ZNKSt6vectorISt4pairIiiESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %80) #5
  br i1 %81, label %82, label %.critedge106

82:                                               ; preds = %61
  call void @_ZN5pointmIEi(ptr noundef nonnull align 4 dereferenceable(8) %3, i32 noundef %21)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #5
  %.sroa.023.0.copyload.1 = load i64, ptr %3, align 8
  %83 = load i32, ptr %18, align 8, !tbaa !22
  %84 = call i64 @_Z6seeOneRA140_A140_St6vectorISt4pairIiiESaIS1_EE5pointi(ptr noundef nonnull align 8 dereferenceable(470400) %0, i64 %.sroa.023.0.copyload.1, i32 noundef %83)
  %85 = trunc i64 %84 to i40
  store i40 %85, ptr %5, align 8
  %86 = call noundef nonnull align 4 dereferenceable(5) ptr @_ZNSt4pairIibEaSEOS0_(ptr noundef nonnull align 4 dereferenceable(5) %2, ptr noundef nonnull align 4 dereferenceable(5) %5) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #5
  %87 = load i32, ptr %2, align 4, !tbaa !23
  %88 = load ptr, ptr %10, align 8, !tbaa !5
  %89 = getelementptr inbounds i8, ptr %88, i64 8
  store i32 %87, ptr %89, align 4, !tbaa !20
  %90 = load i8, ptr %26, align 4, !tbaa !25, !range !26, !noundef !27
  %91 = getelementptr inbounds i8, ptr %88, i64 20
  store i8 %90, ptr %91, align 1, !tbaa !21
  %92 = load i32, ptr %3, align 8, !tbaa !28
  %93 = add nsw i32 %92, 70
  %94 = sext i32 %93 to i64
  %95 = load i32, ptr %27, align 4, !tbaa !30
  %96 = add nsw i32 %95, 70
  %97 = sext i32 %96 to i64
  %98 = getelementptr inbounds [140 x [140 x %"class.std::vector"]], ptr %0, i64 0, i64 %94, i64 %97
  %99 = call noundef zeroext i1 @_ZNKSt6vectorISt4pairIiiESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %98) #5
  br i1 %99, label %100, label %.critedge106

100:                                              ; preds = %82
  call void @_ZN5pointmIEi(ptr noundef nonnull align 4 dereferenceable(8) %3, i32 noundef %21)
  br label %.critedge106

.critedge106:                                     ; preds = %100, %82, %61
  %101 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNSt6vectorI5blockSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef 0) #5
  %102 = call i64 @_ZN5pointplEi(ptr noundef nonnull align 4 dereferenceable(8) %101, i32 noundef %21)
  store i64 %102, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #5
  %103 = call i64 @_Z6seeOneRA140_A140_St6vectorISt4pairIiiESaIS1_EE5pointi(ptr noundef nonnull align 8 dereferenceable(470400) %0, i64 %102, i32 noundef %21)
  %104 = trunc i64 %103 to i40
  store i40 %104, ptr %6, align 8
  %105 = call noundef nonnull align 4 dereferenceable(5) ptr @_ZNSt4pairIibEaSEOS0_(ptr noundef nonnull align 4 dereferenceable(5) %2, ptr noundef nonnull align 4 dereferenceable(5) %6) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #5
  %106 = load i32, ptr %2, align 4, !tbaa !23
  %107 = load ptr, ptr %10, align 8, !tbaa !5
  %108 = getelementptr inbounds i8, ptr %107, i64 24
  store i32 %106, ptr %108, align 4, !tbaa !20
  %109 = load i8, ptr %26, align 4, !tbaa !25, !range !26, !noundef !27
  %110 = getelementptr inbounds i8, ptr %107, i64 28
  store i8 %109, ptr %110, align 1, !tbaa !21
  %111 = load i32, ptr %3, align 8, !tbaa !28
  %112 = add nsw i32 %111, 70
  %113 = sext i32 %112 to i64
  %114 = load i32, ptr %27, align 4, !tbaa !30
  %115 = add nsw i32 %114, 70
  %116 = sext i32 %115 to i64
  %117 = getelementptr inbounds [140 x [140 x %"class.std::vector"]], ptr %0, i64 0, i64 %113, i64 %116
  %118 = call noundef zeroext i1 @_ZNKSt6vectorISt4pairIiiESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %117) #5
  br i1 %118, label %119, label %.critedge108

119:                                              ; preds = %.critedge106
  %120 = load i32, ptr %18, align 8, !tbaa !22
  call void @_ZN5pointpLEi(ptr noundef nonnull align 4 dereferenceable(8) %3, i32 noundef %120)
  br label %.critedge108

.critedge108:                                     ; preds = %.critedge106, %119
  %121 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNSt6vectorI5blockSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef 0) #5
  %122 = call i64 @_ZN5pointplEi(ptr noundef nonnull align 4 dereferenceable(8) %121, i32 noundef %21)
  store i64 %122, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #5
  %123 = call i64 @_Z6seeOneRA140_A140_St6vectorISt4pairIiiESaIS1_EE5pointi(ptr noundef nonnull align 8 dereferenceable(470400) %0, i64 %122, i32 noundef %21)
  %124 = trunc i64 %123 to i40
  store i40 %124, ptr %7, align 8
  %125 = call noundef nonnull align 4 dereferenceable(5) ptr @_ZNSt4pairIibEaSEOS0_(ptr noundef nonnull align 4 dereferenceable(5) %2, ptr noundef nonnull align 4 dereferenceable(5) %7) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #5
  %126 = load i32, ptr %2, align 4, !tbaa !23
  %127 = load ptr, ptr %10, align 8, !tbaa !5
  %128 = getelementptr inbounds i8, ptr %127, i64 24
  store i32 %126, ptr %128, align 4, !tbaa !20
  %129 = load i8, ptr %26, align 4, !tbaa !25, !range !26, !noundef !27
  %130 = getelementptr inbounds i8, ptr %127, i64 28
  store i8 %129, ptr %130, align 1, !tbaa !21
  %131 = load i32, ptr %3, align 8, !tbaa !28
  %132 = add nsw i32 %131, 70
  %133 = sext i32 %132 to i64
  %134 = load i32, ptr %27, align 4, !tbaa !30
  %135 = add nsw i32 %134, 70
  %136 = sext i32 %135 to i64
  %137 = getelementptr inbounds [140 x [140 x %"class.std::vector"]], ptr %0, i64 0, i64 %133, i64 %136
  %138 = call noundef zeroext i1 @_ZNKSt6vectorISt4pairIiiESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %137) #5
  br i1 %138, label %139, label %.critedge110

139:                                              ; preds = %.critedge108
  %140 = load i32, ptr %18, align 8, !tbaa !22
  call void @_ZN5pointmIEi(ptr noundef nonnull align 4 dereferenceable(8) %3, i32 noundef %140)
  br label %.critedge110

.critedge110:                                     ; preds = %.critedge108, %139
  %141 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNSt6vectorI5blockSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef 0) #5
  %142 = call i64 @_ZN5pointmiEi(ptr noundef nonnull align 4 dereferenceable(8) %141, i32 noundef %21)
  store i64 %142, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #5
  %143 = trunc nsw i32 %21 to i8
  %.lhs.trunc = add nsw i8 %143, 2
  %144 = srem i8 %.lhs.trunc, 4
  %.sext = sext i8 %144 to i32
  %145 = call i64 @_Z6seeOneRA140_A140_St6vectorISt4pairIiiESaIS1_EE5pointi(ptr noundef nonnull align 8 dereferenceable(470400) %0, i64 %142, i32 noundef %.sext)
  %146 = trunc i64 %145 to i40
  store i40 %146, ptr %8, align 8
  %147 = call noundef nonnull align 4 dereferenceable(5) ptr @_ZNSt4pairIibEaSEOS0_(ptr noundef nonnull align 4 dereferenceable(5) %2, ptr noundef nonnull align 4 dereferenceable(5) %8) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #5
  %148 = load i32, ptr %2, align 4, !tbaa !23
  %149 = load ptr, ptr %10, align 8, !tbaa !5
  %150 = getelementptr inbounds i8, ptr %149, i64 32
  store i32 %148, ptr %150, align 4, !tbaa !20
  %151 = load i8, ptr %26, align 4, !tbaa !25, !range !26, !noundef !27
  %152 = getelementptr inbounds i8, ptr %149, i64 36
  store i8 %151, ptr %152, align 1, !tbaa !21
  %153 = load i32, ptr %3, align 8, !tbaa !28
  %154 = add nsw i32 %153, 70
  %155 = sext i32 %154 to i64
  %156 = load i32, ptr %27, align 4, !tbaa !30
  %157 = add nsw i32 %156, 70
  %158 = sext i32 %157 to i64
  %159 = getelementptr inbounds [140 x [140 x %"class.std::vector"]], ptr %0, i64 0, i64 %155, i64 %158
  %160 = call noundef zeroext i1 @_ZNKSt6vectorISt4pairIiiESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %159) #5
  br i1 %160, label %161, label %.critedge112

161:                                              ; preds = %.critedge110
  %162 = load i32, ptr %18, align 8, !tbaa !22
  call void @_ZN5pointpLEi(ptr noundef nonnull align 4 dereferenceable(8) %3, i32 noundef %162)
  br label %.critedge112

.critedge112:                                     ; preds = %.critedge110, %161
  %163 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNSt6vectorI5blockSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef 0) #5
  %164 = call i64 @_ZN5pointmiEi(ptr noundef nonnull align 4 dereferenceable(8) %163, i32 noundef %21)
  store i64 %164, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #5
  %165 = call i64 @_Z6seeOneRA140_A140_St6vectorISt4pairIiiESaIS1_EE5pointi(ptr noundef nonnull align 8 dereferenceable(470400) %0, i64 %164, i32 noundef %.sext)
  %166 = trunc i64 %165 to i40
  store i40 %166, ptr %9, align 8
  %167 = call noundef nonnull align 4 dereferenceable(5) ptr @_ZNSt4pairIibEaSEOS0_(ptr noundef nonnull align 4 dereferenceable(5) %2, ptr noundef nonnull align 4 dereferenceable(5) %9) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #5
  %168 = load i32, ptr %2, align 4, !tbaa !23
  %169 = load ptr, ptr %10, align 8, !tbaa !5
  %170 = getelementptr inbounds i8, ptr %169, i64 32
  store i32 %168, ptr %170, align 4, !tbaa !20
  %171 = load i8, ptr %26, align 4, !tbaa !25, !range !26, !noundef !27
  %172 = getelementptr inbounds i8, ptr %169, i64 36
  store i8 %171, ptr %172, align 1, !tbaa !21
  %173 = load i32, ptr %3, align 8, !tbaa !28
  %174 = add nsw i32 %173, 70
  %175 = sext i32 %174 to i64
  %176 = load i32, ptr %27, align 4, !tbaa !30
  %177 = add nsw i32 %176, 70
  %178 = sext i32 %177 to i64
  %179 = getelementptr inbounds [140 x [140 x %"class.std::vector"]], ptr %0, i64 0, i64 %175, i64 %178
  %180 = call noundef zeroext i1 @_ZNKSt6vectorISt4pairIiiESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %179) #5
  br i1 %180, label %181, label %183

181:                                              ; preds = %.critedge112
  %182 = load i32, ptr %18, align 8, !tbaa !22
  call void @_ZN5pointmIEi(ptr noundef nonnull align 4 dereferenceable(8) %3, i32 noundef %182)
  br label %183

183:                                              ; preds = %.critedge112, %181
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #5
  ret void
}

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(12) ptr @_ZNSt6vectorI5blockSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #2 align 2

declare i64 @_ZN5pointplEi(ptr noundef nonnull align 4 dereferenceable(8), i32 noundef) local_unnamed_addr #3

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

declare void @_ZN5pointmIEi(ptr noundef nonnull align 4 dereferenceable(8), i32 noundef) local_unnamed_addr #3

declare i64 @_ZN5pointmiEi(ptr noundef nonnull align 4 dereferenceable(8), i32 noundef) local_unnamed_addr #3

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

attributes #0 = { 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 #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 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #5 = { 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, !9, i64 120}
!6 = !{!"_ZTS5snake", !7, i64 0, !13, i64 32, !14, i64 40, !14, i64 48, !14, i64 56, !14, i64 64, !14, i64 72, !13, i64 80, !13, i64 84, !13, i64 88, !15, i64 92, !15, i64 93, !16, i64 96, !9, i64 120}
!7 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !8, i64 0, !12, i64 8, !10, i64 16}
!8 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !9, i64 0}
!9 = !{!"any pointer", !10, i64 0}
!10 = !{!"omnipotent char", !11, i64 0}
!11 = !{!"Simple C++ TBAA"}
!12 = !{!"long", !10, i64 0}
!13 = !{!"int", !10, i64 0}
!14 = !{!"double", !10, i64 0}
!15 = !{!"bool", !10, i64 0}
!16 = !{!"_ZTSSt6vectorI5blockSaIS0_EE", !17, i64 0}
!17 = !{!"_ZTSSt12_Vector_baseI5blockSaIS0_EE", !18, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseI5blockSaIS0_EE12_Vector_implE", !19, i64 0}
!19 = !{!"_ZTSNSt12_Vector_baseI5blockSaIS0_EE17_Vector_impl_dataE", !9, i64 0, !9, i64 8, !9, i64 16}
!20 = !{!13, !13, i64 0}
!21 = !{!15, !15, i64 0}
!22 = !{!6, !13, i64 88}
!23 = !{!24, !13, i64 0}
!24 = !{!"_ZTSSt4pairIibE", !13, i64 0, !15, i64 4}
!25 = !{!24, !15, i64 4}
!26 = !{i8 0, i8 2}
!27 = !{}
!28 = !{!29, !13, i64 0}
!29 = !{!"_ZTS5point", !13, i64 0, !13, i64 4}
!30 = !{!29, !13, i64 4}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,LICMPass,LoopIdiomRecognizePass,LoopRotatePass,SCCPPass,SROAPass,SimplifyCFGPass