; LLVM IR from upupming/algorithm :: acwing/算法竞赛进阶指南/0x51-线性DP/276. I-区域 (main)

; 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.State = type { i32, i32, i32, i32, i32, i32 }
%"class.std::basic_istream" = type { ptr, i64, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::locale" = type { ptr }

@n = external dso_local global i32, align 4
@m = external dso_local global i32, align 4
@k = external dso_local global i32, align 4
@w = external dso_local global [16 x [16 x i32]], align 16
@f = external dso_local global [16 x [256 x [16 x [16 x [2 x [2 x i32]]]]]], align 16
@g = external dso_local global [16 x [256 x [16 x [16 x [2 x [2 x %struct.State]]]]]], align 16
@_ZSt3cin = external global %"class.std::basic_istream", align 8
@.str = external hidden unnamed_addr constant [10 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [7 x i8], align 1

; Function Attrs: mustprogress norecurse uwtable
define dso_local noundef i32 @main() #0 {
  %1 = alloca i32, align 4
  %2 = alloca i32, align 4
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca %struct.State, align 4
  %15 = alloca i32, align 4
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca %struct.State, align 4
  %23 = alloca i32, align 4
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca %struct.State, align 4
  %31 = alloca i32, align 4
  %32 = alloca ptr, align 8
  %33 = alloca ptr, align 8
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca %struct.State, align 4
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca %struct.State, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  %46 = alloca i32, align 4
  %47 = alloca i32, align 4
  %48 = alloca i32, align 4
  %49 = alloca %struct.State, align 4
  %50 = alloca i32, align 4
  store i32 0, ptr %1, align 4
  %51 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERi(ptr noundef nonnull align 8 dereferenceable(16) @_ZSt3cin, ptr noundef nonnull align 4 dereferenceable(4) @n)
  %52 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERi(ptr noundef nonnull align 8 dereferenceable(16) %51, ptr noundef nonnull align 4 dereferenceable(4) @m)
  %53 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERi(ptr noundef nonnull align 8 dereferenceable(16) %52, ptr noundef nonnull align 4 dereferenceable(4) @k)
  call void @llvm.lifetime.start.p0(i64 4, ptr %2) #4
  store i32 1, ptr %2, align 4, !tbaa !5
  br label %54

54:                                               ; preds = %77, %0
  %55 = load i32, ptr %2, align 4, !tbaa !5
  %56 = load i32, ptr @n, align 4, !tbaa !5
  %57 = icmp sle i32 %55, %56
  br i1 %57, label %59, label %58

58:                                               ; preds = %54
  store i32 2, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %2) #4
  br label %80

59:                                               ; preds = %54
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #4
  store i32 1, ptr %4, align 4, !tbaa !5
  br label %60

60:                                               ; preds = %73, %59
  %61 = load i32, ptr %4, align 4, !tbaa !5
  %62 = load i32, ptr @m, align 4, !tbaa !5
  %63 = icmp sle i32 %61, %62
  br i1 %63, label %65, label %64

64:                                               ; preds = %60
  store i32 5, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #4
  br label %76

65:                                               ; preds = %60
  %66 = load i32, ptr %2, align 4, !tbaa !5
  %67 = sext i32 %66 to i64
  %68 = getelementptr inbounds [16 x [16 x i32]], ptr @w, i64 0, i64 %67
  %69 = load i32, ptr %4, align 4, !tbaa !5
  %70 = sext i32 %69 to i64
  %71 = getelementptr inbounds [16 x i32], ptr %68, i64 0, i64 %70
  %72 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERi(ptr noundef nonnull align 8 dereferenceable(16) @_ZSt3cin, ptr noundef nonnull align 4 dereferenceable(4) %71)
  br label %73

73:                                               ; preds = %65
  %74 = load i32, ptr %4, align 4, !tbaa !5
  %75 = add nsw i32 %74, 1
  store i32 %75, ptr %4, align 4, !tbaa !5
  br label %60, !llvm.loop !9

76:                                               ; preds = %64
  br label %77

77:                                               ; preds = %76
  %78 = load i32, ptr %2, align 4, !tbaa !5
  %79 = add nsw i32 %78, 1
  store i32 %79, ptr %2, align 4, !tbaa !5
  br label %54, !llvm.loop !11

80:                                               ; preds = %58
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #4
  store i32 1, ptr %5, align 4, !tbaa !5
  br label %81

81:                                               ; preds = %640, %80
  %82 = load i32, ptr %5, align 4, !tbaa !5
  %83 = load i32, ptr @n, align 4, !tbaa !5
  %84 = icmp sle i32 %82, %83
  br i1 %84, label %86, label %85

85:                                               ; preds = %81
  store i32 8, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #4
  br label %643

86:                                               ; preds = %81
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #4
  store i32 1, ptr %6, align 4, !tbaa !5
  br label %87

87:                                               ; preds = %636, %86
  %88 = load i32, ptr %6, align 4, !tbaa !5
  %89 = load i32, ptr @k, align 4, !tbaa !5
  %90 = icmp sle i32 %88, %89
  br i1 %90, label %92, label %91

91:                                               ; preds = %87
  store i32 11, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #4
  br label %639

92:                                               ; preds = %87
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #4
  store i32 1, ptr %7, align 4, !tbaa !5
  br label %93

93:                                               ; preds = %632, %92
  %94 = load i32, ptr %7, align 4, !tbaa !5
  %95 = load i32, ptr @m, align 4, !tbaa !5
  %96 = icmp sle i32 %94, %95
  br i1 %96, label %98, label %97

97:                                               ; preds = %93
  store i32 14, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #4
  br label %635

98:                                               ; preds = %93
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #4
  %99 = load i32, ptr %7, align 4, !tbaa !5
  store i32 %99, ptr %8, align 4, !tbaa !5
  br label %100

100:                                              ; preds = %628, %98
  %101 = load i32, ptr %8, align 4, !tbaa !5
  %102 = load i32, ptr @m, align 4, !tbaa !5
  %103 = icmp sle i32 %101, %102
  br i1 %103, label %105, label %104

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

105:                                              ; preds = %100
  %106 = load i32, ptr %6, align 4, !tbaa !5
  %107 = load i32, ptr %8, align 4, !tbaa !5
  %108 = load i32, ptr %7, align 4, !tbaa !5
  %109 = sub nsw i32 %107, %108
  %110 = add nsw i32 %109, 1
  %111 = icmp slt i32 %106, %110
  br i1 %111, label %112, label %113

112:                                              ; preds = %105
  br label %628

113:                                              ; preds = %105
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #4
  %114 = load i32, ptr %5, align 4, !tbaa !5
  %115 = sext i32 %114 to i64
  %116 = getelementptr inbounds [16 x [256 x [16 x [16 x [2 x [2 x i32]]]]]], ptr @f, i64 0, i64 %115
  %117 = load i32, ptr %6, align 4, !tbaa !5
  %118 = sext i32 %117 to i64
  %119 = getelementptr inbounds [256 x [16 x [16 x [2 x [2 x i32]]]]], ptr %116, i64 0, i64 %118
  %120 = load i32, ptr %7, align 4, !tbaa !5
  %121 = sext i32 %120 to i64
  %122 = getelementptr inbounds [16 x [16 x [2 x [2 x i32]]]], ptr %119, i64 0, i64 %121
  %123 = load i32, ptr %8, align 4, !tbaa !5
  %124 = sext i32 %123 to i64
  %125 = getelementptr inbounds [16 x [2 x [2 x i32]]], ptr %122, i64 0, i64 %124
  %126 = getelementptr inbounds [2 x [2 x i32]], ptr %125, i64 0, i64 1
  %127 = getelementptr inbounds [2 x i32], ptr %126, i64 0, i64 0
  store ptr %127, ptr %9, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #4
  %128 = load i32, ptr %5, align 4, !tbaa !5
  %129 = sext i32 %128 to i64
  %130 = getelementptr inbounds [16 x [256 x [16 x [16 x [2 x [2 x %struct.State]]]]]], ptr @g, i64 0, i64 %129
  %131 = load i32, ptr %6, align 4, !tbaa !5
  %132 = sext i32 %131 to i64
  %133 = getelementptr inbounds [256 x [16 x [16 x [2 x [2 x %struct.State]]]]], ptr %130, i64 0, i64 %132
  %134 = load i32, ptr %7, align 4, !tbaa !5
  %135 = sext i32 %134 to i64
  %136 = getelementptr inbounds [16 x [16 x [2 x [2 x %struct.State]]]], ptr %133, i64 0, i64 %135
  %137 = load i32, ptr %8, align 4, !tbaa !5
  %138 = sext i32 %137 to i64
  %139 = getelementptr inbounds [16 x [2 x [2 x %struct.State]]], ptr %136, i64 0, i64 %138
  %140 = getelementptr inbounds [2 x [2 x %struct.State]], ptr %139, i64 0, i64 1
  %141 = getelementptr inbounds [2 x %struct.State], ptr %140, i64 0, i64 0
  store ptr %141, ptr %10, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #4
  %142 = load i32, ptr %7, align 4, !tbaa !5
  store i32 %142, ptr %11, align 4, !tbaa !5
  br label %143

143:                                              ; preds = %206, %113
  %144 = load i32, ptr %11, align 4, !tbaa !5
  %145 = load i32, ptr %8, align 4, !tbaa !5
  %146 = icmp sle i32 %144, %145
  br i1 %146, label %148, label %147

147:                                              ; preds = %143
  store i32 20, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #4
  br label %209

148:                                              ; preds = %143
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #4
  %149 = load i32, ptr %11, align 4, !tbaa !5
  store i32 %149, ptr %12, align 4, !tbaa !5
  br label %150

150:                                              ; preds = %202, %148
  %151 = load i32, ptr %12, align 4, !tbaa !5
  %152 = load i32, ptr %8, align 4, !tbaa !5
  %153 = icmp sle i32 %151, %152
  br i1 %153, label %155, label %154

154:                                              ; preds = %150
  store i32 23, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #4
  br label %205

155:                                              ; preds = %150
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #4
  %156 = load i32, ptr %5, align 4, !tbaa !5
  %157 = sub nsw i32 %156, 1
  %158 = sext i32 %157 to i64
  %159 = getelementptr inbounds [16 x [256 x [16 x [16 x [2 x [2 x i32]]]]]], ptr @f, i64 0, i64 %158
  %160 = load i32, ptr %6, align 4, !tbaa !5
  %161 = load i32, ptr %8, align 4, !tbaa !5
  %162 = load i32, ptr %7, align 4, !tbaa !5
  %163 = sub nsw i32 %161, %162
  %164 = add nsw i32 %163, 1
  %165 = sub nsw i32 %160, %164
  %166 = sext i32 %165 to i64
  %167 = getelementptr inbounds [256 x [16 x [16 x [2 x [2 x i32]]]]], ptr %159, i64 0, i64 %166
  %168 = load i32, ptr %11, align 4, !tbaa !5
  %169 = sext i32 %168 to i64
  %170 = getelementptr inbounds [16 x [16 x [2 x [2 x i32]]]], ptr %167, i64 0, i64 %169
  %171 = load i32, ptr %12, align 4, !tbaa !5
  %172 = sext i32 %171 to i64
  %173 = getelementptr inbounds [16 x [2 x [2 x i32]]], ptr %170, i64 0, i64 %172
  %174 = getelementptr inbounds [2 x [2 x i32]], ptr %173, i64 0, i64 1
  %175 = getelementptr inbounds [2 x i32], ptr %174, i64 0, i64 0
  %176 = load i32, ptr %175, align 8, !tbaa !5
  store i32 %176, ptr %13, align 4, !tbaa !5
  %177 = load ptr, ptr %9, align 8, !tbaa !12
  %178 = load i32, ptr %177, align 4, !tbaa !5
  %179 = load i32, ptr %13, align 4, !tbaa !5
  %180 = icmp slt i32 %178, %179
  br i1 %180, label %181, label %201

181:                                              ; preds = %155
  %182 = load i32, ptr %13, align 4, !tbaa !5
  %183 = load ptr, ptr %9, align 8, !tbaa !12
  store i32 %182, ptr %183, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %14) #4
  %184 = getelementptr inbounds %struct.State, ptr %14, i32 0, i32 0
  %185 = load i32, ptr %5, align 4, !tbaa !5
  %186 = sub nsw i32 %185, 1
  store i32 %186, ptr %184, align 4, !tbaa !14
  %187 = getelementptr inbounds %struct.State, ptr %14, i32 0, i32 1
  %188 = load i32, ptr %6, align 4, !tbaa !5
  %189 = load i32, ptr %8, align 4, !tbaa !5
  %190 = load i32, ptr %7, align 4, !tbaa !5
  %191 = sub nsw i32 %189, %190
  %192 = add nsw i32 %191, 1
  %193 = sub nsw i32 %188, %192
  store i32 %193, ptr %187, align 4, !tbaa !16
  %194 = getelementptr inbounds %struct.State, ptr %14, i32 0, i32 2
  %195 = load i32, ptr %11, align 4, !tbaa !5
  store i32 %195, ptr %194, align 4, !tbaa !17
  %196 = getelementptr inbounds %struct.State, ptr %14, i32 0, i32 3
  %197 = load i32, ptr %12, align 4, !tbaa !5
  store i32 %197, ptr %196, align 4, !tbaa !18
  %198 = getelementptr inbounds %struct.State, ptr %14, i32 0, i32 4
  store i32 1, ptr %198, align 4, !tbaa !19
  %199 = getelementptr inbounds %struct.State, ptr %14, i32 0, i32 5
  store i32 0, ptr %199, align 4, !tbaa !20
  %200 = load ptr, ptr %10, align 8, !tbaa !12
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %200, ptr align 4 %14, i64 24, i1 false), !tbaa.struct !21
  call void @llvm.lifetime.end.p0(i64 24, ptr %14) #4
  br label %201

201:                                              ; preds = %181, %155
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  br label %202

202:                                              ; preds = %201
  %203 = load i32, ptr %12, align 4, !tbaa !5
  %204 = add nsw i32 %203, 1
  store i32 %204, ptr %12, align 4, !tbaa !5
  br label %150, !llvm.loop !22

205:                                              ; preds = %154
  br label %206

206:                                              ; preds = %205
  %207 = load i32, ptr %11, align 4, !tbaa !5
  %208 = add nsw i32 %207, 1
  store i32 %208, ptr %11, align 4, !tbaa !5
  br label %143, !llvm.loop !23

209:                                              ; preds = %147
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #4
  %210 = load i32, ptr %7, align 4, !tbaa !5
  store i32 %210, ptr %15, align 4, !tbaa !5
  br label %211

211:                                              ; preds = %227, %209
  %212 = load i32, ptr %15, align 4, !tbaa !5
  %213 = load i32, ptr %8, align 4, !tbaa !5
  %214 = icmp sle i32 %212, %213
  br i1 %214, label %216, label %215

215:                                              ; preds = %211
  store i32 26, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #4
  br label %230

216:                                              ; preds = %211
  %217 = load i32, ptr %5, align 4, !tbaa !5
  %218 = sext i32 %217 to i64
  %219 = getelementptr inbounds [16 x [16 x i32]], ptr @w, i64 0, i64 %218
  %220 = load i32, ptr %15, align 4, !tbaa !5
  %221 = sext i32 %220 to i64
  %222 = getelementptr inbounds [16 x i32], ptr %219, i64 0, i64 %221
  %223 = load i32, ptr %222, align 4, !tbaa !5
  %224 = load ptr, ptr %9, align 8, !tbaa !12
  %225 = load i32, ptr %224, align 4, !tbaa !5
  %226 = add nsw i32 %225, %223
  store i32 %226, ptr %224, align 4, !tbaa !5
  br label %227

227:                                              ; preds = %216
  %228 = load i32, ptr %15, align 4, !tbaa !5
  %229 = add nsw i32 %228, 1
  store i32 %229, ptr %15, align 4, !tbaa !5
  br label %211, !llvm.loop !24

230:                                              ; preds = %215
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #4
  %231 = load i32, ptr %5, align 4, !tbaa !5
  %232 = sext i32 %231 to i64
  %233 = getelementptr inbounds [16 x [256 x [16 x [16 x [2 x [2 x i32]]]]]], ptr @f, i64 0, i64 %232
  %234 = load i32, ptr %6, align 4, !tbaa !5
  %235 = sext i32 %234 to i64
  %236 = getelementptr inbounds [256 x [16 x [16 x [2 x [2 x i32]]]]], ptr %233, i64 0, i64 %235
  %237 = load i32, ptr %7, align 4, !tbaa !5
  %238 = sext i32 %237 to i64
  %239 = getelementptr inbounds [16 x [16 x [2 x [2 x i32]]]], ptr %236, i64 0, i64 %238
  %240 = load i32, ptr %8, align 4, !tbaa !5
  %241 = sext i32 %240 to i64
  %242 = getelementptr inbounds [16 x [2 x [2 x i32]]], ptr %239, i64 0, i64 %241
  %243 = getelementptr inbounds [2 x [2 x i32]], ptr %242, i64 0, i64 1
  %244 = getelementptr inbounds [2 x i32], ptr %243, i64 0, i64 1
  store ptr %244, ptr %16, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #4
  %245 = load i32, ptr %5, align 4, !tbaa !5
  %246 = sext i32 %245 to i64
  %247 = getelementptr inbounds [16 x [256 x [16 x [16 x [2 x [2 x %struct.State]]]]]], ptr @g, i64 0, i64 %246
  %248 = load i32, ptr %6, align 4, !tbaa !5
  %249 = sext i32 %248 to i64
  %250 = getelementptr inbounds [256 x [16 x [16 x [2 x [2 x %struct.State]]]]], ptr %247, i64 0, i64 %249
  %251 = load i32, ptr %7, align 4, !tbaa !5
  %252 = sext i32 %251 to i64
  %253 = getelementptr inbounds [16 x [16 x [2 x [2 x %struct.State]]]], ptr %250, i64 0, i64 %252
  %254 = load i32, ptr %8, align 4, !tbaa !5
  %255 = sext i32 %254 to i64
  %256 = getelementptr inbounds [16 x [2 x [2 x %struct.State]]], ptr %253, i64 0, i64 %255
  %257 = getelementptr inbounds [2 x [2 x %struct.State]], ptr %256, i64 0, i64 1
  %258 = getelementptr inbounds [2 x %struct.State], ptr %257, i64 0, i64 1
  store ptr %258, ptr %17, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #4
  %259 = load i32, ptr %7, align 4, !tbaa !5
  store i32 %259, ptr %18, align 4, !tbaa !5
  br label %260

260:                                              ; preds = %335, %230
  %261 = load i32, ptr %18, align 4, !tbaa !5
  %262 = load i32, ptr %8, align 4, !tbaa !5
  %263 = icmp sle i32 %261, %262
  br i1 %263, label %265, label %264

264:                                              ; preds = %260
  store i32 29, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  br label %338

265:                                              ; preds = %260
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #4
  %266 = load i32, ptr %8, align 4, !tbaa !5
  store i32 %266, ptr %19, align 4, !tbaa !5
  br label %267

267:                                              ; preds = %331, %265
  %268 = load i32, ptr %19, align 4, !tbaa !5
  %269 = load i32, ptr @m, align 4, !tbaa !5
  %270 = icmp sle i32 %268, %269
  br i1 %270, label %272, label %271

271:                                              ; preds = %267
  store i32 32, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  br label %334

272:                                              ; preds = %267
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #4
  store i32 0, ptr %20, align 4, !tbaa !5
  br label %273

273:                                              ; preds = %327, %272
  %274 = load i32, ptr %20, align 4, !tbaa !5
  %275 = icmp sle i32 %274, 1
  br i1 %275, label %277, label %276

276:                                              ; preds = %273
  store i32 35, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #4
  br label %330

277:                                              ; preds = %273
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #4
  %278 = load i32, ptr %5, align 4, !tbaa !5
  %279 = sub nsw i32 %278, 1
  %280 = sext i32 %279 to i64
  %281 = getelementptr inbounds [16 x [256 x [16 x [16 x [2 x [2 x i32]]]]]], ptr @f, i64 0, i64 %280
  %282 = load i32, ptr %6, align 4, !tbaa !5
  %283 = load i32, ptr %8, align 4, !tbaa !5
  %284 = load i32, ptr %7, align 4, !tbaa !5
  %285 = sub nsw i32 %283, %284
  %286 = add nsw i32 %285, 1
  %287 = sub nsw i32 %282, %286
  %288 = sext i32 %287 to i64
  %289 = getelementptr inbounds [256 x [16 x [16 x [2 x [2 x i32]]]]], ptr %281, i64 0, i64 %288
  %290 = load i32, ptr %18, align 4, !tbaa !5
  %291 = sext i32 %290 to i64
  %292 = getelementptr inbounds [16 x [16 x [2 x [2 x i32]]]], ptr %289, i64 0, i64 %291
  %293 = load i32, ptr %19, align 4, !tbaa !5
  %294 = sext i32 %293 to i64
  %295 = getelementptr inbounds [16 x [2 x [2 x i32]]], ptr %292, i64 0, i64 %294
  %296 = getelementptr inbounds [2 x [2 x i32]], ptr %295, i64 0, i64 1
  %297 = load i32, ptr %20, align 4, !tbaa !5
  %298 = sext i32 %297 to i64
  %299 = getelementptr inbounds [2 x i32], ptr %296, i64 0, i64 %298
  %300 = load i32, ptr %299, align 4, !tbaa !5
  store i32 %300, ptr %21, align 4, !tbaa !5
  %301 = load ptr, ptr %16, align 8, !tbaa !12
  %302 = load i32, ptr %301, align 4, !tbaa !5
  %303 = load i32, ptr %21, align 4, !tbaa !5
  %304 = icmp slt i32 %302, %303
  br i1 %304, label %305, label %326

305:                                              ; preds = %277
  %306 = load i32, ptr %21, align 4, !tbaa !5
  %307 = load ptr, ptr %16, align 8, !tbaa !12
  store i32 %306, ptr %307, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %22) #4
  %308 = getelementptr inbounds %struct.State, ptr %22, i32 0, i32 0
  %309 = load i32, ptr %5, align 4, !tbaa !5
  %310 = sub nsw i32 %309, 1
  store i32 %310, ptr %308, align 4, !tbaa !14
  %311 = getelementptr inbounds %struct.State, ptr %22, i32 0, i32 1
  %312 = load i32, ptr %6, align 4, !tbaa !5
  %313 = load i32, ptr %8, align 4, !tbaa !5
  %314 = load i32, ptr %7, align 4, !tbaa !5
  %315 = sub nsw i32 %313, %314
  %316 = add nsw i32 %315, 1
  %317 = sub nsw i32 %312, %316
  store i32 %317, ptr %311, align 4, !tbaa !16
  %318 = getelementptr inbounds %struct.State, ptr %22, i32 0, i32 2
  %319 = load i32, ptr %18, align 4, !tbaa !5
  store i32 %319, ptr %318, align 4, !tbaa !17
  %320 = getelementptr inbounds %struct.State, ptr %22, i32 0, i32 3
  %321 = load i32, ptr %19, align 4, !tbaa !5
  store i32 %321, ptr %320, align 4, !tbaa !18
  %322 = getelementptr inbounds %struct.State, ptr %22, i32 0, i32 4
  store i32 1, ptr %322, align 4, !tbaa !19
  %323 = getelementptr inbounds %struct.State, ptr %22, i32 0, i32 5
  %324 = load i32, ptr %20, align 4, !tbaa !5
  store i32 %324, ptr %323, align 4, !tbaa !20
  %325 = load ptr, ptr %17, align 8, !tbaa !12
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %325, ptr align 4 %22, i64 24, i1 false), !tbaa.struct !21
  call void @llvm.lifetime.end.p0(i64 24, ptr %22) #4
  br label %326

326:                                              ; preds = %305, %277
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #4
  br label %327

327:                                              ; preds = %326
  %328 = load i32, ptr %20, align 4, !tbaa !5
  %329 = add nsw i32 %328, 1
  store i32 %329, ptr %20, align 4, !tbaa !5
  br label %273, !llvm.loop !25

330:                                              ; preds = %276
  br label %331

331:                                              ; preds = %330
  %332 = load i32, ptr %19, align 4, !tbaa !5
  %333 = add nsw i32 %332, 1
  store i32 %333, ptr %19, align 4, !tbaa !5
  br label %267, !llvm.loop !26

334:                                              ; preds = %271
  br label %335

335:                                              ; preds = %334
  %336 = load i32, ptr %18, align 4, !tbaa !5
  %337 = add nsw i32 %336, 1
  store i32 %337, ptr %18, align 4, !tbaa !5
  br label %260, !llvm.loop !27

338:                                              ; preds = %264
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #4
  %339 = load i32, ptr %7, align 4, !tbaa !5
  store i32 %339, ptr %23, align 4, !tbaa !5
  br label %340

340:                                              ; preds = %356, %338
  %341 = load i32, ptr %23, align 4, !tbaa !5
  %342 = load i32, ptr %8, align 4, !tbaa !5
  %343 = icmp sle i32 %341, %342
  br i1 %343, label %345, label %344

344:                                              ; preds = %340
  store i32 38, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #4
  br label %359

345:                                              ; preds = %340
  %346 = load i32, ptr %5, align 4, !tbaa !5
  %347 = sext i32 %346 to i64
  %348 = getelementptr inbounds [16 x [16 x i32]], ptr @w, i64 0, i64 %347
  %349 = load i32, ptr %23, align 4, !tbaa !5
  %350 = sext i32 %349 to i64
  %351 = getelementptr inbounds [16 x i32], ptr %348, i64 0, i64 %350
  %352 = load i32, ptr %351, align 4, !tbaa !5
  %353 = load ptr, ptr %16, align 8, !tbaa !12
  %354 = load i32, ptr %353, align 4, !tbaa !5
  %355 = add nsw i32 %354, %352
  store i32 %355, ptr %353, align 4, !tbaa !5
  br label %356

356:                                              ; preds = %345
  %357 = load i32, ptr %23, align 4, !tbaa !5
  %358 = add nsw i32 %357, 1
  store i32 %358, ptr %23, align 4, !tbaa !5
  br label %340, !llvm.loop !28

359:                                              ; preds = %344
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #4
  %360 = load i32, ptr %5, align 4, !tbaa !5
  %361 = sext i32 %360 to i64
  %362 = getelementptr inbounds [16 x [256 x [16 x [16 x [2 x [2 x i32]]]]]], ptr @f, i64 0, i64 %361
  %363 = load i32, ptr %6, align 4, !tbaa !5
  %364 = sext i32 %363 to i64
  %365 = getelementptr inbounds [256 x [16 x [16 x [2 x [2 x i32]]]]], ptr %362, i64 0, i64 %364
  %366 = load i32, ptr %7, align 4, !tbaa !5
  %367 = sext i32 %366 to i64
  %368 = getelementptr inbounds [16 x [16 x [2 x [2 x i32]]]], ptr %365, i64 0, i64 %367
  %369 = load i32, ptr %8, align 4, !tbaa !5
  %370 = sext i32 %369 to i64
  %371 = getelementptr inbounds [16 x [2 x [2 x i32]]], ptr %368, i64 0, i64 %370
  %372 = getelementptr inbounds [2 x [2 x i32]], ptr %371, i64 0, i64 0
  %373 = getelementptr inbounds [2 x i32], ptr %372, i64 0, i64 0
  store ptr %373, ptr %24, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #4
  %374 = load i32, ptr %5, align 4, !tbaa !5
  %375 = sext i32 %374 to i64
  %376 = getelementptr inbounds [16 x [256 x [16 x [16 x [2 x [2 x %struct.State]]]]]], ptr @g, i64 0, i64 %375
  %377 = load i32, ptr %6, align 4, !tbaa !5
  %378 = sext i32 %377 to i64
  %379 = getelementptr inbounds [256 x [16 x [16 x [2 x [2 x %struct.State]]]]], ptr %376, i64 0, i64 %378
  %380 = load i32, ptr %7, align 4, !tbaa !5
  %381 = sext i32 %380 to i64
  %382 = getelementptr inbounds [16 x [16 x [2 x [2 x %struct.State]]]], ptr %379, i64 0, i64 %381
  %383 = load i32, ptr %8, align 4, !tbaa !5
  %384 = sext i32 %383 to i64
  %385 = getelementptr inbounds [16 x [2 x [2 x %struct.State]]], ptr %382, i64 0, i64 %384
  %386 = getelementptr inbounds [2 x [2 x %struct.State]], ptr %385, i64 0, i64 0
  %387 = getelementptr inbounds [2 x %struct.State], ptr %386, i64 0, i64 0
  store ptr %387, ptr %25, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #4
  store i32 1, ptr %26, align 4, !tbaa !5
  br label %388

388:                                              ; preds = %463, %359
  %389 = load i32, ptr %26, align 4, !tbaa !5
  %390 = load i32, ptr %7, align 4, !tbaa !5
  %391 = icmp sle i32 %389, %390
  br i1 %391, label %393, label %392

392:                                              ; preds = %388
  store i32 41, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #4
  br label %466

393:                                              ; preds = %388
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #4
  %394 = load i32, ptr %7, align 4, !tbaa !5
  store i32 %394, ptr %27, align 4, !tbaa !5
  br label %395

395:                                              ; preds = %459, %393
  %396 = load i32, ptr %27, align 4, !tbaa !5
  %397 = load i32, ptr %8, align 4, !tbaa !5
  %398 = icmp sle i32 %396, %397
  br i1 %398, label %400, label %399

399:                                              ; preds = %395
  store i32 44, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #4
  br label %462

400:                                              ; preds = %395
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #4
  store i32 0, ptr %28, align 4, !tbaa !5
  br label %401

401:                                              ; preds = %455, %400
  %402 = load i32, ptr %28, align 4, !tbaa !5
  %403 = icmp sle i32 %402, 1
  br i1 %403, label %405, label %404

404:                                              ; preds = %401
  store i32 47, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #4
  br label %458

405:                                              ; preds = %401
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #4
  %406 = load i32, ptr %5, align 4, !tbaa !5
  %407 = sub nsw i32 %406, 1
  %408 = sext i32 %407 to i64
  %409 = getelementptr inbounds [16 x [256 x [16 x [16 x [2 x [2 x i32]]]]]], ptr @f, i64 0, i64 %408
  %410 = load i32, ptr %6, align 4, !tbaa !5
  %411 = load i32, ptr %8, align 4, !tbaa !5
  %412 = load i32, ptr %7, align 4, !tbaa !5
  %413 = sub nsw i32 %411, %412
  %414 = add nsw i32 %413, 1
  %415 = sub nsw i32 %410, %414
  %416 = sext i32 %415 to i64
  %417 = getelementptr inbounds [256 x [16 x [16 x [2 x [2 x i32]]]]], ptr %409, i64 0, i64 %416
  %418 = load i32, ptr %26, align 4, !tbaa !5
  %419 = sext i32 %418 to i64
  %420 = getelementptr inbounds [16 x [16 x [2 x [2 x i32]]]], ptr %417, i64 0, i64 %419
  %421 = load i32, ptr %27, align 4, !tbaa !5
  %422 = sext i32 %421 to i64
  %423 = getelementptr inbounds [16 x [2 x [2 x i32]]], ptr %420, i64 0, i64 %422
  %424 = load i32, ptr %28, align 4, !tbaa !5
  %425 = sext i32 %424 to i64
  %426 = getelementptr inbounds [2 x [2 x i32]], ptr %423, i64 0, i64 %425
  %427 = getelementptr inbounds [2 x i32], ptr %426, i64 0, i64 0
  %428 = load i32, ptr %427, align 8, !tbaa !5
  store i32 %428, ptr %29, align 4, !tbaa !5
  %429 = load ptr, ptr %24, align 8, !tbaa !12
  %430 = load i32, ptr %429, align 4, !tbaa !5
  %431 = load i32, ptr %29, align 4, !tbaa !5
  %432 = icmp slt i32 %430, %431
  br i1 %432, label %433, label %454

433:                                              ; preds = %405
  %434 = load i32, ptr %29, align 4, !tbaa !5
  %435 = load ptr, ptr %24, align 8, !tbaa !12
  store i32 %434, ptr %435, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %30) #4
  %436 = getelementptr inbounds %struct.State, ptr %30, i32 0, i32 0
  %437 = load i32, ptr %5, align 4, !tbaa !5
  %438 = sub nsw i32 %437, 1
  store i32 %438, ptr %436, align 4, !tbaa !14
  %439 = getelementptr inbounds %struct.State, ptr %30, i32 0, i32 1
  %440 = load i32, ptr %6, align 4, !tbaa !5
  %441 = load i32, ptr %8, align 4, !tbaa !5
  %442 = load i32, ptr %7, align 4, !tbaa !5
  %443 = sub nsw i32 %441, %442
  %444 = add nsw i32 %443, 1
  %445 = sub nsw i32 %440, %444
  store i32 %445, ptr %439, align 4, !tbaa !16
  %446 = getelementptr inbounds %struct.State, ptr %30, i32 0, i32 2
  %447 = load i32, ptr %26, align 4, !tbaa !5
  store i32 %447, ptr %446, align 4, !tbaa !17
  %448 = getelementptr inbounds %struct.State, ptr %30, i32 0, i32 3
  %449 = load i32, ptr %27, align 4, !tbaa !5
  store i32 %449, ptr %448, align 4, !tbaa !18
  %450 = getelementptr inbounds %struct.State, ptr %30, i32 0, i32 4
  %451 = load i32, ptr %28, align 4, !tbaa !5
  store i32 %451, ptr %450, align 4, !tbaa !19
  %452 = getelementptr inbounds %struct.State, ptr %30, i32 0, i32 5
  store i32 0, ptr %452, align 4, !tbaa !20
  %453 = load ptr, ptr %25, align 8, !tbaa !12
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %453, ptr align 4 %30, i64 24, i1 false), !tbaa.struct !21
  call void @llvm.lifetime.end.p0(i64 24, ptr %30) #4
  br label %454

454:                                              ; preds = %433, %405
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #4
  br label %455

455:                                              ; preds = %454
  %456 = load i32, ptr %28, align 4, !tbaa !5
  %457 = add nsw i32 %456, 1
  store i32 %457, ptr %28, align 4, !tbaa !5
  br label %401, !llvm.loop !29

458:                                              ; preds = %404
  br label %459

459:                                              ; preds = %458
  %460 = load i32, ptr %27, align 4, !tbaa !5
  %461 = add nsw i32 %460, 1
  store i32 %461, ptr %27, align 4, !tbaa !5
  br label %395, !llvm.loop !30

462:                                              ; preds = %399
  br label %463

463:                                              ; preds = %462
  %464 = load i32, ptr %26, align 4, !tbaa !5
  %465 = add nsw i32 %464, 1
  store i32 %465, ptr %26, align 4, !tbaa !5
  br label %388, !llvm.loop !31

466:                                              ; preds = %392
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #4
  %467 = load i32, ptr %7, align 4, !tbaa !5
  store i32 %467, ptr %31, align 4, !tbaa !5
  br label %468

468:                                              ; preds = %484, %466
  %469 = load i32, ptr %31, align 4, !tbaa !5
  %470 = load i32, ptr %8, align 4, !tbaa !5
  %471 = icmp sle i32 %469, %470
  br i1 %471, label %473, label %472

472:                                              ; preds = %468
  store i32 50, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #4
  br label %487

473:                                              ; preds = %468
  %474 = load i32, ptr %5, align 4, !tbaa !5
  %475 = sext i32 %474 to i64
  %476 = getelementptr inbounds [16 x [16 x i32]], ptr @w, i64 0, i64 %475
  %477 = load i32, ptr %31, align 4, !tbaa !5
  %478 = sext i32 %477 to i64
  %479 = getelementptr inbounds [16 x i32], ptr %476, i64 0, i64 %478
  %480 = load i32, ptr %479, align 4, !tbaa !5
  %481 = load ptr, ptr %24, align 8, !tbaa !12
  %482 = load i32, ptr %481, align 4, !tbaa !5
  %483 = add nsw i32 %482, %480
  store i32 %483, ptr %481, align 4, !tbaa !5
  br label %484

484:                                              ; preds = %473
  %485 = load i32, ptr %31, align 4, !tbaa !5
  %486 = add nsw i32 %485, 1
  store i32 %486, ptr %31, align 4, !tbaa !5
  br label %468, !llvm.loop !32

487:                                              ; preds = %472
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #4
  %488 = load i32, ptr %5, align 4, !tbaa !5
  %489 = sext i32 %488 to i64
  %490 = getelementptr inbounds [16 x [256 x [16 x [16 x [2 x [2 x i32]]]]]], ptr @f, i64 0, i64 %489
  %491 = load i32, ptr %6, align 4, !tbaa !5
  %492 = sext i32 %491 to i64
  %493 = getelementptr inbounds [256 x [16 x [16 x [2 x [2 x i32]]]]], ptr %490, i64 0, i64 %492
  %494 = load i32, ptr %7, align 4, !tbaa !5
  %495 = sext i32 %494 to i64
  %496 = getelementptr inbounds [16 x [16 x [2 x [2 x i32]]]], ptr %493, i64 0, i64 %495
  %497 = load i32, ptr %8, align 4, !tbaa !5
  %498 = sext i32 %497 to i64
  %499 = getelementptr inbounds [16 x [2 x [2 x i32]]], ptr %496, i64 0, i64 %498
  %500 = getelementptr inbounds [2 x [2 x i32]], ptr %499, i64 0, i64 0
  %501 = getelementptr inbounds [2 x i32], ptr %500, i64 0, i64 1
  store ptr %501, ptr %32, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #4
  %502 = load i32, ptr %5, align 4, !tbaa !5
  %503 = sext i32 %502 to i64
  %504 = getelementptr inbounds [16 x [256 x [16 x [16 x [2 x [2 x %struct.State]]]]]], ptr @g, i64 0, i64 %503
  %505 = load i32, ptr %6, align 4, !tbaa !5
  %506 = sext i32 %505 to i64
  %507 = getelementptr inbounds [256 x [16 x [16 x [2 x [2 x %struct.State]]]]], ptr %504, i64 0, i64 %506
  %508 = load i32, ptr %7, align 4, !tbaa !5
  %509 = sext i32 %508 to i64
  %510 = getelementptr inbounds [16 x [16 x [2 x [2 x %struct.State]]]], ptr %507, i64 0, i64 %509
  %511 = load i32, ptr %8, align 4, !tbaa !5
  %512 = sext i32 %511 to i64
  %513 = getelementptr inbounds [16 x [2 x [2 x %struct.State]]], ptr %510, i64 0, i64 %512
  %514 = getelementptr inbounds [2 x [2 x %struct.State]], ptr %513, i64 0, i64 0
  %515 = getelementptr inbounds [2 x %struct.State], ptr %514, i64 0, i64 1
  store ptr %515, ptr %33, align 8, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #4
  store i32 1, ptr %34, align 4, !tbaa !5
  br label %516

516:                                              ; preds = %603, %487
  %517 = load i32, ptr %34, align 4, !tbaa !5
  %518 = load i32, ptr %7, align 4, !tbaa !5
  %519 = icmp sle i32 %517, %518
  br i1 %519, label %521, label %520

520:                                              ; preds = %516
  store i32 53, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #4
  br label %606

521:                                              ; preds = %516
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #4
  %522 = load i32, ptr %8, align 4, !tbaa !5
  store i32 %522, ptr %35, align 4, !tbaa !5
  br label %523

523:                                              ; preds = %599, %521
  %524 = load i32, ptr %35, align 4, !tbaa !5
  %525 = load i32, ptr @m, align 4, !tbaa !5
  %526 = icmp sle i32 %524, %525
  br i1 %526, label %528, label %527

527:                                              ; preds = %523
  store i32 56, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #4
  br label %602

528:                                              ; preds = %523
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #4
  store i32 0, ptr %36, align 4, !tbaa !5
  br label %529

529:                                              ; preds = %595, %528
  %530 = load i32, ptr %36, align 4, !tbaa !5
  %531 = icmp sle i32 %530, 1
  br i1 %531, label %533, label %532

532:                                              ; preds = %529
  store i32 59, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #4
  br label %598

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

534:                                              ; preds = %591, %533
  %535 = load i32, ptr %37, align 4, !tbaa !5
  %536 = icmp sle i32 %535, 1
  br i1 %536, label %538, label %537

537:                                              ; preds = %534
  store i32 62, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #4
  br label %594

538:                                              ; preds = %534
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #4
  %539 = load i32, ptr %5, align 4, !tbaa !5
  %540 = sub nsw i32 %539, 1
  %541 = sext i32 %540 to i64
  %542 = getelementptr inbounds [16 x [256 x [16 x [16 x [2 x [2 x i32]]]]]], ptr @f, i64 0, i64 %541
  %543 = load i32, ptr %6, align 4, !tbaa !5
  %544 = load i32, ptr %8, align 4, !tbaa !5
  %545 = load i32, ptr %7, align 4, !tbaa !5
  %546 = sub nsw i32 %544, %545
  %547 = add nsw i32 %546, 1
  %548 = sub nsw i32 %543, %547
  %549 = sext i32 %548 to i64
  %550 = getelementptr inbounds [256 x [16 x [16 x [2 x [2 x i32]]]]], ptr %542, i64 0, i64 %549
  %551 = load i32, ptr %34, align 4, !tbaa !5
  %552 = sext i32 %551 to i64
  %553 = getelementptr inbounds [16 x [16 x [2 x [2 x i32]]]], ptr %550, i64 0, i64 %552
  %554 = load i32, ptr %35, align 4, !tbaa !5
  %555 = sext i32 %554 to i64
  %556 = getelementptr inbounds [16 x [2 x [2 x i32]]], ptr %553, i64 0, i64 %555
  %557 = load i32, ptr %36, align 4, !tbaa !5
  %558 = sext i32 %557 to i64
  %559 = getelementptr inbounds [2 x [2 x i32]], ptr %556, i64 0, i64 %558
  %560 = load i32, ptr %37, align 4, !tbaa !5
  %561 = sext i32 %560 to i64
  %562 = getelementptr inbounds [2 x i32], ptr %559, i64 0, i64 %561
  %563 = load i32, ptr %562, align 4, !tbaa !5
  store i32 %563, ptr %38, align 4, !tbaa !5
  %564 = load ptr, ptr %32, align 8, !tbaa !12
  %565 = load i32, ptr %564, align 4, !tbaa !5
  %566 = load i32, ptr %38, align 4, !tbaa !5
  %567 = icmp slt i32 %565, %566
  br i1 %567, label %568, label %590

568:                                              ; preds = %538
  %569 = load i32, ptr %38, align 4, !tbaa !5
  %570 = load ptr, ptr %32, align 8, !tbaa !12
  store i32 %569, ptr %570, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %39) #4
  %571 = getelementptr inbounds %struct.State, ptr %39, i32 0, i32 0
  %572 = load i32, ptr %5, align 4, !tbaa !5
  %573 = sub nsw i32 %572, 1
  store i32 %573, ptr %571, align 4, !tbaa !14
  %574 = getelementptr inbounds %struct.State, ptr %39, i32 0, i32 1
  %575 = load i32, ptr %6, align 4, !tbaa !5
  %576 = load i32, ptr %8, align 4, !tbaa !5
  %577 = load i32, ptr %7, align 4, !tbaa !5
  %578 = sub nsw i32 %576, %577
  %579 = add nsw i32 %578, 1
  %580 = sub nsw i32 %575, %579
  store i32 %580, ptr %574, align 4, !tbaa !16
  %581 = getelementptr inbounds %struct.State, ptr %39, i32 0, i32 2
  %582 = load i32, ptr %34, align 4, !tbaa !5
  store i32 %582, ptr %581, align 4, !tbaa !17
  %583 = getelementptr inbounds %struct.State, ptr %39, i32 0, i32 3
  %584 = load i32, ptr %35, align 4, !tbaa !5
  store i32 %584, ptr %583, align 4, !tbaa !18
  %585 = getelementptr inbounds %struct.State, ptr %39, i32 0, i32 4
  %586 = load i32, ptr %36, align 4, !tbaa !5
  store i32 %586, ptr %585, align 4, !tbaa !19
  %587 = getelementptr inbounds %struct.State, ptr %39, i32 0, i32 5
  %588 = load i32, ptr %37, align 4, !tbaa !5
  store i32 %588, ptr %587, align 4, !tbaa !20
  %589 = load ptr, ptr %33, align 8, !tbaa !12
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %589, ptr align 4 %39, i64 24, i1 false), !tbaa.struct !21
  call void @llvm.lifetime.end.p0(i64 24, ptr %39) #4
  br label %590

590:                                              ; preds = %568, %538
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #4
  br label %591

591:                                              ; preds = %590
  %592 = load i32, ptr %37, align 4, !tbaa !5
  %593 = add nsw i32 %592, 1
  store i32 %593, ptr %37, align 4, !tbaa !5
  br label %534, !llvm.loop !33

594:                                              ; preds = %537
  br label %595

595:                                              ; preds = %594
  %596 = load i32, ptr %36, align 4, !tbaa !5
  %597 = add nsw i32 %596, 1
  store i32 %597, ptr %36, align 4, !tbaa !5
  br label %529, !llvm.loop !34

598:                                              ; preds = %532
  br label %599

599:                                              ; preds = %598
  %600 = load i32, ptr %35, align 4, !tbaa !5
  %601 = add nsw i32 %600, 1
  store i32 %601, ptr %35, align 4, !tbaa !5
  br label %523, !llvm.loop !35

602:                                              ; preds = %527
  br label %603

603:                                              ; preds = %602
  %604 = load i32, ptr %34, align 4, !tbaa !5
  %605 = add nsw i32 %604, 1
  store i32 %605, ptr %34, align 4, !tbaa !5
  br label %516, !llvm.loop !36

606:                                              ; preds = %520
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #4
  %607 = load i32, ptr %7, align 4, !tbaa !5
  store i32 %607, ptr %40, align 4, !tbaa !5
  br label %608

608:                                              ; preds = %624, %606
  %609 = load i32, ptr %40, align 4, !tbaa !5
  %610 = load i32, ptr %8, align 4, !tbaa !5
  %611 = icmp sle i32 %609, %610
  br i1 %611, label %613, label %612

612:                                              ; preds = %608
  store i32 65, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #4
  br label %627

613:                                              ; preds = %608
  %614 = load i32, ptr %5, align 4, !tbaa !5
  %615 = sext i32 %614 to i64
  %616 = getelementptr inbounds [16 x [16 x i32]], ptr @w, i64 0, i64 %615
  %617 = load i32, ptr %40, align 4, !tbaa !5
  %618 = sext i32 %617 to i64
  %619 = getelementptr inbounds [16 x i32], ptr %616, i64 0, i64 %618
  %620 = load i32, ptr %619, align 4, !tbaa !5
  %621 = load ptr, ptr %32, align 8, !tbaa !12
  %622 = load i32, ptr %621, align 4, !tbaa !5
  %623 = add nsw i32 %622, %620
  store i32 %623, ptr %621, align 4, !tbaa !5
  br label %624

624:                                              ; preds = %613
  %625 = load i32, ptr %40, align 4, !tbaa !5
  %626 = add nsw i32 %625, 1
  store i32 %626, ptr %40, align 4, !tbaa !5
  br label %608, !llvm.loop !37

627:                                              ; preds = %612
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #4
  br label %628

628:                                              ; preds = %627, %112
  %629 = load i32, ptr %8, align 4, !tbaa !5
  %630 = add nsw i32 %629, 1
  store i32 %630, ptr %8, align 4, !tbaa !5
  br label %100, !llvm.loop !38

631:                                              ; preds = %104
  br label %632

632:                                              ; preds = %631
  %633 = load i32, ptr %7, align 4, !tbaa !5
  %634 = add nsw i32 %633, 1
  store i32 %634, ptr %7, align 4, !tbaa !5
  br label %93, !llvm.loop !39

635:                                              ; preds = %97
  br label %636

636:                                              ; preds = %635
  %637 = load i32, ptr %6, align 4, !tbaa !5
  %638 = add nsw i32 %637, 1
  store i32 %638, ptr %6, align 4, !tbaa !5
  br label %87, !llvm.loop !40

639:                                              ; preds = %91
  br label %640

640:                                              ; preds = %639
  %641 = load i32, ptr %5, align 4, !tbaa !5
  %642 = add nsw i32 %641, 1
  store i32 %642, ptr %5, align 4, !tbaa !5
  br label %81, !llvm.loop !41

643:                                              ; preds = %85
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #4
  store i32 0, ptr %41, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %42) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #4
  store i32 1, ptr %43, align 4, !tbaa !5
  br label %644

644:                                              ; preds = %725, %643
  %645 = load i32, ptr %43, align 4, !tbaa !5
  %646 = load i32, ptr @n, align 4, !tbaa !5
  %647 = icmp sle i32 %645, %646
  br i1 %647, label %649, label %648

648:                                              ; preds = %644
  store i32 68, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #4
  br label %728

649:                                              ; preds = %644
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #4
  store i32 1, ptr %44, align 4, !tbaa !5
  br label %650

650:                                              ; preds = %721, %649
  %651 = load i32, ptr %44, align 4, !tbaa !5
  %652 = load i32, ptr @m, align 4, !tbaa !5
  %653 = icmp sle i32 %651, %652
  br i1 %653, label %655, label %654

654:                                              ; preds = %650
  store i32 71, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #4
  br label %724

655:                                              ; preds = %650
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #4
  store i32 1, ptr %45, align 4, !tbaa !5
  br label %656

656:                                              ; preds = %717, %655
  %657 = load i32, ptr %45, align 4, !tbaa !5
  %658 = load i32, ptr @m, align 4, !tbaa !5
  %659 = icmp sle i32 %657, %658
  br i1 %659, label %661, label %660

660:                                              ; preds = %656
  store i32 74, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #4
  br label %720

661:                                              ; preds = %656
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #4
  store i32 0, ptr %46, align 4, !tbaa !5
  br label %662

662:                                              ; preds = %713, %661
  %663 = load i32, ptr %46, align 4, !tbaa !5
  %664 = icmp sle i32 %663, 1
  br i1 %664, label %666, label %665

665:                                              ; preds = %662
  store i32 77, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #4
  br label %716

666:                                              ; preds = %662
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #4
  store i32 0, ptr %47, align 4, !tbaa !5
  br label %667

667:                                              ; preds = %709, %666
  %668 = load i32, ptr %47, align 4, !tbaa !5
  %669 = icmp sle i32 %668, 1
  br i1 %669, label %671, label %670

670:                                              ; preds = %667
  store i32 80, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #4
  br label %712

671:                                              ; preds = %667
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #4
  %672 = load i32, ptr %43, align 4, !tbaa !5
  %673 = sext i32 %672 to i64
  %674 = getelementptr inbounds [16 x [256 x [16 x [16 x [2 x [2 x i32]]]]]], ptr @f, i64 0, i64 %673
  %675 = load i32, ptr @k, align 4, !tbaa !5
  %676 = sext i32 %675 to i64
  %677 = getelementptr inbounds [256 x [16 x [16 x [2 x [2 x i32]]]]], ptr %674, i64 0, i64 %676
  %678 = load i32, ptr %44, align 4, !tbaa !5
  %679 = sext i32 %678 to i64
  %680 = getelementptr inbounds [16 x [16 x [2 x [2 x i32]]]], ptr %677, i64 0, i64 %679
  %681 = load i32, ptr %45, align 4, !tbaa !5
  %682 = sext i32 %681 to i64
  %683 = getelementptr inbounds [16 x [2 x [2 x i32]]], ptr %680, i64 0, i64 %682
  %684 = load i32, ptr %46, align 4, !tbaa !5
  %685 = sext i32 %684 to i64
  %686 = getelementptr inbounds [2 x [2 x i32]], ptr %683, i64 0, i64 %685
  %687 = load i32, ptr %47, align 4, !tbaa !5
  %688 = sext i32 %687 to i64
  %689 = getelementptr inbounds [2 x i32], ptr %686, i64 0, i64 %688
  %690 = load i32, ptr %689, align 4, !tbaa !5
  store i32 %690, ptr %48, align 4, !tbaa !5
  %691 = load i32, ptr %41, align 4, !tbaa !5
  %692 = load i32, ptr %48, align 4, !tbaa !5
  %693 = icmp slt i32 %691, %692
  br i1 %693, label %694, label %708

694:                                              ; preds = %671
  %695 = load i32, ptr %48, align 4, !tbaa !5
  store i32 %695, ptr %41, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %49) #4
  %696 = getelementptr inbounds %struct.State, ptr %49, i32 0, i32 0
  %697 = load i32, ptr %43, align 4, !tbaa !5
  store i32 %697, ptr %696, align 4, !tbaa !14
  %698 = getelementptr inbounds %struct.State, ptr %49, i32 0, i32 1
  %699 = load i32, ptr @k, align 4, !tbaa !5
  store i32 %699, ptr %698, align 4, !tbaa !16
  %700 = getelementptr inbounds %struct.State, ptr %49, i32 0, i32 2
  %701 = load i32, ptr %44, align 4, !tbaa !5
  store i32 %701, ptr %700, align 4, !tbaa !17
  %702 = getelementptr inbounds %struct.State, ptr %49, i32 0, i32 3
  %703 = load i32, ptr %45, align 4, !tbaa !5
  store i32 %703, ptr %702, align 4, !tbaa !18
  %704 = getelementptr inbounds %struct.State, ptr %49, i32 0, i32 4
  %705 = load i32, ptr %46, align 4, !tbaa !5
  store i32 %705, ptr %704, align 4, !tbaa !19
  %706 = getelementptr inbounds %struct.State, ptr %49, i32 0, i32 5
  %707 = load i32, ptr %47, align 4, !tbaa !5
  store i32 %707, ptr %706, align 4, !tbaa !20
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %42, ptr align 4 %49, i64 24, i1 false), !tbaa.struct !21
  call void @llvm.lifetime.end.p0(i64 24, ptr %49) #4
  br label %708

708:                                              ; preds = %694, %671
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #4
  br label %709

709:                                              ; preds = %708
  %710 = load i32, ptr %47, align 4, !tbaa !5
  %711 = add nsw i32 %710, 1
  store i32 %711, ptr %47, align 4, !tbaa !5
  br label %667, !llvm.loop !42

712:                                              ; preds = %670
  br label %713

713:                                              ; preds = %712
  %714 = load i32, ptr %46, align 4, !tbaa !5
  %715 = add nsw i32 %714, 1
  store i32 %715, ptr %46, align 4, !tbaa !5
  br label %662, !llvm.loop !43

716:                                              ; preds = %665
  br label %717

717:                                              ; preds = %716
  %718 = load i32, ptr %45, align 4, !tbaa !5
  %719 = add nsw i32 %718, 1
  store i32 %719, ptr %45, align 4, !tbaa !5
  br label %656, !llvm.loop !44

720:                                              ; preds = %660
  br label %721

721:                                              ; preds = %720
  %722 = load i32, ptr %44, align 4, !tbaa !5
  %723 = add nsw i32 %722, 1
  store i32 %723, ptr %44, align 4, !tbaa !5
  br label %650, !llvm.loop !45

724:                                              ; preds = %654
  br label %725

725:                                              ; preds = %724
  %726 = load i32, ptr %43, align 4, !tbaa !5
  %727 = add nsw i32 %726, 1
  store i32 %727, ptr %43, align 4, !tbaa !5
  br label %644, !llvm.loop !46

728:                                              ; preds = %648
  %729 = load i32, ptr %41, align 4, !tbaa !5
  %730 = call i32 (ptr, ...) @printf(ptr noundef @.str, i32 noundef %729)
  br label %731

731:                                              ; preds = %752, %728
  %732 = getelementptr inbounds %struct.State, ptr %42, i32 0, i32 1
  %733 = load i32, ptr %732, align 4, !tbaa !16
  %734 = icmp ne i32 %733, 0
  br i1 %734, label %735, label %777

735:                                              ; preds = %731
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #4
  %736 = getelementptr inbounds %struct.State, ptr %42, i32 0, i32 2
  %737 = load i32, ptr %736, align 4, !tbaa !17
  store i32 %737, ptr %50, align 4, !tbaa !5
  br label %738

738:                                              ; preds = %749, %735
  %739 = load i32, ptr %50, align 4, !tbaa !5
  %740 = getelementptr inbounds %struct.State, ptr %42, i32 0, i32 3
  %741 = load i32, ptr %740, align 4, !tbaa !18
  %742 = icmp sle i32 %739, %741
  br i1 %742, label %744, label %743

743:                                              ; preds = %738
  store i32 85, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #4
  br label %752

744:                                              ; preds = %738
  %745 = getelementptr inbounds %struct.State, ptr %42, i32 0, i32 0
  %746 = load i32, ptr %745, align 4, !tbaa !14
  %747 = load i32, ptr %50, align 4, !tbaa !5
  %748 = call i32 (ptr, ...) @printf(ptr noundef @.str.1, i32 noundef %746, i32 noundef %747)
  br label %749

749:                                              ; preds = %744
  %750 = load i32, ptr %50, align 4, !tbaa !5
  %751 = add nsw i32 %750, 1
  store i32 %751, ptr %50, align 4, !tbaa !5
  br label %738, !llvm.loop !47

752:                                              ; preds = %743
  %753 = getelementptr inbounds %struct.State, ptr %42, i32 0, i32 0
  %754 = load i32, ptr %753, align 4, !tbaa !14
  %755 = sext i32 %754 to i64
  %756 = getelementptr inbounds [16 x [256 x [16 x [16 x [2 x [2 x %struct.State]]]]]], ptr @g, i64 0, i64 %755
  %757 = getelementptr inbounds %struct.State, ptr %42, i32 0, i32 1
  %758 = load i32, ptr %757, align 4, !tbaa !16
  %759 = sext i32 %758 to i64
  %760 = getelementptr inbounds [256 x [16 x [16 x [2 x [2 x %struct.State]]]]], ptr %756, i64 0, i64 %759
  %761 = getelementptr inbounds %struct.State, ptr %42, i32 0, i32 2
  %762 = load i32, ptr %761, align 4, !tbaa !17
  %763 = sext i32 %762 to i64
  %764 = getelementptr inbounds [16 x [16 x [2 x [2 x %struct.State]]]], ptr %760, i64 0, i64 %763
  %765 = getelementptr inbounds %struct.State, ptr %42, i32 0, i32 3
  %766 = load i32, ptr %765, align 4, !tbaa !18
  %767 = sext i32 %766 to i64
  %768 = getelementptr inbounds [16 x [2 x [2 x %struct.State]]], ptr %764, i64 0, i64 %767
  %769 = getelementptr inbounds %struct.State, ptr %42, i32 0, i32 4
  %770 = load i32, ptr %769, align 4, !tbaa !19
  %771 = sext i32 %770 to i64
  %772 = getelementptr inbounds [2 x [2 x %struct.State]], ptr %768, i64 0, i64 %771
  %773 = getelementptr inbounds %struct.State, ptr %42, i32 0, i32 5
  %774 = load i32, ptr %773, align 4, !tbaa !20
  %775 = sext i32 %774 to i64
  %776 = getelementptr inbounds [2 x %struct.State], ptr %772, i64 0, i64 %775
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %42, ptr align 8 %776, i64 24, i1 false), !tbaa.struct !21
  br label %731, !llvm.loop !48

777:                                              ; preds = %731
  store i32 0, ptr %1, align 4
  store i32 1, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 24, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #4
  %778 = load i32, ptr %1, align 4
  ret i32 %778
}

declare noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERi(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(4)) #1

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

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

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

declare i32 @printf(ptr noundef, ...) #1

attributes #0 = { mustprogress norecurse 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 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { 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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = distinct !{!9, !10}
!10 = !{!"llvm.loop.mustprogress"}
!11 = distinct !{!11, !10}
!12 = !{!13, !13, i64 0}
!13 = !{!"any pointer", !7, i64 0}
!14 = !{!15, !6, i64 0}
!15 = !{!"_ZTS5State", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !6, i64 16, !6, i64 20}
!16 = !{!15, !6, i64 4}
!17 = !{!15, !6, i64 8}
!18 = !{!15, !6, i64 12}
!19 = !{!15, !6, i64 16}
!20 = !{!15, !6, i64 20}
!21 = !{i64 0, i64 4, !5, i64 4, i64 4, !5, i64 8, i64 4, !5, i64 12, i64 4, !5, i64 16, i64 4, !5, i64 20, i64 4, !5}
!22 = distinct !{!22, !10}
!23 = distinct !{!23, !10}
!24 = distinct !{!24, !10}
!25 = distinct !{!25, !10}
!26 = distinct !{!26, !10}
!27 = distinct !{!27, !10}
!28 = distinct !{!28, !10}
!29 = distinct !{!29, !10}
!30 = distinct !{!30, !10}
!31 = distinct !{!31, !10}
!32 = distinct !{!32, !10}
!33 = distinct !{!33, !10}
!34 = distinct !{!34, !10}
!35 = distinct !{!35, !10}
!36 = distinct !{!36, !10}
!37 = distinct !{!37, !10}
!38 = distinct !{!38, !10}
!39 = distinct !{!39, !10}
!40 = distinct !{!40, !10}
!41 = distinct !{!41, !10}
!42 = distinct !{!42, !10}
!43 = distinct !{!43, !10}
!44 = distinct !{!44, !10}
!45 = distinct !{!45, !10}
!46 = distinct !{!46, !10}
!47 = distinct !{!47, !10}
!48 = distinct !{!48, !10}


; 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.State = type { i32, i32, i32, i32, i32, i32 }
%"class.std::basic_istream" = type { ptr, i64, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::locale" = type { ptr }

@n = external dso_local global i32, align 4
@m = external dso_local global i32, align 4
@k = external dso_local global i32, align 4
@w = external dso_local global [16 x [16 x i32]], align 16
@f = external dso_local local_unnamed_addr global [16 x [256 x [16 x [16 x [2 x [2 x i32]]]]]], align 16
@g = external dso_local local_unnamed_addr global [16 x [256 x [16 x [16 x [2 x [2 x %struct.State]]]]]], align 16
@_ZSt3cin = external global %"class.std::basic_istream", align 8
@.str = external hidden unnamed_addr constant [10 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [7 x i8], align 1

; Function Attrs: mustprogress norecurse uwtable
define dso_local noundef i32 @main() local_unnamed_addr #0 {
  %1 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERi(ptr noundef nonnull align 8 dereferenceable(16) @_ZSt3cin, ptr noundef nonnull align 4 dereferenceable(4) @n)
  %2 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERi(ptr noundef nonnull align 8 dereferenceable(16) %1, ptr noundef nonnull align 4 dereferenceable(4) @m)
  %3 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERi(ptr noundef nonnull align 8 dereferenceable(16) %2, ptr noundef nonnull align 4 dereferenceable(4) @k)
  %4 = load i32, ptr @n, align 4, !tbaa !5
  %.not329 = icmp slt i32 %4, 1
  br i1 %.not329, label %._crit_edge492.thread, label %.preheader326.lr.ph

.preheader326.lr.ph:                              ; preds = %0
  %5 = load i32, ptr @m, align 4
  %6 = icmp slt i32 %5, 1
  br i1 %6, label %.preheader324.lr.ph, label %.preheader326

.preheader326:                                    ; preds = %.preheader326.lr.ph, %._crit_edge
  %7 = phi i32 [ %15, %._crit_edge ], [ %4, %.preheader326.lr.ph ]
  %8 = phi i32 [ %16, %._crit_edge ], [ %5, %.preheader326.lr.ph ]
  %indvars.iv532 = phi i64 [ %indvars.iv.next533, %._crit_edge ], [ 1, %.preheader326.lr.ph ]
  %.not303327 = icmp slt i32 %8, 1
  br i1 %.not303327, label %._crit_edge, label %.lr.ph

.preheader325:                                    ; preds = %._crit_edge
  %.not281421 = icmp slt i32 %15, 1
  br i1 %.not281421, label %._crit_edge492.thread, label %.preheader324.lr.phthread-pre-split

.preheader324.lr.phthread-pre-split:              ; preds = %.preheader325
  %.pr = load i32, ptr @m, align 4
  br label %.preheader324.lr.ph

.preheader324.lr.ph:                              ; preds = %.preheader326.lr.ph, %.preheader324.lr.phthread-pre-split
  %9 = phi i32 [ %.pr, %.preheader324.lr.phthread-pre-split ], [ %5, %.preheader326.lr.ph ]
  %.lcssa669 = phi i32 [ %15, %.preheader324.lr.phthread-pre-split ], [ %4, %.preheader326.lr.ph ]
  %10 = load i32, ptr @k, align 4, !tbaa !5
  %.not287418 = icmp slt i32 %10, 1
  %.not288415 = icmp slt i32 %9, 1
  %or.cond = select i1 %.not287418, i1 true, i1 %.not288415
  br i1 %or.cond, label %.preheader307.lr.ph, label %.preheader324.preheader

.preheader324.preheader:                          ; preds = %.preheader324.lr.ph
  %11 = zext nneg i32 %9 to i64
  %12 = add nuw i32 %9, 2
  %13 = add nuw i32 %10, 1
  %14 = add nuw i32 %.lcssa669, 1
  %wide.trip.count631 = zext i32 %14 to i64
  %wide.trip.count626 = zext i32 %13 to i64
  %wide.trip.count = zext i32 %12 to i64
  br label %.preheader324

._crit_edge.loopexit:                             ; preds = %.lr.ph
  %.pre = load i32, ptr @n, align 4, !tbaa !5
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %.preheader326
  %15 = phi i32 [ %.pre, %._crit_edge.loopexit ], [ %7, %.preheader326 ]
  %16 = phi i32 [ %20, %._crit_edge.loopexit ], [ %8, %.preheader326 ]
  %indvars.iv.next533 = add nuw nsw i64 %indvars.iv532, 1
  %17 = sext i32 %15 to i64
  %.not.not = icmp slt i64 %indvars.iv532, %17
  br i1 %.not.not, label %.preheader326, label %.preheader325, !llvm.loop !9

.lr.ph:                                           ; preds = %.preheader326, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ 1, %.preheader326 ]
  %18 = getelementptr inbounds [16 x [16 x i32]], ptr @w, i64 0, i64 %indvars.iv532, i64 %indvars.iv
  %19 = tail call noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERi(ptr noundef nonnull align 8 dereferenceable(16) @_ZSt3cin, ptr noundef nonnull align 4 dereferenceable(4) %18)
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %20 = load i32, ptr @m, align 4, !tbaa !5
  %21 = sext i32 %20 to i64
  %.not303.not = icmp slt i64 %indvars.iv, %21
  br i1 %.not303.not, label %.lr.ph, label %._crit_edge.loopexit, !llvm.loop !12

.preheader324:                                    ; preds = %.preheader324.preheader, %._crit_edge420.split
  %indvars.iv628 = phi i64 [ 1, %.preheader324.preheader ], [ %indvars.iv.next629, %._crit_edge420.split ]
  %22 = add nsw i64 %indvars.iv628, -1
  %23 = trunc nuw nsw i64 %22 to i32
  %24 = trunc nuw nsw i64 %22 to i32
  %25 = trunc nuw nsw i64 %22 to i32
  %26 = trunc nuw nsw i64 %22 to i32
  %27 = trunc nuw nsw i64 %22 to i32
  %28 = trunc nuw nsw i64 %22 to i32
  %29 = trunc nuw nsw i64 %22 to i32
  %30 = trunc nuw nsw i64 %22 to i32
  %31 = trunc nuw nsw i64 %22 to i32
  br label %.preheader323

.preheader307.lr.ph:                              ; preds = %._crit_edge420.split, %.preheader324.lr.ph
  %32 = load i32, ptr @m, align 4, !tbaa !5
  %.not285459 = icmp slt i32 %32, 1
  %33 = load i32, ptr @k, align 4
  %34 = sext i32 %33 to i64
  br i1 %.not285459, label %._crit_edge492.thread, label %.preheader307.preheader

.preheader307.preheader:                          ; preds = %.preheader307.lr.ph
  %35 = add nuw i32 %32, 1
  %36 = add nuw i32 %.lcssa669, 1
  %wide.trip.count659 = zext i32 %36 to i64
  %wide.trip.count654 = zext i32 %35 to i64
  br label %.preheader307

.preheader323:                                    ; preds = %.preheader324, %._crit_edge417
  %indvars.iv623 = phi i64 [ 1, %.preheader324 ], [ %indvars.iv.next624, %._crit_edge417 ]
  br label %.preheader322

._crit_edge420.split:                             ; preds = %._crit_edge417
  %indvars.iv.next629 = add nuw nsw i64 %indvars.iv628, 1
  %exitcond632.not = icmp eq i64 %indvars.iv.next629, %wide.trip.count631
  br i1 %exitcond632.not, label %.preheader307.lr.ph, label %.preheader324, !llvm.loop !13

.preheader322:                                    ; preds = %.preheader323, %37
  %indvars.iv610 = phi i64 [ 2, %.preheader323 ], [ %indvars.iv.next611, %37 ]
  %indvars.iv535 = phi i64 [ 1, %.preheader323 ], [ %indvars.iv.next536, %37 ]
  br label %38

._crit_edge417:                                   ; preds = %37
  %indvars.iv.next624 = add nuw nsw i64 %indvars.iv623, 1
  %exitcond627.not = icmp eq i64 %indvars.iv.next624, %wide.trip.count626
  br i1 %exitcond627.not, label %._crit_edge420.split, label %.preheader323, !llvm.loop !14

37:                                               ; preds = %.loopexit
  %indvars.iv.next536 = add nuw nsw i64 %indvars.iv535, 1
  %indvars.iv.next611 = add nuw nsw i64 %indvars.iv610, 1
  %exitcond622.not = icmp eq i64 %indvars.iv.next611, %wide.trip.count
  br i1 %exitcond622.not, label %._crit_edge417, label %.preheader322, !llvm.loop !15

38:                                               ; preds = %.preheader322, %.loopexit
  %indvar = phi i64 [ 0, %.preheader322 ], [ %indvar.next, %.loopexit ]
  %indvars.iv612 = phi i64 [ %indvars.iv610, %.preheader322 ], [ %indvars.iv.next613, %.loopexit ]
  %indvars.iv555 = phi i64 [ %indvars.iv535, %.preheader322 ], [ %indvars.iv.next556, %.loopexit ]
  %39 = add i64 %indvar, 1
  %40 = add i64 %indvar, 1
  %41 = add i64 %indvar, 1
  %42 = add i64 %indvar, 1
  %43 = sub nuw nsw i64 %indvars.iv555, %indvars.iv535
  %44 = add nuw nsw i64 %43, 1
  %.not290 = icmp ugt i64 %indvars.iv623, %43
  br i1 %.not290, label %45, label %.loopexit

45:                                               ; preds = %38
  %46 = getelementptr inbounds [16 x [256 x [16 x [16 x [2 x [2 x i32]]]]]], ptr @f, i64 0, i64 %indvars.iv628, i64 %indvars.iv623, i64 %indvars.iv535, i64 %indvars.iv555
  %47 = getelementptr inbounds i8, ptr %46, i64 8
  %48 = getelementptr inbounds [16 x [256 x [16 x [16 x [2 x [2 x %struct.State]]]]]], ptr @g, i64 0, i64 %indvars.iv628, i64 %indvars.iv623, i64 %indvars.iv535, i64 %indvars.iv555
  %49 = getelementptr inbounds i8, ptr %48, i64 48
  %.not291332 = icmp ugt i64 %indvars.iv535, %indvars.iv555
  br i1 %.not291332, label %.preheader319.thread, label %.preheader316.lr.ph

.preheader316.lr.ph:                              ; preds = %45
  %50 = sub nsw i64 %indvars.iv623, %44
  %.sroa.4121.0..sroa_idx = getelementptr inbounds i8, ptr %48, i64 52
  %.sroa.5122.0..sroa_idx = getelementptr inbounds i8, ptr %48, i64 56
  %.sroa.6123.0..sroa_idx = getelementptr inbounds i8, ptr %48, i64 60
  %.sroa.7124.0..sroa_idx = getelementptr inbounds i8, ptr %48, i64 64
  %.sroa.8125.0..sroa_idx = getelementptr inbounds i8, ptr %48, i64 68
  %.promoted334 = load i32, ptr %47, align 8, !tbaa !5
  %51 = trunc nsw i64 %50 to i32
  br label %.preheader316

.preheader321:                                    ; preds = %60
  br i1 %.not291332, label %.preheader319.thread, label %.lr.ph340

.lr.ph340:                                        ; preds = %.preheader321
  %.promoted = load i32, ptr %47, align 8, !tbaa !5
  %min.iters.check745 = icmp ult i64 %39, 8
  br i1 %min.iters.check745, label %scalar.ph744.preheader, label %vector.ph746

scalar.ph744.preheader:                           ; preds = %middle.block743, %.lr.ph340
  %indvars.iv547.ph = phi i64 [ %indvars.iv535, %.lr.ph340 ], [ %ind.end749, %middle.block743 ]
  %.ph765 = phi i32 [ %.promoted, %.lr.ph340 ], [ %58, %middle.block743 ]
  br label %scalar.ph744

vector.ph746:                                     ; preds = %.lr.ph340
  %n.vec748 = and i64 %39, -8
  %ind.end749 = add i64 %indvars.iv535, %n.vec748
  %52 = insertelement <4 x i32> <i32 poison, i32 0, i32 0, i32 0>, i32 %.promoted, i64 0
  br label %vector.body751

vector.body751:                                   ; preds = %vector.body751, %vector.ph746
  %index752 = phi i64 [ 0, %vector.ph746 ], [ %index.next758, %vector.body751 ]
  %vec.phi753 = phi <4 x i32> [ %52, %vector.ph746 ], [ %55, %vector.body751 ]
  %vec.phi754 = phi <4 x i32> [ zeroinitializer, %vector.ph746 ], [ %56, %vector.body751 ]
  %offset.idx755 = add i64 %indvars.iv535, %index752
  %53 = getelementptr inbounds [16 x [16 x i32]], ptr @w, i64 0, i64 %indvars.iv628, i64 %offset.idx755
  %54 = getelementptr inbounds i8, ptr %53, i64 16
  %wide.load756 = load <4 x i32>, ptr %53, align 4, !tbaa !5
  %wide.load757 = load <4 x i32>, ptr %54, align 4, !tbaa !5
  %55 = add <4 x i32> %vec.phi753, %wide.load756
  %56 = add <4 x i32> %vec.phi754, %wide.load757
  %index.next758 = add nuw i64 %index752, 8
  %57 = icmp eq i64 %index.next758, %n.vec748
  br i1 %57, label %middle.block743, label %vector.body751, !llvm.loop !16

middle.block743:                                  ; preds = %vector.body751
  %bin.rdx759 = add <4 x i32> %56, %55
  %58 = tail call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx759)
  %cmp.n760 = icmp eq i64 %39, %n.vec748
  br i1 %cmp.n760, label %.loopexit762, label %scalar.ph744.preheader

.preheader316:                                    ; preds = %.preheader316.lr.ph, %60
  %indvars.iv537 = phi i64 [ %indvars.iv535, %.preheader316.lr.ph ], [ %indvars.iv.next538, %60 ]
  %.promoted337 = phi i32 [ %.promoted334, %.preheader316.lr.ph ], [ %.promoted335, %60 ]
  %59 = trunc nuw nsw i64 %indvars.iv537 to i32
  br label %61

60:                                               ; preds = %68
  %indvars.iv.next538 = add nuw nsw i64 %indvars.iv537, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next538, %indvars.iv612
  br i1 %exitcond.not, label %.preheader321, label %.preheader316, !llvm.loop !19

61:                                               ; preds = %.preheader316, %68
  %indvars.iv539 = phi i64 [ %indvars.iv537, %.preheader316 ], [ %indvars.iv.next540, %68 ]
  %.promoted336 = phi i32 [ %.promoted337, %.preheader316 ], [ %.promoted335, %68 ]
  %62 = phi i32 [ %.promoted337, %.preheader316 ], [ %69, %68 ]
  %63 = getelementptr inbounds [16 x [256 x [16 x [16 x [2 x [2 x i32]]]]]], ptr @f, i64 0, i64 %22, i64 %50, i64 %indvars.iv537, i64 %indvars.iv539, i64 1
  %64 = load i32, ptr %63, align 8, !tbaa !5
  %65 = icmp slt i32 %62, %64
  br i1 %65, label %66, label %68

66:                                               ; preds = %61
  store i32 %64, ptr %47, align 8, !tbaa !5
  store i32 %23, ptr %49, align 16, !tbaa !5
  store i32 %51, ptr %.sroa.4121.0..sroa_idx, align 4, !tbaa !5
  store i32 %59, ptr %.sroa.5122.0..sroa_idx, align 8, !tbaa !5
  %67 = trunc nuw nsw i64 %indvars.iv539 to i32
  store i32 %67, ptr %.sroa.6123.0..sroa_idx, align 4, !tbaa !5
  store i32 1, ptr %.sroa.7124.0..sroa_idx, align 16, !tbaa !5
  store i32 0, ptr %.sroa.8125.0..sroa_idx, align 4, !tbaa !5
  br label %68

68:                                               ; preds = %66, %61
  %.promoted335 = phi i32 [ %64, %66 ], [ %.promoted336, %61 ]
  %69 = phi i32 [ %64, %66 ], [ %62, %61 ]
  %indvars.iv.next540 = add nuw nsw i64 %indvars.iv539, 1
  %.not302.not = icmp ult i64 %indvars.iv539, %indvars.iv555
  br i1 %.not302.not, label %61, label %60, !llvm.loop !20

.loopexit762:                                     ; preds = %scalar.ph744, %middle.block743
  %.lcssa = phi i32 [ %58, %middle.block743 ], [ %78, %scalar.ph744 ]
  store i32 %.lcssa, ptr %47, align 8, !tbaa !5
  %70 = getelementptr inbounds i8, ptr %46, i64 12
  %71 = getelementptr inbounds i8, ptr %48, i64 72
  br i1 %.not291332, label %.preheader319.thread, label %.preheader315.lr.ph

.preheader315.lr.ph:                              ; preds = %.loopexit762
  %.not301345 = icmp ugt i64 %indvars.iv555, %11
  %72 = sub nsw i64 %indvars.iv623, %44
  %.sroa.494.0..sroa_idx = getelementptr inbounds i8, ptr %48, i64 76
  %.sroa.595.0..sroa_idx = getelementptr inbounds i8, ptr %48, i64 80
  %.sroa.696.0..sroa_idx = getelementptr inbounds i8, ptr %48, i64 84
  %.sroa.797.0..sroa_idx = getelementptr inbounds i8, ptr %48, i64 88
  %.sroa.898.0..sroa_idx = getelementptr inbounds i8, ptr %48, i64 92
  br i1 %.not301345, label %.lr.ph361, label %.preheader315.lr.ph.split

.preheader315.lr.ph.split:                        ; preds = %.preheader315.lr.ph
  %.promoted354 = load i32, ptr %70, align 4, !tbaa !5
  %73 = trunc nsw i64 %72 to i32
  %74 = trunc nsw i64 %72 to i32
  br label %.preheader315

scalar.ph744:                                     ; preds = %scalar.ph744.preheader, %scalar.ph744
  %indvars.iv547 = phi i64 [ %indvars.iv.next548, %scalar.ph744 ], [ %indvars.iv547.ph, %scalar.ph744.preheader ]
  %75 = phi i32 [ %78, %scalar.ph744 ], [ %.ph765, %scalar.ph744.preheader ]
  %76 = getelementptr inbounds [16 x [16 x i32]], ptr @w, i64 0, i64 %indvars.iv628, i64 %indvars.iv547
  %77 = load i32, ptr %76, align 4, !tbaa !5
  %78 = add nsw i32 %75, %77
  %indvars.iv.next548 = add nuw nsw i64 %indvars.iv547, 1
  %exitcond551.not = icmp eq i64 %indvars.iv.next548, %indvars.iv612
  br i1 %exitcond551.not, label %.loopexit762, label %scalar.ph744, !llvm.loop !21

.preheader320:                                    ; preds = %._crit_edge347
  br i1 %.not291332, label %.preheader319.thread, label %.lr.ph361

.lr.ph361:                                        ; preds = %.preheader315.lr.ph, %.preheader320
  %.promoted362 = load i32, ptr %70, align 4, !tbaa !5
  %min.iters.check726 = icmp ult i64 %40, 8
  br i1 %min.iters.check726, label %scalar.ph725.preheader, label %vector.ph727

scalar.ph725.preheader:                           ; preds = %middle.block724, %.lr.ph361
  %indvars.iv565.ph = phi i64 [ %indvars.iv535, %.lr.ph361 ], [ %ind.end730, %middle.block724 ]
  %.ph764 = phi i32 [ %.promoted362, %.lr.ph361 ], [ %85, %middle.block724 ]
  br label %scalar.ph725

vector.ph727:                                     ; preds = %.lr.ph361
  %n.vec729 = and i64 %40, -8
  %ind.end730 = add i64 %indvars.iv535, %n.vec729
  %79 = insertelement <4 x i32> <i32 poison, i32 0, i32 0, i32 0>, i32 %.promoted362, i64 0
  br label %vector.body732

vector.body732:                                   ; preds = %vector.body732, %vector.ph727
  %index733 = phi i64 [ 0, %vector.ph727 ], [ %index.next739, %vector.body732 ]
  %vec.phi734 = phi <4 x i32> [ %79, %vector.ph727 ], [ %82, %vector.body732 ]
  %vec.phi735 = phi <4 x i32> [ zeroinitializer, %vector.ph727 ], [ %83, %vector.body732 ]
  %offset.idx736 = add i64 %indvars.iv535, %index733
  %80 = getelementptr inbounds [16 x [16 x i32]], ptr @w, i64 0, i64 %indvars.iv628, i64 %offset.idx736
  %81 = getelementptr inbounds i8, ptr %80, i64 16
  %wide.load737 = load <4 x i32>, ptr %80, align 4, !tbaa !5
  %wide.load738 = load <4 x i32>, ptr %81, align 4, !tbaa !5
  %82 = add <4 x i32> %vec.phi734, %wide.load737
  %83 = add <4 x i32> %vec.phi735, %wide.load738
  %index.next739 = add nuw i64 %index733, 8
  %84 = icmp eq i64 %index.next739, %n.vec729
  br i1 %84, label %middle.block724, label %vector.body732, !llvm.loop !22

middle.block724:                                  ; preds = %vector.body732
  %bin.rdx740 = add <4 x i32> %83, %82
  %85 = tail call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx740)
  %cmp.n741 = icmp eq i64 %40, %n.vec729
  br i1 %cmp.n741, label %.preheader319, label %scalar.ph725.preheader

.preheader315:                                    ; preds = %.preheader315.lr.ph.split, %._crit_edge347
  %indvars.iv560 = phi i64 [ %indvars.iv535, %.preheader315.lr.ph.split ], [ %indvars.iv.next561, %._crit_edge347 ]
  %.promoted348358 = phi i32 [ %.promoted354, %.preheader315.lr.ph.split ], [ %.promoted348355.1, %._crit_edge347 ]
  %86 = trunc nuw nsw i64 %indvars.iv560 to i32
  %87 = trunc nuw nsw i64 %indvars.iv560 to i32
  br label %.preheader312

.preheader312:                                    ; preds = %.preheader315, %99
  %indvars.iv557 = phi i64 [ %indvars.iv555, %.preheader315 ], [ %indvars.iv.next558, %99 ]
  %.promoted348357 = phi i32 [ %.promoted348358, %.preheader315 ], [ %.promoted348355.1, %99 ]
  %.promoted343351 = phi i32 [ %.promoted348358, %.preheader315 ], [ %.promoted343349.1, %99 ]
  %88 = getelementptr inbounds [16 x [256 x [16 x [16 x [2 x [2 x i32]]]]]], ptr @f, i64 0, i64 %22, i64 %72, i64 %indvars.iv560, i64 %indvars.iv557, i64 1, i64 0
  %89 = load i32, ptr %88, align 8, !tbaa !5
  %90 = icmp slt i32 %.promoted343351, %89
  br i1 %90, label %91, label %93

._crit_edge347:                                   ; preds = %99
  %indvars.iv.next561 = add nuw nsw i64 %indvars.iv560, 1
  %exitcond564.not = icmp eq i64 %indvars.iv.next561, %indvars.iv612
  br i1 %exitcond564.not, label %.preheader320, label %.preheader315, !llvm.loop !23

91:                                               ; preds = %.preheader312
  store i32 %89, ptr %70, align 4, !tbaa !5
  store i32 %24, ptr %71, align 8, !tbaa !5
  store i32 %73, ptr %.sroa.494.0..sroa_idx, align 4, !tbaa !5
  store i32 %86, ptr %.sroa.595.0..sroa_idx, align 16, !tbaa !5
  %92 = trunc nuw nsw i64 %indvars.iv557 to i32
  store i32 %92, ptr %.sroa.696.0..sroa_idx, align 4, !tbaa !5
  store i32 1, ptr %.sroa.797.0..sroa_idx, align 8, !tbaa !5
  store i32 0, ptr %.sroa.898.0..sroa_idx, align 4, !tbaa !5
  br label %93

93:                                               ; preds = %91, %.preheader312
  %.promoted348355 = phi i32 [ %89, %91 ], [ %.promoted348357, %.preheader312 ]
  %.promoted343349 = phi i32 [ %89, %91 ], [ %.promoted343351, %.preheader312 ]
  %94 = getelementptr inbounds [16 x [256 x [16 x [16 x [2 x [2 x i32]]]]]], ptr @f, i64 0, i64 %22, i64 %72, i64 %indvars.iv560, i64 %indvars.iv557, i64 1, i64 1
  %95 = load i32, ptr %94, align 4, !tbaa !5
  %96 = icmp slt i32 %.promoted343349, %95
  br i1 %96, label %97, label %99

97:                                               ; preds = %93
  store i32 %95, ptr %70, align 4, !tbaa !5
  store i32 %25, ptr %71, align 8, !tbaa !5
  store i32 %74, ptr %.sroa.494.0..sroa_idx, align 4, !tbaa !5
  store i32 %87, ptr %.sroa.595.0..sroa_idx, align 16, !tbaa !5
  %98 = trunc nuw nsw i64 %indvars.iv557 to i32
  store i32 %98, ptr %.sroa.696.0..sroa_idx, align 4, !tbaa !5
  store i32 1, ptr %.sroa.797.0..sroa_idx, align 8, !tbaa !5
  store i32 1, ptr %.sroa.898.0..sroa_idx, align 4, !tbaa !5
  br label %99

99:                                               ; preds = %97, %93
  %.promoted348355.1 = phi i32 [ %95, %97 ], [ %.promoted348355, %93 ]
  %.promoted343349.1 = phi i32 [ %95, %97 ], [ %.promoted343349, %93 ]
  %indvars.iv.next558 = add nuw nsw i64 %indvars.iv557, 1
  %.not301.not = icmp ult i64 %indvars.iv557, %11
  br i1 %.not301.not, label %.preheader312, label %._crit_edge347, !llvm.loop !24

.preheader319.thread:                             ; preds = %.preheader320, %.loopexit762, %.preheader321, %45
  %100 = sub nsw i64 %indvars.iv623, %44
  br label %.preheader318.thread

.preheader319:                                    ; preds = %scalar.ph725, %middle.block724
  %.lcssa698 = phi i32 [ %85, %middle.block724 ], [ %107, %scalar.ph725 ]
  store i32 %.lcssa698, ptr %70, align 4, !tbaa !5
  %101 = sub nsw i64 %indvars.iv623, %44
  %.sroa.467.0..sroa_idx = getelementptr inbounds i8, ptr %48, i64 4
  %.sroa.568.0..sroa_idx = getelementptr inbounds i8, ptr %48, i64 8
  %.sroa.669.0..sroa_idx = getelementptr inbounds i8, ptr %48, i64 12
  %.sroa.770.0..sroa_idx = getelementptr inbounds i8, ptr %48, i64 16
  %.sroa.871.0..sroa_idx = getelementptr inbounds i8, ptr %48, i64 20
  br i1 %.not291332, label %.preheader318.thread, label %.preheader319.split

.preheader319.split:                              ; preds = %.preheader319
  %.promoted374 = load i32, ptr %46, align 16, !tbaa !5
  %102 = trunc nsw i64 %101 to i32
  %103 = trunc nsw i64 %101 to i32
  br label %.preheader314

scalar.ph725:                                     ; preds = %scalar.ph725.preheader, %scalar.ph725
  %indvars.iv565 = phi i64 [ %indvars.iv.next566, %scalar.ph725 ], [ %indvars.iv565.ph, %scalar.ph725.preheader ]
  %104 = phi i32 [ %107, %scalar.ph725 ], [ %.ph764, %scalar.ph725.preheader ]
  %105 = getelementptr inbounds [16 x [16 x i32]], ptr @w, i64 0, i64 %indvars.iv628, i64 %indvars.iv565
  %106 = load i32, ptr %105, align 4, !tbaa !5
  %107 = add nsw i32 %104, %106
  %indvars.iv.next566 = add nuw nsw i64 %indvars.iv565, 1
  %exitcond569.not = icmp eq i64 %indvars.iv.next566, %indvars.iv612
  br i1 %exitcond569.not, label %.preheader319, label %scalar.ph725, !llvm.loop !25

.preheader318:                                    ; preds = %._crit_edge368
  br i1 %.not291332, label %.preheader318.thread, label %.lr.ph381

.lr.ph381:                                        ; preds = %.preheader318
  %.promoted383 = load i32, ptr %46, align 16, !tbaa !5
  %min.iters.check707 = icmp ult i64 %41, 8
  br i1 %min.iters.check707, label %scalar.ph706.preheader, label %vector.ph708

scalar.ph706.preheader:                           ; preds = %middle.block705, %.lr.ph381
  %indvars.iv583.ph = phi i64 [ %indvars.iv535, %.lr.ph381 ], [ %ind.end711, %middle.block705 ]
  %.ph763 = phi i32 [ %.promoted383, %.lr.ph381 ], [ %114, %middle.block705 ]
  br label %scalar.ph706

vector.ph708:                                     ; preds = %.lr.ph381
  %n.vec710 = and i64 %41, -8
  %ind.end711 = add i64 %indvars.iv535, %n.vec710
  %108 = insertelement <4 x i32> <i32 poison, i32 0, i32 0, i32 0>, i32 %.promoted383, i64 0
  br label %vector.body713

vector.body713:                                   ; preds = %vector.body713, %vector.ph708
  %index714 = phi i64 [ 0, %vector.ph708 ], [ %index.next720, %vector.body713 ]
  %vec.phi715 = phi <4 x i32> [ %108, %vector.ph708 ], [ %111, %vector.body713 ]
  %vec.phi716 = phi <4 x i32> [ zeroinitializer, %vector.ph708 ], [ %112, %vector.body713 ]
  %offset.idx717 = add i64 %indvars.iv535, %index714
  %109 = getelementptr inbounds [16 x [16 x i32]], ptr @w, i64 0, i64 %indvars.iv628, i64 %offset.idx717
  %110 = getelementptr inbounds i8, ptr %109, i64 16
  %wide.load718 = load <4 x i32>, ptr %109, align 4, !tbaa !5
  %wide.load719 = load <4 x i32>, ptr %110, align 4, !tbaa !5
  %111 = add <4 x i32> %vec.phi715, %wide.load718
  %112 = add <4 x i32> %vec.phi716, %wide.load719
  %index.next720 = add nuw i64 %index714, 8
  %113 = icmp eq i64 %index.next720, %n.vec710
  br i1 %113, label %middle.block705, label %vector.body713, !llvm.loop !26

middle.block705:                                  ; preds = %vector.body713
  %bin.rdx721 = add <4 x i32> %112, %111
  %114 = tail call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx721)
  %cmp.n722 = icmp eq i64 %41, %n.vec710
  br i1 %cmp.n722, label %._crit_edge382, label %scalar.ph706.preheader

.preheader314:                                    ; preds = %.preheader319.split, %._crit_edge368
  %indvars.iv578 = phi i64 [ 1, %.preheader319.split ], [ %indvars.iv.next579, %._crit_edge368 ]
  %.promoted369378 = phi i32 [ %.promoted374, %.preheader319.split ], [ %.promoted369375.1, %._crit_edge368 ]
  %115 = trunc nuw nsw i64 %indvars.iv578 to i32
  %116 = trunc nuw nsw i64 %indvars.iv578 to i32
  br label %.preheader311

.preheader311:                                    ; preds = %.preheader314, %128
  %indvars.iv573 = phi i64 [ %indvars.iv535, %.preheader314 ], [ %indvars.iv.next574, %128 ]
  %.promoted369377 = phi i32 [ %.promoted369378, %.preheader314 ], [ %.promoted369375.1, %128 ]
  %.promoted364372 = phi i32 [ %.promoted369378, %.preheader314 ], [ %.promoted364370.1, %128 ]
  %117 = getelementptr inbounds [16 x [256 x [16 x [16 x [2 x [2 x i32]]]]]], ptr @f, i64 0, i64 %22, i64 %101, i64 %indvars.iv578, i64 %indvars.iv573, i64 0
  %118 = load i32, ptr %117, align 16, !tbaa !5
  %119 = icmp slt i32 %.promoted364372, %118
  br i1 %119, label %120, label %122

._crit_edge368:                                   ; preds = %128
  %indvars.iv.next579 = add nuw nsw i64 %indvars.iv578, 1
  %exitcond582.not = icmp eq i64 %indvars.iv.next579, %indvars.iv610
  br i1 %exitcond582.not, label %.preheader318, label %.preheader314, !llvm.loop !27

120:                                              ; preds = %.preheader311
  store i32 %118, ptr %46, align 16, !tbaa !5
  store i32 %26, ptr %48, align 16, !tbaa !5
  store i32 %102, ptr %.sroa.467.0..sroa_idx, align 4, !tbaa !5
  store i32 %115, ptr %.sroa.568.0..sroa_idx, align 8, !tbaa !5
  %121 = trunc nuw nsw i64 %indvars.iv573 to i32
  store i32 %121, ptr %.sroa.669.0..sroa_idx, align 4, !tbaa !5
  store i32 0, ptr %.sroa.770.0..sroa_idx, align 16, !tbaa !5
  store i32 0, ptr %.sroa.871.0..sroa_idx, align 4, !tbaa !5
  br label %122

122:                                              ; preds = %120, %.preheader311
  %.promoted369375 = phi i32 [ %118, %120 ], [ %.promoted369377, %.preheader311 ]
  %.promoted364370 = phi i32 [ %118, %120 ], [ %.promoted364372, %.preheader311 ]
  %123 = getelementptr inbounds [16 x [256 x [16 x [16 x [2 x [2 x i32]]]]]], ptr @f, i64 0, i64 %22, i64 %101, i64 %indvars.iv578, i64 %indvars.iv573, i64 1
  %124 = load i32, ptr %123, align 8, !tbaa !5
  %125 = icmp slt i32 %.promoted364370, %124
  br i1 %125, label %126, label %128

126:                                              ; preds = %122
  store i32 %124, ptr %46, align 16, !tbaa !5
  store i32 %27, ptr %48, align 16, !tbaa !5
  store i32 %103, ptr %.sroa.467.0..sroa_idx, align 4, !tbaa !5
  store i32 %116, ptr %.sroa.568.0..sroa_idx, align 8, !tbaa !5
  %127 = trunc nuw nsw i64 %indvars.iv573 to i32
  store i32 %127, ptr %.sroa.669.0..sroa_idx, align 4, !tbaa !5
  store i32 1, ptr %.sroa.770.0..sroa_idx, align 16, !tbaa !5
  store i32 0, ptr %.sroa.871.0..sroa_idx, align 4, !tbaa !5
  br label %128

128:                                              ; preds = %126, %122
  %.promoted369375.1 = phi i32 [ %124, %126 ], [ %.promoted369375, %122 ]
  %.promoted364370.1 = phi i32 [ %124, %126 ], [ %.promoted364370, %122 ]
  %indvars.iv.next574 = add nuw nsw i64 %indvars.iv573, 1
  %exitcond577.not = icmp eq i64 %indvars.iv.next574, %indvars.iv612
  br i1 %exitcond577.not, label %._crit_edge368, label %.preheader311, !llvm.loop !28

._crit_edge382:                                   ; preds = %scalar.ph706, %middle.block705
  %.lcssa699 = phi i32 [ %114, %middle.block705 ], [ %139, %scalar.ph706 ]
  store i32 %.lcssa699, ptr %46, align 16, !tbaa !5
  br label %.preheader318.thread

.preheader318.thread:                             ; preds = %.preheader319.thread, %.preheader319, %._crit_edge382, %.preheader318
  %129 = phi i64 [ %101, %._crit_edge382 ], [ %101, %.preheader318 ], [ %101, %.preheader319 ], [ %100, %.preheader319.thread ]
  %130 = getelementptr inbounds i8, ptr %46, i64 4
  %131 = getelementptr inbounds i8, ptr %48, i64 24
  %.not299393 = icmp ugt i64 %indvars.iv555, %11
  %.sroa.437.0..sroa_idx = getelementptr inbounds i8, ptr %48, i64 28
  %.sroa.538.0..sroa_idx = getelementptr inbounds i8, ptr %48, i64 32
  %.sroa.639.0..sroa_idx = getelementptr inbounds i8, ptr %48, i64 36
  %.sroa.740.0..sroa_idx = getelementptr inbounds i8, ptr %48, i64 40
  %.sroa.841.0..sroa_idx = getelementptr inbounds i8, ptr %48, i64 44
  br i1 %.not299393, label %.preheader317, label %.split

.split:                                           ; preds = %.preheader318.thread
  %.promoted402 = load i32, ptr %130, align 4, !tbaa !5
  %132 = trunc nsw i64 %129 to i32
  %133 = trunc nsw i64 %129 to i32
  %134 = trunc nsw i64 %129 to i32
  %135 = trunc nsw i64 %129 to i32
  br label %.preheader313

scalar.ph706:                                     ; preds = %scalar.ph706.preheader, %scalar.ph706
  %indvars.iv583 = phi i64 [ %indvars.iv.next584, %scalar.ph706 ], [ %indvars.iv583.ph, %scalar.ph706.preheader ]
  %136 = phi i32 [ %139, %scalar.ph706 ], [ %.ph763, %scalar.ph706.preheader ]
  %137 = getelementptr inbounds [16 x [16 x i32]], ptr @w, i64 0, i64 %indvars.iv628, i64 %indvars.iv583
  %138 = load i32, ptr %137, align 4, !tbaa !5
  %139 = add nsw i32 %136, %138
  %indvars.iv.next584 = add nuw nsw i64 %indvars.iv583, 1
  %exitcond587.not = icmp eq i64 %indvars.iv.next584, %indvars.iv612
  br i1 %exitcond587.not, label %._crit_edge382, label %scalar.ph706, !llvm.loop !29

.preheader317:                                    ; preds = %._crit_edge395, %.preheader318.thread
  br i1 %.not291332, label %.loopexit, label %.lr.ph410

.lr.ph410:                                        ; preds = %.preheader317
  %.promoted411 = load i32, ptr %130, align 4, !tbaa !5
  %min.iters.check = icmp ult i64 %42, 8
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.ph

scalar.ph.preheader:                              ; preds = %middle.block, %.lr.ph410
  %indvars.iv605.ph = phi i64 [ %indvars.iv535, %.lr.ph410 ], [ %ind.end, %middle.block ]
  %.ph = phi i32 [ %.promoted411, %.lr.ph410 ], [ %146, %middle.block ]
  br label %scalar.ph

vector.ph:                                        ; preds = %.lr.ph410
  %n.vec = and i64 %42, -8
  %ind.end = add i64 %indvars.iv535, %n.vec
  %140 = insertelement <4 x i32> <i32 poison, i32 0, i32 0, i32 0>, i32 %.promoted411, i64 0
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.phi = phi <4 x i32> [ %140, %vector.ph ], [ %143, %vector.body ]
  %vec.phi703 = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %144, %vector.body ]
  %offset.idx = add i64 %indvars.iv535, %index
  %141 = getelementptr inbounds [16 x [16 x i32]], ptr @w, i64 0, i64 %indvars.iv628, i64 %offset.idx
  %142 = getelementptr inbounds i8, ptr %141, i64 16
  %wide.load = load <4 x i32>, ptr %141, align 4, !tbaa !5
  %wide.load704 = load <4 x i32>, ptr %142, align 4, !tbaa !5
  %143 = add <4 x i32> %vec.phi, %wide.load
  %144 = add <4 x i32> %vec.phi703, %wide.load704
  %index.next = add nuw i64 %index, 8
  %145 = icmp eq i64 %index.next, %n.vec
  br i1 %145, label %middle.block, label %vector.body, !llvm.loop !30

middle.block:                                     ; preds = %vector.body
  %bin.rdx = add <4 x i32> %144, %143
  %146 = tail call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx)
  %cmp.n = icmp eq i64 %42, %n.vec
  br i1 %cmp.n, label %..loopexit_crit_edge, label %scalar.ph.preheader

.preheader313:                                    ; preds = %.split, %._crit_edge395
  %indvars.iv600 = phi i64 [ 1, %.split ], [ %indvars.iv.next601, %._crit_edge395 ]
  %.promoted396407 = phi i32 [ %.promoted402, %.split ], [ %.promoted396403.1.1, %._crit_edge395 ]
  %147 = trunc nuw nsw i64 %indvars.iv600 to i32
  %148 = trunc nuw nsw i64 %indvars.iv600 to i32
  %149 = trunc nuw nsw i64 %indvars.iv600 to i32
  %150 = trunc nuw nsw i64 %indvars.iv600 to i32
  br label %.preheader310

.preheader310:                                    ; preds = %.preheader313, %173
  %indvars.iv597 = phi i64 [ %indvars.iv555, %.preheader313 ], [ %indvars.iv.next598, %173 ]
  %.promoted396406 = phi i32 [ %.promoted396407, %.preheader313 ], [ %.promoted396403.1.1, %173 ]
  %.promoted387400 = phi i32 [ %.promoted396407, %.preheader313 ], [ %.promoted387397.1.1, %173 ]
  %151 = getelementptr inbounds [16 x [256 x [16 x [16 x [2 x [2 x i32]]]]]], ptr @f, i64 0, i64 %22, i64 %129, i64 %indvars.iv600, i64 %indvars.iv597, i64 0, i64 0
  %152 = load i32, ptr %151, align 16, !tbaa !5
  %153 = icmp slt i32 %.promoted387400, %152
  br i1 %153, label %154, label %156

._crit_edge395:                                   ; preds = %173
  %indvars.iv.next601 = add nuw nsw i64 %indvars.iv600, 1
  %exitcond604.not = icmp eq i64 %indvars.iv.next601, %indvars.iv610
  br i1 %exitcond604.not, label %.preheader317, label %.preheader313, !llvm.loop !31

154:                                              ; preds = %.preheader310
  store i32 %152, ptr %130, align 4, !tbaa !5
  store i32 %28, ptr %131, align 8, !tbaa !5
  store i32 %132, ptr %.sroa.437.0..sroa_idx, align 4, !tbaa !5
  store i32 %147, ptr %.sroa.538.0..sroa_idx, align 16, !tbaa !5
  %155 = trunc nuw nsw i64 %indvars.iv597 to i32
  store i32 %155, ptr %.sroa.639.0..sroa_idx, align 4, !tbaa !5
  store i32 0, ptr %.sroa.740.0..sroa_idx, align 8, !tbaa !5
  store i32 0, ptr %.sroa.841.0..sroa_idx, align 4, !tbaa !5
  br label %156

156:                                              ; preds = %154, %.preheader310
  %.promoted396403 = phi i32 [ %152, %154 ], [ %.promoted396406, %.preheader310 ]
  %.promoted387397 = phi i32 [ %152, %154 ], [ %.promoted387400, %.preheader310 ]
  %157 = getelementptr inbounds [16 x [256 x [16 x [16 x [2 x [2 x i32]]]]]], ptr @f, i64 0, i64 %22, i64 %129, i64 %indvars.iv600, i64 %indvars.iv597, i64 0, i64 1
  %158 = load i32, ptr %157, align 4, !tbaa !5
  %159 = icmp slt i32 %.promoted387397, %158
  br i1 %159, label %160, label %.preheader309.1

160:                                              ; preds = %156
  store i32 %158, ptr %130, align 4, !tbaa !5
  store i32 %29, ptr %131, align 8, !tbaa !5
  store i32 %133, ptr %.sroa.437.0..sroa_idx, align 4, !tbaa !5
  store i32 %148, ptr %.sroa.538.0..sroa_idx, align 16, !tbaa !5
  %161 = trunc nuw nsw i64 %indvars.iv597 to i32
  store i32 %161, ptr %.sroa.639.0..sroa_idx, align 4, !tbaa !5
  store i32 0, ptr %.sroa.740.0..sroa_idx, align 8, !tbaa !5
  store i32 1, ptr %.sroa.841.0..sroa_idx, align 4, !tbaa !5
  br label %.preheader309.1

.preheader309.1:                                  ; preds = %160, %156
  %.promoted396403.1 = phi i32 [ %158, %160 ], [ %.promoted396403, %156 ]
  %.promoted387397.1 = phi i32 [ %158, %160 ], [ %.promoted387397, %156 ]
  %162 = getelementptr inbounds [16 x [256 x [16 x [16 x [2 x [2 x i32]]]]]], ptr @f, i64 0, i64 %22, i64 %129, i64 %indvars.iv600, i64 %indvars.iv597, i64 1, i64 0
  %163 = load i32, ptr %162, align 8, !tbaa !5
  %164 = icmp slt i32 %.promoted387397.1, %163
  br i1 %164, label %165, label %167

165:                                              ; preds = %.preheader309.1
  store i32 %163, ptr %130, align 4, !tbaa !5
  store i32 %30, ptr %131, align 8, !tbaa !5
  store i32 %134, ptr %.sroa.437.0..sroa_idx, align 4, !tbaa !5
  store i32 %149, ptr %.sroa.538.0..sroa_idx, align 16, !tbaa !5
  %166 = trunc nuw nsw i64 %indvars.iv597 to i32
  store i32 %166, ptr %.sroa.639.0..sroa_idx, align 4, !tbaa !5
  store i32 1, ptr %.sroa.740.0..sroa_idx, align 8, !tbaa !5
  store i32 0, ptr %.sroa.841.0..sroa_idx, align 4, !tbaa !5
  br label %167

167:                                              ; preds = %165, %.preheader309.1
  %.promoted396403.1594 = phi i32 [ %163, %165 ], [ %.promoted396403.1, %.preheader309.1 ]
  %.promoted387397.1595 = phi i32 [ %163, %165 ], [ %.promoted387397.1, %.preheader309.1 ]
  %168 = getelementptr inbounds [16 x [256 x [16 x [16 x [2 x [2 x i32]]]]]], ptr @f, i64 0, i64 %22, i64 %129, i64 %indvars.iv600, i64 %indvars.iv597, i64 1, i64 1
  %169 = load i32, ptr %168, align 4, !tbaa !5
  %170 = icmp slt i32 %.promoted387397.1595, %169
  br i1 %170, label %171, label %173

171:                                              ; preds = %167
  store i32 %169, ptr %130, align 4, !tbaa !5
  store i32 %31, ptr %131, align 8, !tbaa !5
  store i32 %135, ptr %.sroa.437.0..sroa_idx, align 4, !tbaa !5
  store i32 %150, ptr %.sroa.538.0..sroa_idx, align 16, !tbaa !5
  %172 = trunc nuw nsw i64 %indvars.iv597 to i32
  store i32 %172, ptr %.sroa.639.0..sroa_idx, align 4, !tbaa !5
  store i32 1, ptr %.sroa.740.0..sroa_idx, align 8, !tbaa !5
  store i32 1, ptr %.sroa.841.0..sroa_idx, align 4, !tbaa !5
  br label %173

173:                                              ; preds = %171, %167
  %.promoted396403.1.1 = phi i32 [ %169, %171 ], [ %.promoted396403.1594, %167 ]
  %.promoted387397.1.1 = phi i32 [ %169, %171 ], [ %.promoted387397.1595, %167 ]
  %indvars.iv.next598 = add nuw nsw i64 %indvars.iv597, 1
  %.not299.not = icmp ult i64 %indvars.iv597, %11
  br i1 %.not299.not, label %.preheader310, label %._crit_edge395, !llvm.loop !32

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv605 = phi i64 [ %indvars.iv.next606, %scalar.ph ], [ %indvars.iv605.ph, %scalar.ph.preheader ]
  %174 = phi i32 [ %177, %scalar.ph ], [ %.ph, %scalar.ph.preheader ]
  %175 = getelementptr inbounds [16 x [16 x i32]], ptr @w, i64 0, i64 %indvars.iv628, i64 %indvars.iv605
  %176 = load i32, ptr %175, align 4, !tbaa !5
  %177 = add nsw i32 %174, %176
  %indvars.iv.next606 = add nuw nsw i64 %indvars.iv605, 1
  %exitcond609.not = icmp eq i64 %indvars.iv.next606, %indvars.iv612
  br i1 %exitcond609.not, label %..loopexit_crit_edge, label %scalar.ph, !llvm.loop !33

..loopexit_crit_edge:                             ; preds = %scalar.ph, %middle.block
  %.lcssa700 = phi i32 [ %146, %middle.block ], [ %177, %scalar.ph ]
  store i32 %.lcssa700, ptr %130, align 4, !tbaa !5
  br label %.loopexit

.loopexit:                                        ; preds = %.preheader317, %..loopexit_crit_edge, %38
  %indvars.iv.next556 = add nuw nsw i64 %indvars.iv555, 1
  %indvars.iv.next613 = add nuw nsw i64 %indvars.iv612, 1
  %exitcond618.not = icmp eq i64 %indvars.iv.next613, %wide.trip.count
  %indvar.next = add i64 %indvar, 1
  br i1 %exitcond618.not, label %37, label %38, !llvm.loop !34

.preheader307:                                    ; preds = %.preheader307.preheader, %._crit_edge468.split
  %indvars.iv656 = phi i64 [ 1, %.preheader307.preheader ], [ %indvars.iv.next657, %._crit_edge468.split ]
  %.sroa.025.0490 = phi i32 [ undef, %.preheader307.preheader ], [ %.sroa.025.5.1.1, %._crit_edge468.split ]
  %.sroa.627.0489 = phi i32 [ undef, %.preheader307.preheader ], [ %.sroa.627.5.1.1, %._crit_edge468.split ]
  %.sroa.9.0488 = phi i32 [ undef, %.preheader307.preheader ], [ %.sroa.9.5.1.1, %._crit_edge468.split ]
  %.sroa.12.0487 = phi i32 [ undef, %.preheader307.preheader ], [ %.sroa.12.5.1.1, %._crit_edge468.split ]
  %.sroa.15.0486 = phi i32 [ undef, %.preheader307.preheader ], [ %.sroa.15.5.1.1, %._crit_edge468.split ]
  %.sroa.17.0485 = phi i32 [ undef, %.preheader307.preheader ], [ %.sroa.17.5.1.1, %._crit_edge468.split ]
  %.0257484 = phi i32 [ 0, %.preheader307.preheader ], [ %.5.1.1, %._crit_edge468.split ]
  %178 = trunc nuw nsw i64 %indvars.iv656 to i32
  br label %.preheader306

._crit_edge492.thread:                            ; preds = %.preheader307.lr.ph, %.preheader325, %0
  %179 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, i32 noundef 0)
  br label %.preheader.preheader

._crit_edge492:                                   ; preds = %._crit_edge468.split
  %180 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, i32 noundef %.5.1.1)
  %.not283511 = icmp eq i32 %.sroa.627.5.1.1, 0
  br i1 %.not283511, label %._crit_edge518, label %.preheader.preheader

.preheader.preheader:                             ; preds = %._crit_edge492.thread, %._crit_edge492
  %.sroa.025.6517.ph = phi i32 [ %.sroa.025.5.1.1, %._crit_edge492 ], [ undef, %._crit_edge492.thread ]
  %.sroa.627.6516.ph = phi i32 [ %.sroa.627.5.1.1, %._crit_edge492 ], [ undef, %._crit_edge492.thread ]
  %.sroa.9.6515.ph = phi i32 [ %.sroa.9.5.1.1, %._crit_edge492 ], [ undef, %._crit_edge492.thread ]
  %.sroa.12.6514.ph = phi i32 [ %.sroa.12.5.1.1, %._crit_edge492 ], [ undef, %._crit_edge492.thread ]
  %.sroa.15.6513.ph = phi i32 [ %.sroa.15.5.1.1, %._crit_edge492 ], [ undef, %._crit_edge492.thread ]
  %.sroa.17.6512.ph = phi i32 [ %.sroa.17.5.1.1, %._crit_edge492 ], [ undef, %._crit_edge492.thread ]
  br label %.preheader

.preheader306:                                    ; preds = %.preheader307, %._crit_edge451
  %indvars.iv651 = phi i64 [ 1, %.preheader307 ], [ %indvars.iv.next652, %._crit_edge451 ]
  %.sroa.025.1466 = phi i32 [ %.sroa.025.0490, %.preheader307 ], [ %.sroa.025.5.1.1, %._crit_edge451 ]
  %.sroa.627.1465 = phi i32 [ %.sroa.627.0489, %.preheader307 ], [ %.sroa.627.5.1.1, %._crit_edge451 ]
  %.sroa.9.1464 = phi i32 [ %.sroa.9.0488, %.preheader307 ], [ %.sroa.9.5.1.1, %._crit_edge451 ]
  %.sroa.12.1463 = phi i32 [ %.sroa.12.0487, %.preheader307 ], [ %.sroa.12.5.1.1, %._crit_edge451 ]
  %.sroa.15.1462 = phi i32 [ %.sroa.15.0486, %.preheader307 ], [ %.sroa.15.5.1.1, %._crit_edge451 ]
  %.sroa.17.1461 = phi i32 [ %.sroa.17.0485, %.preheader307 ], [ %.sroa.17.5.1.1, %._crit_edge451 ]
  %.1460 = phi i32 [ %.0257484, %.preheader307 ], [ %.5.1.1, %._crit_edge451 ]
  %181 = trunc nuw nsw i64 %indvars.iv651 to i32
  br label %.preheader305

._crit_edge468.split:                             ; preds = %._crit_edge451
  %indvars.iv.next657 = add nuw nsw i64 %indvars.iv656, 1
  %exitcond660.not = icmp eq i64 %indvars.iv.next657, %wide.trip.count659
  br i1 %exitcond660.not, label %._crit_edge492, label %.preheader307, !llvm.loop !35

.preheader305:                                    ; preds = %.preheader306, %204
  %indvars.iv646 = phi i64 [ 1, %.preheader306 ], [ %indvars.iv.next647, %204 ]
  %.sroa.025.2449 = phi i32 [ %.sroa.025.1466, %.preheader306 ], [ %.sroa.025.5.1.1, %204 ]
  %.sroa.627.2448 = phi i32 [ %.sroa.627.1465, %.preheader306 ], [ %.sroa.627.5.1.1, %204 ]
  %.sroa.9.2447 = phi i32 [ %.sroa.9.1464, %.preheader306 ], [ %.sroa.9.5.1.1, %204 ]
  %.sroa.12.2446 = phi i32 [ %.sroa.12.1463, %.preheader306 ], [ %.sroa.12.5.1.1, %204 ]
  %.sroa.15.2445 = phi i32 [ %.sroa.15.1462, %.preheader306 ], [ %.sroa.15.5.1.1, %204 ]
  %.sroa.17.2444 = phi i32 [ %.sroa.17.1461, %.preheader306 ], [ %.sroa.17.5.1.1, %204 ]
  %.2443 = phi i32 [ %.1460, %.preheader306 ], [ %.5.1.1, %204 ]
  %182 = getelementptr inbounds [16 x [256 x [16 x [16 x [2 x [2 x i32]]]]]], ptr @f, i64 0, i64 %indvars.iv656, i64 %34, i64 %indvars.iv651, i64 %indvars.iv646, i64 0, i64 0
  %183 = load i32, ptr %182, align 16, !tbaa !5
  %184 = icmp slt i32 %.2443, %183
  br i1 %184, label %185, label %187

._crit_edge451:                                   ; preds = %204
  %indvars.iv.next652 = add nuw nsw i64 %indvars.iv651, 1
  %exitcond655.not = icmp eq i64 %indvars.iv.next652, %wide.trip.count654
  br i1 %exitcond655.not, label %._crit_edge468.split, label %.preheader306, !llvm.loop !36

185:                                              ; preds = %.preheader305
  %186 = trunc nuw nsw i64 %indvars.iv646 to i32
  br label %187

187:                                              ; preds = %185, %.preheader305
  %.5 = phi i32 [ %183, %185 ], [ %.2443, %.preheader305 ]
  %.sroa.17.5 = phi i32 [ 0, %185 ], [ %.sroa.17.2444, %.preheader305 ]
  %.sroa.15.5 = phi i32 [ 0, %185 ], [ %.sroa.15.2445, %.preheader305 ]
  %.sroa.12.5 = phi i32 [ %186, %185 ], [ %.sroa.12.2446, %.preheader305 ]
  %.sroa.9.5 = phi i32 [ %181, %185 ], [ %.sroa.9.2447, %.preheader305 ]
  %.sroa.627.5 = phi i32 [ %33, %185 ], [ %.sroa.627.2448, %.preheader305 ]
  %.sroa.025.5 = phi i32 [ %178, %185 ], [ %.sroa.025.2449, %.preheader305 ]
  %188 = getelementptr inbounds [16 x [256 x [16 x [16 x [2 x [2 x i32]]]]]], ptr @f, i64 0, i64 %indvars.iv656, i64 %34, i64 %indvars.iv651, i64 %indvars.iv646, i64 0, i64 1
  %189 = load i32, ptr %188, align 4, !tbaa !5
  %190 = icmp slt i32 %.5, %189
  br i1 %190, label %191, label %.preheader304.1

191:                                              ; preds = %187
  %192 = trunc nuw nsw i64 %indvars.iv646 to i32
  br label %.preheader304.1

.preheader304.1:                                  ; preds = %191, %187
  %.5.1 = phi i32 [ %189, %191 ], [ %.5, %187 ]
  %.sroa.17.5.1 = phi i32 [ 1, %191 ], [ %.sroa.17.5, %187 ]
  %.sroa.15.5.1 = phi i32 [ 0, %191 ], [ %.sroa.15.5, %187 ]
  %.sroa.12.5.1 = phi i32 [ %192, %191 ], [ %.sroa.12.5, %187 ]
  %.sroa.9.5.1 = phi i32 [ %181, %191 ], [ %.sroa.9.5, %187 ]
  %.sroa.627.5.1 = phi i32 [ %33, %191 ], [ %.sroa.627.5, %187 ]
  %.sroa.025.5.1 = phi i32 [ %178, %191 ], [ %.sroa.025.5, %187 ]
  %193 = getelementptr inbounds [16 x [256 x [16 x [16 x [2 x [2 x i32]]]]]], ptr @f, i64 0, i64 %indvars.iv656, i64 %34, i64 %indvars.iv651, i64 %indvars.iv646, i64 1, i64 0
  %194 = load i32, ptr %193, align 8, !tbaa !5
  %195 = icmp slt i32 %.5.1, %194
  br i1 %195, label %196, label %198

196:                                              ; preds = %.preheader304.1
  %197 = trunc nuw nsw i64 %indvars.iv646 to i32
  br label %198

198:                                              ; preds = %196, %.preheader304.1
  %.5.1639 = phi i32 [ %194, %196 ], [ %.5.1, %.preheader304.1 ]
  %.sroa.17.5.1640 = phi i32 [ 0, %196 ], [ %.sroa.17.5.1, %.preheader304.1 ]
  %.sroa.15.5.1641 = phi i32 [ 1, %196 ], [ %.sroa.15.5.1, %.preheader304.1 ]
  %.sroa.12.5.1642 = phi i32 [ %197, %196 ], [ %.sroa.12.5.1, %.preheader304.1 ]
  %.sroa.9.5.1643 = phi i32 [ %181, %196 ], [ %.sroa.9.5.1, %.preheader304.1 ]
  %.sroa.627.5.1644 = phi i32 [ %33, %196 ], [ %.sroa.627.5.1, %.preheader304.1 ]
  %.sroa.025.5.1645 = phi i32 [ %178, %196 ], [ %.sroa.025.5.1, %.preheader304.1 ]
  %199 = getelementptr inbounds [16 x [256 x [16 x [16 x [2 x [2 x i32]]]]]], ptr @f, i64 0, i64 %indvars.iv656, i64 %34, i64 %indvars.iv651, i64 %indvars.iv646, i64 1, i64 1
  %200 = load i32, ptr %199, align 4, !tbaa !5
  %201 = icmp slt i32 %.5.1639, %200
  br i1 %201, label %202, label %204

202:                                              ; preds = %198
  %203 = trunc nuw nsw i64 %indvars.iv646 to i32
  br label %204

204:                                              ; preds = %202, %198
  %.5.1.1 = phi i32 [ %200, %202 ], [ %.5.1639, %198 ]
  %.sroa.17.5.1.1 = phi i32 [ 1, %202 ], [ %.sroa.17.5.1640, %198 ]
  %.sroa.15.5.1.1 = phi i32 [ 1, %202 ], [ %.sroa.15.5.1641, %198 ]
  %.sroa.12.5.1.1 = phi i32 [ %203, %202 ], [ %.sroa.12.5.1642, %198 ]
  %.sroa.9.5.1.1 = phi i32 [ %181, %202 ], [ %.sroa.9.5.1643, %198 ]
  %.sroa.627.5.1.1 = phi i32 [ %33, %202 ], [ %.sroa.627.5.1644, %198 ]
  %.sroa.025.5.1.1 = phi i32 [ %178, %202 ], [ %.sroa.025.5.1645, %198 ]
  %indvars.iv.next647 = add nuw nsw i64 %indvars.iv646, 1
  %exitcond650.not = icmp eq i64 %indvars.iv.next647, %wide.trip.count654
  br i1 %exitcond650.not, label %._crit_edge451, label %.preheader305, !llvm.loop !37

.preheader:                                       ; preds = %.preheader.preheader, %._crit_edge510
  %.sroa.025.6517 = phi i32 [ %.sroa.025.0.copyload, %._crit_edge510 ], [ %.sroa.025.6517.ph, %.preheader.preheader ]
  %.sroa.627.6516 = phi i32 [ %.sroa.627.0.copyload, %._crit_edge510 ], [ %.sroa.627.6516.ph, %.preheader.preheader ]
  %.sroa.9.6515 = phi i32 [ %.sroa.9.0.copyload, %._crit_edge510 ], [ %.sroa.9.6515.ph, %.preheader.preheader ]
  %.sroa.12.6514 = phi i32 [ %.sroa.12.0.copyload, %._crit_edge510 ], [ %.sroa.12.6514.ph, %.preheader.preheader ]
  %.sroa.15.6513 = phi i32 [ %.sroa.15.0.copyload, %._crit_edge510 ], [ %.sroa.15.6513.ph, %.preheader.preheader ]
  %.sroa.17.6512 = phi i32 [ %.sroa.17.0.copyload, %._crit_edge510 ], [ %.sroa.17.6512.ph, %.preheader.preheader ]
  %.not284507 = icmp sgt i32 %.sroa.9.6515, %.sroa.12.6514
  br i1 %.not284507, label %._crit_edge510, label %.lr.ph509

._crit_edge510:                                   ; preds = %.lr.ph509, %.preheader
  %205 = sext i32 %.sroa.025.6517 to i64
  %206 = sext i32 %.sroa.627.6516 to i64
  %207 = sext i32 %.sroa.9.6515 to i64
  %208 = sext i32 %.sroa.12.6514 to i64
  %209 = sext i32 %.sroa.15.6513 to i64
  %210 = sext i32 %.sroa.17.6512 to i64
  %211 = getelementptr inbounds [16 x [256 x [16 x [16 x [2 x [2 x %struct.State]]]]]], ptr @g, i64 0, i64 %205, i64 %206, i64 %207, i64 %208, i64 %209, i64 %210
  %.sroa.025.0.copyload = load i32, ptr %211, align 8, !tbaa !5
  %.sroa.627.0..sroa_idx = getelementptr inbounds i8, ptr %211, i64 4
  %.sroa.627.0.copyload = load i32, ptr %.sroa.627.0..sroa_idx, align 4, !tbaa !5
  %.sroa.9.0..sroa_idx = getelementptr inbounds i8, ptr %211, i64 8
  %.sroa.9.0.copyload = load i32, ptr %.sroa.9.0..sroa_idx, align 8, !tbaa !5
  %.sroa.12.0..sroa_idx = getelementptr inbounds i8, ptr %211, i64 12
  %.sroa.12.0.copyload = load i32, ptr %.sroa.12.0..sroa_idx, align 4, !tbaa !5
  %.sroa.15.0..sroa_idx = getelementptr inbounds i8, ptr %211, i64 16
  %.sroa.15.0.copyload = load i32, ptr %.sroa.15.0..sroa_idx, align 8, !tbaa !5
  %.sroa.17.0..sroa_idx = getelementptr inbounds i8, ptr %211, i64 20
  %.sroa.17.0.copyload = load i32, ptr %.sroa.17.0..sroa_idx, align 4, !tbaa !5
  %.not283 = icmp eq i32 %.sroa.627.0.copyload, 0
  br i1 %.not283, label %._crit_edge518, label %.preheader, !llvm.loop !38

.lr.ph509:                                        ; preds = %.preheader, %.lr.ph509
  %.0508 = phi i32 [ %213, %.lr.ph509 ], [ %.sroa.9.6515, %.preheader ]
  %212 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1, i32 noundef %.sroa.025.6517, i32 noundef %.0508)
  %213 = add i32 %.0508, 1
  %exitcond661.not = icmp eq i32 %.0508, %.sroa.12.6514
  br i1 %exitcond661.not, label %._crit_edge510, label %.lr.ph509, !llvm.loop !39

._crit_edge518:                                   ; preds = %._crit_edge510, %._crit_edge492
  ret i32 0
}

declare noundef nonnull align 8 dereferenceable(16) ptr @_ZNSirsERi(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #1

; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #2

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.vector.reduce.add.v4i32(<4 x i32>) #3

attributes #0 = { mustprogress norecurse 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 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }

!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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = distinct !{!9, !10, !11}
!10 = !{!"llvm.loop.mustprogress"}
!11 = !{!"llvm.loop.unswitch.partial.disable"}
!12 = distinct !{!12, !10}
!13 = distinct !{!13, !10}
!14 = distinct !{!14, !10}
!15 = distinct !{!15, !10}
!16 = distinct !{!16, !10, !17, !18}
!17 = !{!"llvm.loop.isvectorized", i32 1}
!18 = !{!"llvm.loop.unroll.runtime.disable"}
!19 = distinct !{!19, !10}
!20 = distinct !{!20, !10}
!21 = distinct !{!21, !10, !18, !17}
!22 = distinct !{!22, !10, !17, !18}
!23 = distinct !{!23, !10}
!24 = distinct !{!24, !10}
!25 = distinct !{!25, !10, !18, !17}
!26 = distinct !{!26, !10, !17, !18}
!27 = distinct !{!27, !10}
!28 = distinct !{!28, !10}
!29 = distinct !{!29, !10, !18, !17}
!30 = distinct !{!30, !10, !17, !18}
!31 = distinct !{!31, !10}
!32 = distinct !{!32, !10}
!33 = distinct !{!33, !10, !18, !17}
!34 = distinct !{!34, !10}
!35 = distinct !{!35, !10}
!36 = distinct !{!36, !10}
!37 = distinct !{!37, !10}
!38 = distinct !{!38, !10}
!39 = distinct !{!39, !10}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopInstSimplifyPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,SROAPass,SimpleLoopUnswitchPass,SimplifyCFGPass,TailCallElimPass