; LLVM IR from VastoLorde95/Competitive-Programming :: Codeforces/217 Division 2/Problem D (D)

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

@n = external dso_local global i32, align 4
@m = external dso_local global i32, align 4
@g = external dso_local global [2100 x [2100 x i8]], align 16
@sum = external dso_local global [2100 x [2100 x i32]], align 16
@tot = external dso_local global i32, align 4
@.str = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [4 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 i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  store i32 0, ptr %1, align 4
  %33 = call i32 (ptr, ...) @__isoc99_scanf(ptr noundef @.str, ptr noundef @n, ptr noundef @m)
  call void @llvm.lifetime.start.p0(i64 4, ptr %2) #4
  store i32 0, ptr %2, align 4, !tbaa !5
  br label %34

34:                                               ; preds = %83, %0
  %35 = load i32, ptr %2, align 4, !tbaa !5
  %36 = load i32, ptr @n, align 4, !tbaa !5
  %37 = icmp slt i32 %35, %36
  br i1 %37, label %39, label %38

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

39:                                               ; preds = %34
  %40 = load i32, ptr %2, align 4, !tbaa !5
  %41 = sext i32 %40 to i64
  %42 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %41
  %43 = getelementptr inbounds [2100 x i8], ptr %42, i64 0, i64 0
  %44 = call i32 (ptr, ...) @__isoc99_scanf(ptr noundef @.str.1, ptr noundef %43)
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #4
  store i32 0, ptr %4, align 4, !tbaa !5
  br label %45

45:                                               ; preds = %79, %39
  %46 = load i32, ptr %4, align 4, !tbaa !5
  %47 = load i32, ptr @m, align 4, !tbaa !5
  %48 = icmp slt i32 %46, %47
  br i1 %48, label %50, label %49

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

50:                                               ; preds = %45
  %51 = load i32, ptr %2, align 4, !tbaa !5
  %52 = sext i32 %51 to i64
  %53 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %52
  %54 = load i32, ptr %4, align 4, !tbaa !5
  %55 = sext i32 %54 to i64
  %56 = getelementptr inbounds [2100 x i8], ptr %53, i64 0, i64 %55
  %57 = load i8, ptr %56, align 1, !tbaa !9
  %58 = sext i8 %57 to i32
  %59 = icmp eq i32 %58, 119
  %60 = zext i1 %59 to i32
  %61 = load i32, ptr %2, align 4, !tbaa !5
  %62 = sext i32 %61 to i64
  %63 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %62
  %64 = load i32, ptr %4, align 4, !tbaa !5
  %65 = sext i32 %64 to i64
  %66 = getelementptr inbounds [2100 x i32], ptr %63, i64 0, i64 %65
  store i32 %60, ptr %66, align 4, !tbaa !5
  %67 = load i32, ptr %2, align 4, !tbaa !5
  %68 = sext i32 %67 to i64
  %69 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %68
  %70 = load i32, ptr %4, align 4, !tbaa !5
  %71 = sext i32 %70 to i64
  %72 = getelementptr inbounds [2100 x i8], ptr %69, i64 0, i64 %71
  %73 = load i8, ptr %72, align 1, !tbaa !9
  %74 = sext i8 %73 to i32
  %75 = icmp eq i32 %74, 119
  %76 = zext i1 %75 to i32
  %77 = load i32, ptr @tot, align 4, !tbaa !5
  %78 = add nsw i32 %77, %76
  store i32 %78, ptr @tot, align 4, !tbaa !5
  br label %79

79:                                               ; preds = %50
  %80 = load i32, ptr %4, align 4, !tbaa !5
  %81 = add nsw i32 %80, 1
  store i32 %81, ptr %4, align 4, !tbaa !5
  br label %45, !llvm.loop !10

82:                                               ; preds = %49
  br label %83

83:                                               ; preds = %82
  %84 = load i32, ptr %2, align 4, !tbaa !5
  %85 = add nsw i32 %84, 1
  store i32 %85, ptr %2, align 4, !tbaa !5
  br label %34, !llvm.loop !12

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

87:                                               ; preds = %119, %86
  %88 = load i32, ptr %5, align 4, !tbaa !5
  %89 = load i32, ptr @n, align 4, !tbaa !5
  %90 = icmp slt i32 %88, %89
  br i1 %90, label %92, label %91

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

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

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

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

98:                                               ; preds = %93
  %99 = load i32, ptr %5, align 4, !tbaa !5
  %100 = sext i32 %99 to i64
  %101 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %100
  %102 = load i32, ptr %6, align 4, !tbaa !5
  %103 = sub nsw i32 %102, 1
  %104 = sext i32 %103 to i64
  %105 = getelementptr inbounds [2100 x i32], ptr %101, i64 0, i64 %104
  %106 = load i32, ptr %105, align 4, !tbaa !5
  %107 = load i32, ptr %5, align 4, !tbaa !5
  %108 = sext i32 %107 to i64
  %109 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %108
  %110 = load i32, ptr %6, align 4, !tbaa !5
  %111 = sext i32 %110 to i64
  %112 = getelementptr inbounds [2100 x i32], ptr %109, i64 0, i64 %111
  %113 = load i32, ptr %112, align 4, !tbaa !5
  %114 = add nsw i32 %113, %106
  store i32 %114, ptr %112, align 4, !tbaa !5
  br label %115

115:                                              ; preds = %98
  %116 = load i32, ptr %6, align 4, !tbaa !5
  %117 = add nsw i32 %116, 1
  store i32 %117, ptr %6, align 4, !tbaa !5
  br label %93, !llvm.loop !13

118:                                              ; preds = %97
  br label %119

119:                                              ; preds = %118
  %120 = load i32, ptr %5, align 4, !tbaa !5
  %121 = add nsw i32 %120, 1
  store i32 %121, ptr %5, align 4, !tbaa !5
  br label %87, !llvm.loop !14

122:                                              ; preds = %91
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #4
  store i32 0, ptr %7, align 4, !tbaa !5
  br label %123

123:                                              ; preds = %155, %122
  %124 = load i32, ptr %7, align 4, !tbaa !5
  %125 = load i32, ptr @m, align 4, !tbaa !5
  %126 = icmp slt i32 %124, %125
  br i1 %126, label %128, label %127

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

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

129:                                              ; preds = %151, %128
  %130 = load i32, ptr %8, align 4, !tbaa !5
  %131 = load i32, ptr @n, align 4, !tbaa !5
  %132 = icmp slt i32 %130, %131
  br i1 %132, label %134, label %133

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

134:                                              ; preds = %129
  %135 = load i32, ptr %8, align 4, !tbaa !5
  %136 = sub nsw i32 %135, 1
  %137 = sext i32 %136 to i64
  %138 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %137
  %139 = load i32, ptr %7, align 4, !tbaa !5
  %140 = sext i32 %139 to i64
  %141 = getelementptr inbounds [2100 x i32], ptr %138, i64 0, i64 %140
  %142 = load i32, ptr %141, align 4, !tbaa !5
  %143 = load i32, ptr %8, align 4, !tbaa !5
  %144 = sext i32 %143 to i64
  %145 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %144
  %146 = load i32, ptr %7, align 4, !tbaa !5
  %147 = sext i32 %146 to i64
  %148 = getelementptr inbounds [2100 x i32], ptr %145, i64 0, i64 %147
  %149 = load i32, ptr %148, align 4, !tbaa !5
  %150 = add nsw i32 %149, %142
  store i32 %150, ptr %148, align 4, !tbaa !5
  br label %151

151:                                              ; preds = %134
  %152 = load i32, ptr %8, align 4, !tbaa !5
  %153 = add nsw i32 %152, 1
  store i32 %153, ptr %8, align 4, !tbaa !5
  br label %129, !llvm.loop !15

154:                                              ; preds = %133
  br label %155

155:                                              ; preds = %154
  %156 = load i32, ptr %7, align 4, !tbaa !5
  %157 = add nsw i32 %156, 1
  store i32 %157, ptr %7, align 4, !tbaa !5
  br label %123, !llvm.loop !16

158:                                              ; preds = %127
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #4
  store i32 1000000000, ptr %9, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #4
  store i32 0, ptr %10, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #4
  store i32 1000000000, ptr %11, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #4
  store i32 0, ptr %12, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #4
  store i32 0, ptr %13, align 4, !tbaa !5
  br label %159

159:                                              ; preds = %194, %158
  %160 = load i32, ptr %13, align 4, !tbaa !5
  %161 = load i32, ptr @n, align 4, !tbaa !5
  %162 = icmp slt i32 %160, %161
  br i1 %162, label %164, label %163

163:                                              ; preds = %159
  store i32 20, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  br label %197

164:                                              ; preds = %159
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #4
  store i32 0, ptr %14, align 4, !tbaa !5
  br label %165

165:                                              ; preds = %190, %164
  %166 = load i32, ptr %14, align 4, !tbaa !5
  %167 = load i32, ptr @m, align 4, !tbaa !5
  %168 = icmp slt i32 %166, %167
  br i1 %168, label %170, label %169

169:                                              ; preds = %165
  store i32 23, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  br label %193

170:                                              ; preds = %165
  %171 = load i32, ptr %13, align 4, !tbaa !5
  %172 = sext i32 %171 to i64
  %173 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %172
  %174 = load i32, ptr %14, align 4, !tbaa !5
  %175 = sext i32 %174 to i64
  %176 = getelementptr inbounds [2100 x i8], ptr %173, i64 0, i64 %175
  %177 = load i8, ptr %176, align 1, !tbaa !9
  %178 = sext i8 %177 to i32
  %179 = icmp eq i32 %178, 119
  br i1 %179, label %180, label %189

180:                                              ; preds = %170
  %181 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %9, ptr noundef nonnull align 4 dereferenceable(4) %13)
  %182 = load i32, ptr %181, align 4, !tbaa !5
  store i32 %182, ptr %9, align 4, !tbaa !5
  %183 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %10, ptr noundef nonnull align 4 dereferenceable(4) %13)
  %184 = load i32, ptr %183, align 4, !tbaa !5
  store i32 %184, ptr %10, align 4, !tbaa !5
  %185 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %11, ptr noundef nonnull align 4 dereferenceable(4) %14)
  %186 = load i32, ptr %185, align 4, !tbaa !5
  store i32 %186, ptr %11, align 4, !tbaa !5
  %187 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %12, ptr noundef nonnull align 4 dereferenceable(4) %14)
  %188 = load i32, ptr %187, align 4, !tbaa !5
  store i32 %188, ptr %12, align 4, !tbaa !5
  br label %189

189:                                              ; preds = %180, %170
  br label %190

190:                                              ; preds = %189
  %191 = load i32, ptr %14, align 4, !tbaa !5
  %192 = add nsw i32 %191, 1
  store i32 %192, ptr %14, align 4, !tbaa !5
  br label %165, !llvm.loop !17

193:                                              ; preds = %169
  br label %194

194:                                              ; preds = %193
  %195 = load i32, ptr %13, align 4, !tbaa !5
  %196 = add nsw i32 %195, 1
  store i32 %196, ptr %13, align 4, !tbaa !5
  br label %159, !llvm.loop !18

197:                                              ; preds = %163
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #4
  store i32 0, ptr %15, align 4, !tbaa !5
  br label %198

198:                                              ; preds = %245, %197
  %199 = load i32, ptr %15, align 4, !tbaa !5
  %200 = load i32, ptr @n, align 4, !tbaa !5
  %201 = icmp slt i32 %199, %200
  br i1 %201, label %203, label %202

202:                                              ; preds = %198
  store i32 26, ptr %3, align 4
  br label %248

203:                                              ; preds = %198
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #4
  store i32 0, ptr %16, align 4, !tbaa !5
  br label %204

204:                                              ; preds = %239, %203
  %205 = load i32, ptr %16, align 4, !tbaa !5
  %206 = load i32, ptr @m, align 4, !tbaa !5
  %207 = icmp slt i32 %205, %206
  br i1 %207, label %209, label %208

208:                                              ; preds = %204
  store i32 29, ptr %3, align 4
  br label %242

209:                                              ; preds = %204
  %210 = load i32, ptr %15, align 4, !tbaa !5
  %211 = sext i32 %210 to i64
  %212 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %211
  %213 = load i32, ptr %16, align 4, !tbaa !5
  %214 = sext i32 %213 to i64
  %215 = getelementptr inbounds [2100 x i8], ptr %212, i64 0, i64 %214
  %216 = load i8, ptr %215, align 1, !tbaa !9
  %217 = sext i8 %216 to i32
  %218 = icmp eq i32 %217, 119
  br i1 %218, label %219, label %238

219:                                              ; preds = %209
  %220 = load i32, ptr %15, align 4, !tbaa !5
  %221 = load i32, ptr %9, align 4, !tbaa !5
  %222 = icmp eq i32 %220, %221
  br i1 %222, label %235, label %223

223:                                              ; preds = %219
  %224 = load i32, ptr %15, align 4, !tbaa !5
  %225 = load i32, ptr %10, align 4, !tbaa !5
  %226 = icmp eq i32 %224, %225
  br i1 %226, label %235, label %227

227:                                              ; preds = %223
  %228 = load i32, ptr %16, align 4, !tbaa !5
  %229 = load i32, ptr %11, align 4, !tbaa !5
  %230 = icmp eq i32 %228, %229
  br i1 %230, label %235, label %231

231:                                              ; preds = %227
  %232 = load i32, ptr %16, align 4, !tbaa !5
  %233 = load i32, ptr %12, align 4, !tbaa !5
  %234 = icmp eq i32 %232, %233
  br i1 %234, label %235, label %236

235:                                              ; preds = %231, %227, %223, %219
  br label %239

236:                                              ; preds = %231
  %237 = call i32 @puts(ptr noundef @.str.2)
  store i32 0, ptr %1, align 4
  store i32 1, ptr %3, align 4
  br label %242

238:                                              ; preds = %209
  br label %239

239:                                              ; preds = %238, %235
  %240 = load i32, ptr %16, align 4, !tbaa !5
  %241 = add nsw i32 %240, 1
  store i32 %241, ptr %16, align 4, !tbaa !5
  br label %204, !llvm.loop !19

242:                                              ; preds = %236, %208
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #4
  %243 = load i32, ptr %3, align 4
  switch i32 %243, label %248 [
    i32 29, label %244
  ]

244:                                              ; preds = %242
  br label %245

245:                                              ; preds = %244
  %246 = load i32, ptr %15, align 4, !tbaa !5
  %247 = add nsw i32 %246, 1
  store i32 %247, ptr %15, align 4, !tbaa !5
  br label %198, !llvm.loop !20

248:                                              ; preds = %242, %202
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #4
  %249 = load i32, ptr %3, align 4
  switch i32 %249, label %675 [
    i32 26, label %250
  ]

250:                                              ; preds = %248
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #4
  %251 = load i32, ptr %10, align 4, !tbaa !5
  %252 = load i32, ptr %9, align 4, !tbaa !5
  %253 = sub nsw i32 %251, %252
  %254 = add nsw i32 %253, 1
  store i32 %254, ptr %17, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #4
  %255 = load i32, ptr %12, align 4, !tbaa !5
  %256 = load i32, ptr %11, align 4, !tbaa !5
  %257 = sub nsw i32 %255, %256
  %258 = add nsw i32 %257, 1
  store i32 %258, ptr %18, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #4
  %259 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %17, ptr noundef nonnull align 4 dereferenceable(4) %18)
  %260 = load i32, ptr %259, align 4, !tbaa !5
  store i32 %260, ptr %19, align 4, !tbaa !5
  %261 = load i32, ptr %19, align 4, !tbaa !5
  %262 = load i32, ptr @n, align 4, !tbaa !5
  %263 = icmp sgt i32 %261, %262
  br i1 %263, label %268, label %264

264:                                              ; preds = %250
  %265 = load i32, ptr %19, align 4, !tbaa !5
  %266 = load i32, ptr @m, align 4, !tbaa !5
  %267 = icmp sgt i32 %265, %266
  br i1 %267, label %268, label %270

268:                                              ; preds = %264, %250
  %269 = call i32 @puts(ptr noundef @.str.2)
  store i32 0, ptr %1, align 4
  store i32 1, ptr %3, align 4
  br label %674

270:                                              ; preds = %264
  %271 = load i32, ptr %19, align 4, !tbaa !5
  %272 = load i32, ptr %17, align 4, !tbaa !5
  %273 = icmp sgt i32 %271, %272
  br i1 %273, label %274, label %422

274:                                              ; preds = %270
  store i32 -1, ptr %10, align 4, !tbaa !5
  store i32 -1, ptr %9, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #4
  store i32 0, ptr %20, align 4, !tbaa !5
  br label %275

275:                                              ; preds = %412, %274
  %276 = load i32, ptr %20, align 4, !tbaa !5
  %277 = load i32, ptr %19, align 4, !tbaa !5
  %278 = add nsw i32 %276, %277
  %279 = sub nsw i32 %278, 1
  %280 = load i32, ptr @n, align 4, !tbaa !5
  %281 = icmp slt i32 %279, %280
  br i1 %281, label %283, label %282

282:                                              ; preds = %275
  store i32 32, ptr %3, align 4
  br label %415

283:                                              ; preds = %275
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #4
  %284 = load i32, ptr %20, align 4, !tbaa !5
  %285 = load i32, ptr %19, align 4, !tbaa !5
  %286 = add nsw i32 %284, %285
  %287 = sub nsw i32 %286, 1
  %288 = sext i32 %287 to i64
  %289 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %288
  %290 = load i32, ptr %12, align 4, !tbaa !5
  %291 = sext i32 %290 to i64
  %292 = getelementptr inbounds [2100 x i32], ptr %289, i64 0, i64 %291
  %293 = load i32, ptr %292, align 4, !tbaa !5
  store i32 %293, ptr %21, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #4
  %294 = load i32, ptr %11, align 4, !tbaa !5
  %295 = sub nsw i32 %294, 1
  %296 = icmp sgt i32 %295, 0
  br i1 %296, label %297, label %309

297:                                              ; preds = %283
  %298 = load i32, ptr %20, align 4, !tbaa !5
  %299 = load i32, ptr %19, align 4, !tbaa !5
  %300 = add nsw i32 %298, %299
  %301 = sub nsw i32 %300, 1
  %302 = sext i32 %301 to i64
  %303 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %302
  %304 = load i32, ptr %11, align 4, !tbaa !5
  %305 = sub nsw i32 %304, 1
  %306 = sext i32 %305 to i64
  %307 = getelementptr inbounds [2100 x i32], ptr %303, i64 0, i64 %306
  %308 = load i32, ptr %307, align 4, !tbaa !5
  br label %310

309:                                              ; preds = %283
  br label %310

310:                                              ; preds = %309, %297
  %311 = phi i32 [ %308, %297 ], [ 0, %309 ]
  store i32 %311, ptr %22, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #4
  %312 = load i32, ptr %20, align 4, !tbaa !5
  %313 = sub nsw i32 %312, 1
  %314 = icmp sgt i32 %313, 0
  br i1 %314, label %315, label %324

315:                                              ; preds = %310
  %316 = load i32, ptr %20, align 4, !tbaa !5
  %317 = sub nsw i32 %316, 1
  %318 = sext i32 %317 to i64
  %319 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %318
  %320 = load i32, ptr %12, align 4, !tbaa !5
  %321 = sext i32 %320 to i64
  %322 = getelementptr inbounds [2100 x i32], ptr %319, i64 0, i64 %321
  %323 = load i32, ptr %322, align 4, !tbaa !5
  br label %325

324:                                              ; preds = %310
  br label %325

325:                                              ; preds = %324, %315
  %326 = phi i32 [ %323, %315 ], [ 0, %324 ]
  store i32 %326, ptr %23, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #4
  %327 = load i32, ptr %20, align 4, !tbaa !5
  %328 = sub nsw i32 %327, 1
  %329 = icmp sgt i32 %328, 0
  br i1 %329, label %330, label %344

330:                                              ; preds = %325
  %331 = load i32, ptr %11, align 4, !tbaa !5
  %332 = sub nsw i32 %331, 1
  %333 = icmp sgt i32 %332, 0
  br i1 %333, label %334, label %344

334:                                              ; preds = %330
  %335 = load i32, ptr %20, align 4, !tbaa !5
  %336 = sub nsw i32 %335, 1
  %337 = sext i32 %336 to i64
  %338 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %337
  %339 = load i32, ptr %11, align 4, !tbaa !5
  %340 = sub nsw i32 %339, 1
  %341 = sext i32 %340 to i64
  %342 = getelementptr inbounds [2100 x i32], ptr %338, i64 0, i64 %341
  %343 = load i32, ptr %342, align 4, !tbaa !5
  br label %345

344:                                              ; preds = %330, %325
  br label %345

345:                                              ; preds = %344, %334
  %346 = phi i32 [ %343, %334 ], [ 0, %344 ]
  store i32 %346, ptr %24, align 4, !tbaa !5
  %347 = load i32, ptr %21, align 4, !tbaa !5
  %348 = load i32, ptr %22, align 4, !tbaa !5
  %349 = sub nsw i32 %347, %348
  %350 = load i32, ptr %23, align 4, !tbaa !5
  %351 = sub nsw i32 %349, %350
  %352 = load i32, ptr %24, align 4, !tbaa !5
  %353 = add nsw i32 %351, %352
  %354 = load i32, ptr @tot, align 4, !tbaa !5
  %355 = icmp eq i32 %353, %354
  br i1 %355, label %356, label %408

356:                                              ; preds = %345
  %357 = load i32, ptr %20, align 4, !tbaa !5
  %358 = load i32, ptr %19, align 4, !tbaa !5
  %359 = add nsw i32 %357, %358
  %360 = sub nsw i32 %359, 2
  %361 = sext i32 %360 to i64
  %362 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %361
  %363 = load i32, ptr %12, align 4, !tbaa !5
  %364 = sub nsw i32 %363, 1
  %365 = sext i32 %364 to i64
  %366 = getelementptr inbounds [2100 x i32], ptr %362, i64 0, i64 %365
  %367 = load i32, ptr %366, align 4, !tbaa !5
  store i32 %367, ptr %21, align 4, !tbaa !5
  %368 = load i32, ptr %20, align 4, !tbaa !5
  %369 = load i32, ptr %19, align 4, !tbaa !5
  %370 = add nsw i32 %368, %369
  %371 = sub nsw i32 %370, 2
  %372 = sext i32 %371 to i64
  %373 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %372
  %374 = load i32, ptr %11, align 4, !tbaa !5
  %375 = sext i32 %374 to i64
  %376 = getelementptr inbounds [2100 x i32], ptr %373, i64 0, i64 %375
  %377 = load i32, ptr %376, align 4, !tbaa !5
  store i32 %377, ptr %22, align 4, !tbaa !5
  %378 = load i32, ptr %20, align 4, !tbaa !5
  %379 = sext i32 %378 to i64
  %380 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %379
  %381 = load i32, ptr %12, align 4, !tbaa !5
  %382 = sub nsw i32 %381, 1
  %383 = sext i32 %382 to i64
  %384 = getelementptr inbounds [2100 x i32], ptr %380, i64 0, i64 %383
  %385 = load i32, ptr %384, align 4, !tbaa !5
  store i32 %385, ptr %23, align 4, !tbaa !5
  %386 = load i32, ptr %20, align 4, !tbaa !5
  %387 = sext i32 %386 to i64
  %388 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %387
  %389 = load i32, ptr %11, align 4, !tbaa !5
  %390 = sext i32 %389 to i64
  %391 = getelementptr inbounds [2100 x i32], ptr %388, i64 0, i64 %390
  %392 = load i32, ptr %391, align 4, !tbaa !5
  store i32 %392, ptr %24, align 4, !tbaa !5
  %393 = load i32, ptr %21, align 4, !tbaa !5
  %394 = load i32, ptr %22, align 4, !tbaa !5
  %395 = sub nsw i32 %393, %394
  %396 = load i32, ptr %23, align 4, !tbaa !5
  %397 = sub nsw i32 %395, %396
  %398 = load i32, ptr %24, align 4, !tbaa !5
  %399 = add nsw i32 %397, %398
  %400 = icmp eq i32 %399, 0
  br i1 %400, label %401, label %407

401:                                              ; preds = %356
  %402 = load i32, ptr %20, align 4, !tbaa !5
  store i32 %402, ptr %9, align 4, !tbaa !5
  %403 = load i32, ptr %20, align 4, !tbaa !5
  %404 = load i32, ptr %19, align 4, !tbaa !5
  %405 = add nsw i32 %403, %404
  %406 = sub nsw i32 %405, 1
  store i32 %406, ptr %10, align 4, !tbaa !5
  store i32 32, ptr %3, align 4
  br label %409

407:                                              ; preds = %356
  br label %408

408:                                              ; preds = %407, %345
  store i32 0, ptr %3, align 4
  br label %409

409:                                              ; preds = %408, %401
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #4
  %410 = load i32, ptr %3, align 4
  switch i32 %410, label %415 [
    i32 0, label %411
  ]

411:                                              ; preds = %409
  br label %412

412:                                              ; preds = %411
  %413 = load i32, ptr %20, align 4, !tbaa !5
  %414 = add nsw i32 %413, 1
  store i32 %414, ptr %20, align 4, !tbaa !5
  br label %275, !llvm.loop !21

415:                                              ; preds = %409, %282
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #4
  br label %416

416:                                              ; preds = %415
  %417 = load i32, ptr %9, align 4, !tbaa !5
  %418 = icmp eq i32 %417, -1
  br i1 %418, label %419, label %421

419:                                              ; preds = %416
  %420 = call i32 @puts(ptr noundef @.str.2)
  store i32 0, ptr %1, align 4
  store i32 1, ptr %3, align 4
  br label %674

421:                                              ; preds = %416
  br label %575

422:                                              ; preds = %270
  %423 = load i32, ptr %19, align 4, !tbaa !5
  %424 = load i32, ptr %18, align 4, !tbaa !5
  %425 = icmp sgt i32 %423, %424
  br i1 %425, label %426, label %574

426:                                              ; preds = %422
  store i32 -1, ptr %12, align 4, !tbaa !5
  store i32 -1, ptr %11, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #4
  store i32 0, ptr %25, align 4, !tbaa !5
  br label %427

427:                                              ; preds = %564, %426
  %428 = load i32, ptr %25, align 4, !tbaa !5
  %429 = load i32, ptr %19, align 4, !tbaa !5
  %430 = add nsw i32 %428, %429
  %431 = sub nsw i32 %430, 1
  %432 = load i32, ptr @m, align 4, !tbaa !5
  %433 = icmp slt i32 %431, %432
  br i1 %433, label %435, label %434

434:                                              ; preds = %427
  store i32 35, ptr %3, align 4
  br label %567

435:                                              ; preds = %427
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #4
  %436 = load i32, ptr %10, align 4, !tbaa !5
  %437 = sext i32 %436 to i64
  %438 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %437
  %439 = load i32, ptr %25, align 4, !tbaa !5
  %440 = load i32, ptr %19, align 4, !tbaa !5
  %441 = add nsw i32 %439, %440
  %442 = sub nsw i32 %441, 1
  %443 = sext i32 %442 to i64
  %444 = getelementptr inbounds [2100 x i32], ptr %438, i64 0, i64 %443
  %445 = load i32, ptr %444, align 4, !tbaa !5
  store i32 %445, ptr %26, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #4
  %446 = load i32, ptr %25, align 4, !tbaa !5
  %447 = sub nsw i32 %446, 1
  %448 = icmp sgt i32 %447, 0
  br i1 %448, label %449, label %458

449:                                              ; preds = %435
  %450 = load i32, ptr %10, align 4, !tbaa !5
  %451 = sext i32 %450 to i64
  %452 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %451
  %453 = load i32, ptr %25, align 4, !tbaa !5
  %454 = sub nsw i32 %453, 1
  %455 = sext i32 %454 to i64
  %456 = getelementptr inbounds [2100 x i32], ptr %452, i64 0, i64 %455
  %457 = load i32, ptr %456, align 4, !tbaa !5
  br label %459

458:                                              ; preds = %435
  br label %459

459:                                              ; preds = %458, %449
  %460 = phi i32 [ %457, %449 ], [ 0, %458 ]
  store i32 %460, ptr %27, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #4
  %461 = load i32, ptr %9, align 4, !tbaa !5
  %462 = sub nsw i32 %461, 1
  %463 = icmp sgt i32 %462, 0
  br i1 %463, label %464, label %476

464:                                              ; preds = %459
  %465 = load i32, ptr %9, align 4, !tbaa !5
  %466 = sub nsw i32 %465, 1
  %467 = sext i32 %466 to i64
  %468 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %467
  %469 = load i32, ptr %25, align 4, !tbaa !5
  %470 = load i32, ptr %19, align 4, !tbaa !5
  %471 = add nsw i32 %469, %470
  %472 = sub nsw i32 %471, 1
  %473 = sext i32 %472 to i64
  %474 = getelementptr inbounds [2100 x i32], ptr %468, i64 0, i64 %473
  %475 = load i32, ptr %474, align 4, !tbaa !5
  br label %477

476:                                              ; preds = %459
  br label %477

477:                                              ; preds = %476, %464
  %478 = phi i32 [ %475, %464 ], [ 0, %476 ]
  store i32 %478, ptr %28, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #4
  %479 = load i32, ptr %9, align 4, !tbaa !5
  %480 = sub nsw i32 %479, 1
  %481 = icmp sgt i32 %480, 0
  br i1 %481, label %482, label %496

482:                                              ; preds = %477
  %483 = load i32, ptr %25, align 4, !tbaa !5
  %484 = sub nsw i32 %483, 1
  %485 = icmp sgt i32 %484, 0
  br i1 %485, label %486, label %496

486:                                              ; preds = %482
  %487 = load i32, ptr %9, align 4, !tbaa !5
  %488 = sub nsw i32 %487, 1
  %489 = sext i32 %488 to i64
  %490 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %489
  %491 = load i32, ptr %25, align 4, !tbaa !5
  %492 = sub nsw i32 %491, 1
  %493 = sext i32 %492 to i64
  %494 = getelementptr inbounds [2100 x i32], ptr %490, i64 0, i64 %493
  %495 = load i32, ptr %494, align 4, !tbaa !5
  br label %497

496:                                              ; preds = %482, %477
  br label %497

497:                                              ; preds = %496, %486
  %498 = phi i32 [ %495, %486 ], [ 0, %496 ]
  store i32 %498, ptr %29, align 4, !tbaa !5
  %499 = load i32, ptr %26, align 4, !tbaa !5
  %500 = load i32, ptr %27, align 4, !tbaa !5
  %501 = sub nsw i32 %499, %500
  %502 = load i32, ptr %28, align 4, !tbaa !5
  %503 = sub nsw i32 %501, %502
  %504 = load i32, ptr %29, align 4, !tbaa !5
  %505 = add nsw i32 %503, %504
  %506 = load i32, ptr @tot, align 4, !tbaa !5
  %507 = icmp eq i32 %505, %506
  br i1 %507, label %508, label %560

508:                                              ; preds = %497
  %509 = load i32, ptr %10, align 4, !tbaa !5
  %510 = sub nsw i32 %509, 1
  %511 = sext i32 %510 to i64
  %512 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %511
  %513 = load i32, ptr %25, align 4, !tbaa !5
  %514 = load i32, ptr %19, align 4, !tbaa !5
  %515 = add nsw i32 %513, %514
  %516 = sub nsw i32 %515, 2
  %517 = sext i32 %516 to i64
  %518 = getelementptr inbounds [2100 x i32], ptr %512, i64 0, i64 %517
  %519 = load i32, ptr %518, align 4, !tbaa !5
  store i32 %519, ptr %26, align 4, !tbaa !5
  %520 = load i32, ptr %10, align 4, !tbaa !5
  %521 = sub nsw i32 %520, 1
  %522 = sext i32 %521 to i64
  %523 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %522
  %524 = load i32, ptr %25, align 4, !tbaa !5
  %525 = sext i32 %524 to i64
  %526 = getelementptr inbounds [2100 x i32], ptr %523, i64 0, i64 %525
  %527 = load i32, ptr %526, align 4, !tbaa !5
  store i32 %527, ptr %27, align 4, !tbaa !5
  %528 = load i32, ptr %9, align 4, !tbaa !5
  %529 = sext i32 %528 to i64
  %530 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %529
  %531 = load i32, ptr %25, align 4, !tbaa !5
  %532 = load i32, ptr %19, align 4, !tbaa !5
  %533 = add nsw i32 %531, %532
  %534 = sub nsw i32 %533, 2
  %535 = sext i32 %534 to i64
  %536 = getelementptr inbounds [2100 x i32], ptr %530, i64 0, i64 %535
  %537 = load i32, ptr %536, align 4, !tbaa !5
  store i32 %537, ptr %28, align 4, !tbaa !5
  %538 = load i32, ptr %9, align 4, !tbaa !5
  %539 = sext i32 %538 to i64
  %540 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %539
  %541 = load i32, ptr %25, align 4, !tbaa !5
  %542 = sext i32 %541 to i64
  %543 = getelementptr inbounds [2100 x i32], ptr %540, i64 0, i64 %542
  %544 = load i32, ptr %543, align 4, !tbaa !5
  store i32 %544, ptr %29, align 4, !tbaa !5
  %545 = load i32, ptr %26, align 4, !tbaa !5
  %546 = load i32, ptr %27, align 4, !tbaa !5
  %547 = sub nsw i32 %545, %546
  %548 = load i32, ptr %28, align 4, !tbaa !5
  %549 = sub nsw i32 %547, %548
  %550 = load i32, ptr %29, align 4, !tbaa !5
  %551 = add nsw i32 %549, %550
  %552 = icmp eq i32 %551, 0
  br i1 %552, label %553, label %559

553:                                              ; preds = %508
  %554 = load i32, ptr %25, align 4, !tbaa !5
  store i32 %554, ptr %11, align 4, !tbaa !5
  %555 = load i32, ptr %25, align 4, !tbaa !5
  %556 = load i32, ptr %19, align 4, !tbaa !5
  %557 = add nsw i32 %555, %556
  %558 = sub nsw i32 %557, 1
  store i32 %558, ptr %12, align 4, !tbaa !5
  store i32 35, ptr %3, align 4
  br label %561

559:                                              ; preds = %508
  br label %560

560:                                              ; preds = %559, %497
  store i32 0, ptr %3, align 4
  br label %561

561:                                              ; preds = %560, %553
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #4
  %562 = load i32, ptr %3, align 4
  switch i32 %562, label %567 [
    i32 0, label %563
  ]

563:                                              ; preds = %561
  br label %564

564:                                              ; preds = %563
  %565 = load i32, ptr %25, align 4, !tbaa !5
  %566 = add nsw i32 %565, 1
  store i32 %566, ptr %25, align 4, !tbaa !5
  br label %427, !llvm.loop !22

567:                                              ; preds = %561, %434
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #4
  br label %568

568:                                              ; preds = %567
  %569 = load i32, ptr %11, align 4, !tbaa !5
  %570 = icmp eq i32 %569, -1
  br i1 %570, label %571, label %573

571:                                              ; preds = %568
  %572 = call i32 @puts(ptr noundef @.str.2)
  store i32 0, ptr %1, align 4
  store i32 1, ptr %3, align 4
  br label %674

573:                                              ; preds = %568
  br label %574

574:                                              ; preds = %573, %422
  br label %575

575:                                              ; preds = %574, %421
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #4
  %576 = load i32, ptr %9, align 4, !tbaa !5
  store i32 %576, ptr %30, align 4, !tbaa !5
  br label %577

577:                                              ; preds = %655, %575
  %578 = load i32, ptr %30, align 4, !tbaa !5
  %579 = load i32, ptr %10, align 4, !tbaa !5
  %580 = icmp sle i32 %578, %579
  br i1 %580, label %582, label %581

581:                                              ; preds = %577
  store i32 38, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #4
  br label %658

582:                                              ; preds = %577
  %583 = load i32, ptr %30, align 4, !tbaa !5
  %584 = load i32, ptr %9, align 4, !tbaa !5
  %585 = icmp eq i32 %583, %584
  br i1 %585, label %590, label %586

586:                                              ; preds = %582
  %587 = load i32, ptr %30, align 4, !tbaa !5
  %588 = load i32, ptr %10, align 4, !tbaa !5
  %589 = icmp eq i32 %587, %588
  br i1 %589, label %590, label %619

590:                                              ; preds = %586, %582
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #4
  %591 = load i32, ptr %11, align 4, !tbaa !5
  store i32 %591, ptr %31, align 4, !tbaa !5
  br label %592

592:                                              ; preds = %615, %590
  %593 = load i32, ptr %31, align 4, !tbaa !5
  %594 = load i32, ptr %12, align 4, !tbaa !5
  %595 = icmp sle i32 %593, %594
  br i1 %595, label %597, label %596

596:                                              ; preds = %592
  store i32 41, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #4
  br label %618

597:                                              ; preds = %592
  %598 = load i32, ptr %30, align 4, !tbaa !5
  %599 = sext i32 %598 to i64
  %600 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %599
  %601 = load i32, ptr %31, align 4, !tbaa !5
  %602 = sext i32 %601 to i64
  %603 = getelementptr inbounds [2100 x i8], ptr %600, i64 0, i64 %602
  %604 = load i8, ptr %603, align 1, !tbaa !9
  %605 = sext i8 %604 to i32
  %606 = icmp ne i32 %605, 119
  br i1 %606, label %607, label %614

607:                                              ; preds = %597
  %608 = load i32, ptr %30, align 4, !tbaa !5
  %609 = sext i32 %608 to i64
  %610 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %609
  %611 = load i32, ptr %31, align 4, !tbaa !5
  %612 = sext i32 %611 to i64
  %613 = getelementptr inbounds [2100 x i8], ptr %610, i64 0, i64 %612
  store i8 43, ptr %613, align 1, !tbaa !9
  br label %614

614:                                              ; preds = %607, %597
  br label %615

615:                                              ; preds = %614
  %616 = load i32, ptr %31, align 4, !tbaa !5
  %617 = add nsw i32 %616, 1
  store i32 %617, ptr %31, align 4, !tbaa !5
  br label %592, !llvm.loop !23

618:                                              ; preds = %596
  br label %654

619:                                              ; preds = %586
  %620 = load i32, ptr %30, align 4, !tbaa !5
  %621 = sext i32 %620 to i64
  %622 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %621
  %623 = load i32, ptr %11, align 4, !tbaa !5
  %624 = sext i32 %623 to i64
  %625 = getelementptr inbounds [2100 x i8], ptr %622, i64 0, i64 %624
  %626 = load i8, ptr %625, align 1, !tbaa !9
  %627 = sext i8 %626 to i32
  %628 = icmp ne i32 %627, 119
  br i1 %628, label %629, label %636

629:                                              ; preds = %619
  %630 = load i32, ptr %30, align 4, !tbaa !5
  %631 = sext i32 %630 to i64
  %632 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %631
  %633 = load i32, ptr %11, align 4, !tbaa !5
  %634 = sext i32 %633 to i64
  %635 = getelementptr inbounds [2100 x i8], ptr %632, i64 0, i64 %634
  store i8 43, ptr %635, align 1, !tbaa !9
  br label %636

636:                                              ; preds = %629, %619
  %637 = load i32, ptr %30, align 4, !tbaa !5
  %638 = sext i32 %637 to i64
  %639 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %638
  %640 = load i32, ptr %12, align 4, !tbaa !5
  %641 = sext i32 %640 to i64
  %642 = getelementptr inbounds [2100 x i8], ptr %639, i64 0, i64 %641
  %643 = load i8, ptr %642, align 1, !tbaa !9
  %644 = sext i8 %643 to i32
  %645 = icmp ne i32 %644, 119
  br i1 %645, label %646, label %653

646:                                              ; preds = %636
  %647 = load i32, ptr %30, align 4, !tbaa !5
  %648 = sext i32 %647 to i64
  %649 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %648
  %650 = load i32, ptr %12, align 4, !tbaa !5
  %651 = sext i32 %650 to i64
  %652 = getelementptr inbounds [2100 x i8], ptr %649, i64 0, i64 %651
  store i8 43, ptr %652, align 1, !tbaa !9
  br label %653

653:                                              ; preds = %646, %636
  br label %654

654:                                              ; preds = %653, %618
  br label %655

655:                                              ; preds = %654
  %656 = load i32, ptr %30, align 4, !tbaa !5
  %657 = add nsw i32 %656, 1
  store i32 %657, ptr %30, align 4, !tbaa !5
  br label %577, !llvm.loop !24

658:                                              ; preds = %581
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #4
  store i32 0, ptr %32, align 4, !tbaa !5
  br label %659

659:                                              ; preds = %670, %658
  %660 = load i32, ptr %32, align 4, !tbaa !5
  %661 = load i32, ptr @n, align 4, !tbaa !5
  %662 = icmp slt i32 %660, %661
  br i1 %662, label %664, label %663

663:                                              ; preds = %659
  store i32 44, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #4
  br label %673

664:                                              ; preds = %659
  %665 = load i32, ptr %32, align 4, !tbaa !5
  %666 = sext i32 %665 to i64
  %667 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %666
  %668 = getelementptr inbounds [2100 x i8], ptr %667, i64 0, i64 0
  %669 = call i32 (ptr, ...) @printf(ptr noundef @.str.3, ptr noundef %668)
  br label %670

670:                                              ; preds = %664
  %671 = load i32, ptr %32, align 4, !tbaa !5
  %672 = add nsw i32 %671, 1
  store i32 %672, ptr %32, align 4, !tbaa !5
  br label %659, !llvm.loop !25

673:                                              ; preds = %663
  store i32 0, ptr %1, align 4
  store i32 1, ptr %3, align 4
  br label %674

674:                                              ; preds = %673, %571, %419, %268
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  br label %675

675:                                              ; preds = %674, %248
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #4
  %676 = load i32, ptr %1, align 4
  ret i32 %676
}

declare i32 @__isoc99_scanf(ptr noundef, ...) #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: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #3

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

declare i32 @puts(ptr noundef) #1

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 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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 = !{!7, !7, i64 0}
!10 = distinct !{!10, !11}
!11 = !{!"llvm.loop.mustprogress"}
!12 = distinct !{!12, !11}
!13 = distinct !{!13, !11}
!14 = distinct !{!14, !11}
!15 = distinct !{!15, !11}
!16 = distinct !{!16, !11}
!17 = distinct !{!17, !11}
!18 = distinct !{!18, !11}
!19 = distinct !{!19, !11}
!20 = distinct !{!20, !11}
!21 = distinct !{!21, !11}
!22 = distinct !{!22, !11}
!23 = distinct !{!23, !11}
!24 = distinct !{!24, !11}
!25 = distinct !{!25, !11}


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

@n = external dso_local global i32, align 4
@m = external dso_local global i32, align 4
@g = external dso_local global [2100 x [2100 x i8]], align 16
@sum = external dso_local local_unnamed_addr global [2100 x [2100 x i32]], align 16
@tot = external dso_local local_unnamed_addr global i32, align 4
@.str = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [4 x i8], align 1

; Function Attrs: mustprogress norecurse nounwind uwtable
define dso_local noundef i32 @main() local_unnamed_addr #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 = tail call i32 (ptr, ...) @__isoc99_scanf(ptr noundef nonnull @.str, ptr noundef nonnull @n, ptr noundef nonnull @m)
  %10 = load i32, ptr @n, align 4, !tbaa !5
  %11 = icmp sgt i32 %10, 0
  br i1 %11, label %.lr.ph216, label %.preheader207.thread

.preheader207.thread:                             ; preds = %0
  %.pre342.pre = load i32, ptr @m, align 4, !tbaa !5
  br label %.preheader205

.preheader207:                                    ; preds = %51
  %12 = icmp sgt i32 %52, 0
  br i1 %12, label %.preheader206.lr.ph, label %.preheader205

.preheader206.lr.ph:                              ; preds = %.preheader207
  %13 = icmp sgt i32 %36, 1
  br i1 %13, label %.preheader206.us.preheader, label %.preheader205

.preheader206.us.preheader:                       ; preds = %.preheader206.lr.ph
  %wide.trip.count288 = zext nneg i32 %52 to i64
  %wide.trip.count283 = zext nneg i32 %36 to i64
  %14 = add nsw i64 %wide.trip.count283, -1
  %15 = add nsw i64 %wide.trip.count283, -2
  %xtraiter = and i64 %14, 3
  %16 = icmp ult i64 %15, 3
  %unroll_iter = and i64 %14, -4
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br label %.preheader206.us

.preheader206.us:                                 ; preds = %.preheader206.us.preheader, %._crit_edge219.us
  %indvars.iv285 = phi i64 [ 0, %.preheader206.us.preheader ], [ %indvars.iv.next286, %._crit_edge219.us ]
  %.phi.trans.insert = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %indvars.iv285, i64 0
  %.pre = load i32, ptr %.phi.trans.insert, align 16, !tbaa !5
  br i1 %16, label %._crit_edge219.us.unr-lcssa, label %.preheader206.us.new

.preheader206.us.new:                             ; preds = %.preheader206.us, %.preheader206.us.new
  %17 = phi i32 [ %29, %.preheader206.us.new ], [ %.pre, %.preheader206.us ]
  %indvars.iv280 = phi i64 [ %indvars.iv.next281.3, %.preheader206.us.new ], [ 1, %.preheader206.us ]
  %niter = phi i64 [ %niter.next.3, %.preheader206.us.new ], [ 0, %.preheader206.us ]
  %18 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %indvars.iv285, i64 %indvars.iv280
  %19 = load i32, ptr %18, align 4, !tbaa !5
  %20 = add nsw i32 %19, %17
  store i32 %20, ptr %18, align 4, !tbaa !5
  %indvars.iv.next281 = add nuw nsw i64 %indvars.iv280, 1
  %21 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %indvars.iv285, i64 %indvars.iv.next281
  %22 = load i32, ptr %21, align 4, !tbaa !5
  %23 = add nsw i32 %22, %20
  store i32 %23, ptr %21, align 4, !tbaa !5
  %indvars.iv.next281.1 = add nuw nsw i64 %indvars.iv280, 2
  %24 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %indvars.iv285, i64 %indvars.iv.next281.1
  %25 = load i32, ptr %24, align 4, !tbaa !5
  %26 = add nsw i32 %25, %23
  store i32 %26, ptr %24, align 4, !tbaa !5
  %indvars.iv.next281.2 = add nuw nsw i64 %indvars.iv280, 3
  %27 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %indvars.iv285, i64 %indvars.iv.next281.2
  %28 = load i32, ptr %27, align 4, !tbaa !5
  %29 = add nsw i32 %28, %26
  store i32 %29, ptr %27, align 4, !tbaa !5
  %indvars.iv.next281.3 = add nuw nsw i64 %indvars.iv280, 4
  %niter.next.3 = add i64 %niter, 4
  %niter.ncmp.3 = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %._crit_edge219.us.unr-lcssa, label %.preheader206.us.new, !llvm.loop !9

._crit_edge219.us.unr-lcssa:                      ; preds = %.preheader206.us.new, %.preheader206.us
  %.unr = phi i32 [ %.pre, %.preheader206.us ], [ %29, %.preheader206.us.new ]
  %indvars.iv280.unr = phi i64 [ 1, %.preheader206.us ], [ %indvars.iv.next281.3, %.preheader206.us.new ]
  br i1 %lcmp.mod.not, label %._crit_edge219.us, label %.epil.preheader

.epil.preheader:                                  ; preds = %._crit_edge219.us.unr-lcssa, %.epil.preheader
  %30 = phi i32 [ %33, %.epil.preheader ], [ %.unr, %._crit_edge219.us.unr-lcssa ]
  %indvars.iv280.epil = phi i64 [ %indvars.iv.next281.epil, %.epil.preheader ], [ %indvars.iv280.unr, %._crit_edge219.us.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader ], [ 0, %._crit_edge219.us.unr-lcssa ]
  %31 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %indvars.iv285, i64 %indvars.iv280.epil
  %32 = load i32, ptr %31, align 4, !tbaa !5
  %33 = add nsw i32 %32, %30
  store i32 %33, ptr %31, align 4, !tbaa !5
  %indvars.iv.next281.epil = add nuw nsw i64 %indvars.iv280.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %._crit_edge219.us, label %.epil.preheader, !llvm.loop !11

._crit_edge219.us:                                ; preds = %.epil.preheader, %._crit_edge219.us.unr-lcssa
  %indvars.iv.next286 = add nuw nsw i64 %indvars.iv285, 1
  %exitcond289.not = icmp eq i64 %indvars.iv.next286, %wide.trip.count288
  br i1 %exitcond289.not, label %.preheader205, label %.preheader206.us, !llvm.loop !13

.lr.ph216:                                        ; preds = %0, %51
  %indvars.iv277 = phi i64 [ %indvars.iv.next278, %51 ], [ 0, %0 ]
  %34 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv277
  %35 = tail call i32 (ptr, ...) @__isoc99_scanf(ptr noundef nonnull @.str.1, ptr noundef nonnull %34)
  %36 = load i32, ptr @m, align 4, !tbaa !5
  %37 = icmp sgt i32 %36, 0
  br i1 %37, label %.lr.ph.preheader, label %51

.lr.ph.preheader:                                 ; preds = %.lr.ph216
  %tot.promoted = load i32, ptr @tot, align 4, !tbaa !5
  %wide.trip.count = zext nneg i32 %36 to i64
  %min.iters.check = icmp ult i32 %36, 8
  br i1 %min.iters.check, label %.lr.ph.preheader503, label %vector.ph

.lr.ph.preheader503:                              ; preds = %middle.block, %.lr.ph.preheader
  %indvars.iv.ph = phi i64 [ 0, %.lr.ph.preheader ], [ %n.vec, %middle.block ]
  %.ph = phi i32 [ %tot.promoted, %.lr.ph.preheader ], [ %50, %middle.block ]
  br label %.lr.ph

vector.ph:                                        ; preds = %.lr.ph.preheader
  %n.vec = and i64 %wide.trip.count, 2147483640
  %38 = insertelement <4 x i32> <i32 poison, i32 0, i32 0, i32 0>, i32 %tot.promoted, 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> [ %38, %vector.ph ], [ %47, %vector.body ]
  %vec.phi389 = phi <4 x i32> [ zeroinitializer, %vector.ph ], [ %48, %vector.body ]
  %39 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv277, i64 %index
  %40 = getelementptr inbounds i8, ptr %39, i64 4
  %wide.load = load <4 x i8>, ptr %39, align 4, !tbaa !14
  %wide.load390 = load <4 x i8>, ptr %40, align 4, !tbaa !14
  %41 = icmp eq <4 x i8> %wide.load, <i8 119, i8 119, i8 119, i8 119>
  %42 = icmp eq <4 x i8> %wide.load390, <i8 119, i8 119, i8 119, i8 119>
  %43 = zext <4 x i1> %41 to <4 x i32>
  %44 = zext <4 x i1> %42 to <4 x i32>
  %45 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %indvars.iv277, i64 %index
  %46 = getelementptr inbounds i8, ptr %45, i64 16
  store <4 x i32> %43, ptr %45, align 16, !tbaa !5
  store <4 x i32> %44, ptr %46, align 16, !tbaa !5
  %47 = add <4 x i32> %vec.phi, %43
  %48 = add <4 x i32> %vec.phi389, %44
  %index.next = add nuw i64 %index, 8
  %49 = icmp eq i64 %index.next, %n.vec
  br i1 %49, label %middle.block, label %vector.body, !llvm.loop !15

middle.block:                                     ; preds = %vector.body
  %bin.rdx = add <4 x i32> %48, %47
  %50 = tail call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %bin.rdx)
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count
  br i1 %cmp.n, label %._crit_edge, label %.lr.ph.preheader503

._crit_edge:                                      ; preds = %.lr.ph, %middle.block
  %.lcssa386 = phi i32 [ %50, %middle.block ], [ %61, %.lr.ph ]
  store i32 %.lcssa386, ptr @tot, align 4, !tbaa !5
  br label %51

51:                                               ; preds = %._crit_edge, %.lr.ph216
  %indvars.iv.next278 = add nuw nsw i64 %indvars.iv277, 1
  %52 = load i32, ptr @n, align 4, !tbaa !5
  %53 = sext i32 %52 to i64
  %54 = icmp slt i64 %indvars.iv.next278, %53
  br i1 %54, label %.lr.ph216, label %.preheader207, !llvm.loop !18

.lr.ph:                                           ; preds = %.lr.ph.preheader503, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ %indvars.iv.ph, %.lr.ph.preheader503 ]
  %55 = phi i32 [ %61, %.lr.ph ], [ %.ph, %.lr.ph.preheader503 ]
  %56 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv277, i64 %indvars.iv
  %57 = load i8, ptr %56, align 1, !tbaa !14
  %58 = icmp eq i8 %57, 119
  %59 = zext i1 %58 to i32
  %60 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %indvars.iv277, i64 %indvars.iv
  store i32 %59, ptr %60, align 4, !tbaa !5
  %61 = add nsw i32 %55, %59
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !19

.preheader205:                                    ; preds = %._crit_edge219.us, %.preheader206.lr.ph, %.preheader207.thread, %.preheader207
  %62 = phi i1 [ false, %.preheader207.thread ], [ false, %.preheader207 ], [ true, %.preheader206.lr.ph ], [ %12, %._crit_edge219.us ]
  %63 = phi i32 [ %10, %.preheader207.thread ], [ %52, %.preheader207 ], [ %52, %.preheader206.lr.ph ], [ %52, %._crit_edge219.us ]
  %.pre342359 = phi i32 [ %.pre342.pre, %.preheader207.thread ], [ %36, %.preheader207 ], [ %36, %.preheader206.lr.ph ], [ %36, %._crit_edge219.us ]
  %64 = icmp sgt i32 %.pre342359, 0
  %65 = icmp sgt i32 %63, 1
  %or.cond = and i1 %64, %65
  br i1 %or.cond, label %.preheader204.us.preheader, label %._crit_edge225

.preheader204.us.preheader:                       ; preds = %.preheader205
  %wide.trip.count298 = zext nneg i32 %.pre342359 to i64
  %wide.trip.count293 = zext nneg i32 %63 to i64
  %66 = add nsw i64 %wide.trip.count293, -1
  %67 = add nsw i64 %wide.trip.count293, -2
  %xtraiter510 = and i64 %66, 3
  %68 = icmp ult i64 %67, 3
  %unroll_iter514 = and i64 %66, -4
  %lcmp.mod513.not = icmp eq i64 %xtraiter510, 0
  br label %.preheader204.us

.preheader204.us:                                 ; preds = %.preheader204.us.preheader, %._crit_edge223.us
  %indvars.iv295 = phi i64 [ 0, %.preheader204.us.preheader ], [ %indvars.iv.next296, %._crit_edge223.us ]
  %.phi.trans.insert343 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 0, i64 %indvars.iv295
  %.pre344 = load i32, ptr %.phi.trans.insert343, align 4, !tbaa !5
  br i1 %68, label %._crit_edge223.us.unr-lcssa, label %.preheader204.us.new

.preheader204.us.new:                             ; preds = %.preheader204.us, %.preheader204.us.new
  %69 = phi i32 [ %81, %.preheader204.us.new ], [ %.pre344, %.preheader204.us ]
  %indvars.iv290 = phi i64 [ %indvars.iv.next291.3, %.preheader204.us.new ], [ 1, %.preheader204.us ]
  %niter515 = phi i64 [ %niter515.next.3, %.preheader204.us.new ], [ 0, %.preheader204.us ]
  %70 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %indvars.iv290, i64 %indvars.iv295
  %71 = load i32, ptr %70, align 4, !tbaa !5
  %72 = add nsw i32 %71, %69
  store i32 %72, ptr %70, align 4, !tbaa !5
  %indvars.iv.next291 = add nuw nsw i64 %indvars.iv290, 1
  %73 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %indvars.iv.next291, i64 %indvars.iv295
  %74 = load i32, ptr %73, align 4, !tbaa !5
  %75 = add nsw i32 %74, %72
  store i32 %75, ptr %73, align 4, !tbaa !5
  %indvars.iv.next291.1 = add nuw nsw i64 %indvars.iv290, 2
  %76 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %indvars.iv.next291.1, i64 %indvars.iv295
  %77 = load i32, ptr %76, align 4, !tbaa !5
  %78 = add nsw i32 %77, %75
  store i32 %78, ptr %76, align 4, !tbaa !5
  %indvars.iv.next291.2 = add nuw nsw i64 %indvars.iv290, 3
  %79 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %indvars.iv.next291.2, i64 %indvars.iv295
  %80 = load i32, ptr %79, align 4, !tbaa !5
  %81 = add nsw i32 %80, %78
  store i32 %81, ptr %79, align 4, !tbaa !5
  %indvars.iv.next291.3 = add nuw nsw i64 %indvars.iv290, 4
  %niter515.next.3 = add i64 %niter515, 4
  %niter515.ncmp.3 = icmp eq i64 %niter515.next.3, %unroll_iter514
  br i1 %niter515.ncmp.3, label %._crit_edge223.us.unr-lcssa, label %.preheader204.us.new, !llvm.loop !20

._crit_edge223.us.unr-lcssa:                      ; preds = %.preheader204.us.new, %.preheader204.us
  %.unr512 = phi i32 [ %.pre344, %.preheader204.us ], [ %81, %.preheader204.us.new ]
  %indvars.iv290.unr = phi i64 [ 1, %.preheader204.us ], [ %indvars.iv.next291.3, %.preheader204.us.new ]
  br i1 %lcmp.mod513.not, label %._crit_edge223.us, label %.epil.preheader509

.epil.preheader509:                               ; preds = %._crit_edge223.us.unr-lcssa, %.epil.preheader509
  %82 = phi i32 [ %85, %.epil.preheader509 ], [ %.unr512, %._crit_edge223.us.unr-lcssa ]
  %indvars.iv290.epil = phi i64 [ %indvars.iv.next291.epil, %.epil.preheader509 ], [ %indvars.iv290.unr, %._crit_edge223.us.unr-lcssa ]
  %epil.iter511 = phi i64 [ %epil.iter511.next, %.epil.preheader509 ], [ 0, %._crit_edge223.us.unr-lcssa ]
  %83 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %indvars.iv290.epil, i64 %indvars.iv295
  %84 = load i32, ptr %83, align 4, !tbaa !5
  %85 = add nsw i32 %84, %82
  store i32 %85, ptr %83, align 4, !tbaa !5
  %indvars.iv.next291.epil = add nuw nsw i64 %indvars.iv290.epil, 1
  %epil.iter511.next = add i64 %epil.iter511, 1
  %epil.iter511.cmp.not = icmp eq i64 %epil.iter511.next, %xtraiter510
  br i1 %epil.iter511.cmp.not, label %._crit_edge223.us, label %.epil.preheader509, !llvm.loop !21

._crit_edge223.us:                                ; preds = %.epil.preheader509, %._crit_edge223.us.unr-lcssa
  %indvars.iv.next296 = add nuw nsw i64 %indvars.iv295, 1
  %exitcond299.not = icmp eq i64 %indvars.iv.next296, %wide.trip.count298
  br i1 %exitcond299.not, label %._crit_edge225, label %.preheader204.us, !llvm.loop !22

._crit_edge225:                                   ; preds = %._crit_edge223.us, %.preheader205
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %1) #5
  store i32 1000000000, ptr %1, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %2) #5
  store i32 0, ptr %2, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #5
  store i32 1000000000, ptr %3, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #5
  store i32 0, ptr %4, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #5
  store i32 0, ptr %5, align 4, !tbaa !5
  br i1 %62, label %.lr.ph231, label %._crit_edge232

._crit_edge232.loopexit:                          ; preds = %._crit_edge229
  %.pre349.pre = load i32, ptr %2, align 4
  %.pre350.pre = load i32, ptr %1, align 4
  %.pre351.pre = load i32, ptr %3, align 4
  br label %._crit_edge232

._crit_edge232:                                   ; preds = %._crit_edge232.loopexit, %._crit_edge225
  %.pre351 = phi i32 [ %.pre351.pre, %._crit_edge232.loopexit ], [ 1000000000, %._crit_edge225 ]
  %.pre350 = phi i32 [ %.pre350.pre, %._crit_edge232.loopexit ], [ 1000000000, %._crit_edge225 ]
  %.pre349 = phi i32 [ %.pre349.pre, %._crit_edge232.loopexit ], [ 0, %._crit_edge225 ]
  %86 = phi i32 [ %108, %._crit_edge232.loopexit ], [ 0, %._crit_edge225 ]
  %87 = phi i32 [ %111, %._crit_edge232.loopexit ], [ %.pre342359, %._crit_edge225 ]
  %88 = phi i32 [ %109, %._crit_edge232.loopexit ], [ %63, %._crit_edge225 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #5
  %.not152237 = icmp sgt i32 %88, 0
  %.not233 = icmp sgt i32 %87, 0
  %or.cond374 = select i1 %.not152237, i1 %.not233, i1 false
  br i1 %or.cond374, label %.preheader203.us.preheader, label %.critedge169

.preheader203.us.preheader:                       ; preds = %._crit_edge232
  %89 = zext i32 %.pre351 to i64
  %90 = zext i32 %86 to i64
  %91 = zext i32 %.pre350 to i64
  %92 = zext i32 %.pre349 to i64
  %wide.trip.count308 = zext nneg i32 %88 to i64
  %wide.trip.count303 = zext nneg i32 %87 to i64
  br label %.preheader203.us

.preheader203.us:                                 ; preds = %.preheader203.us.preheader, %..critedge_crit_edge.us
  %indvars.iv305 = phi i64 [ 0, %.preheader203.us.preheader ], [ %indvars.iv.next306, %..critedge_crit_edge.us ]
  %93 = icmp eq i64 %indvars.iv305, %91
  %94 = icmp eq i64 %indvars.iv305, %92
  %.fr.us = freeze i1 %94
  %.fr236.us = freeze i1 %93
  %95 = or i1 %.fr.us, %.fr236.us
  br i1 %95, label %..critedge_crit_edge.us, label %.lr.ph235.split.us242

96:                                               ; preds = %.lr.ph235.split.us242
  %indvars.iv.next301 = add nuw nsw i64 %indvars.iv300, 1
  %exitcond304.not = icmp eq i64 %indvars.iv.next301, %wide.trip.count303
  br i1 %exitcond304.not, label %..critedge_crit_edge.us, label %.lr.ph235.split.us242, !llvm.loop !23

.lr.ph235.split.us242:                            ; preds = %.preheader203.us, %96
  %indvars.iv300 = phi i64 [ %indvars.iv.next301, %96 ], [ 0, %.preheader203.us ]
  %97 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv305, i64 %indvars.iv300
  %98 = load i8, ptr %97, align 1, !tbaa !14
  %99 = icmp ne i8 %98, 119
  %100 = icmp eq i64 %indvars.iv300, %89
  %or.cond165.us = select i1 %99, i1 true, i1 %100
  %101 = icmp eq i64 %indvars.iv300, %90
  %or.cond167.us = select i1 %or.cond165.us, i1 true, i1 %101
  br i1 %or.cond167.us, label %96, label %.split.us

..critedge_crit_edge.us:                          ; preds = %96, %.preheader203.us
  %indvars.iv.next306 = add nuw nsw i64 %indvars.iv305, 1
  %exitcond309.not = icmp eq i64 %indvars.iv.next306, %wide.trip.count308
  br i1 %exitcond309.not, label %.critedge169, label %.preheader203.us, !llvm.loop !24

.lr.ph231:                                        ; preds = %._crit_edge225, %._crit_edge229
  %102 = phi i32 [ %108, %._crit_edge229 ], [ 0, %._crit_edge225 ]
  %103 = phi i32 [ %109, %._crit_edge229 ], [ %63, %._crit_edge225 ]
  %104 = phi i32 [ %113, %._crit_edge229 ], [ 0, %._crit_edge225 ]
  %105 = phi i32 [ %111, %._crit_edge229 ], [ %.pre342359, %._crit_edge225 ]
  %106 = phi i32 [ %112, %._crit_edge229 ], [ %.pre342359, %._crit_edge225 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %6) #5
  store i32 0, ptr %6, align 4, !tbaa !5
  %107 = icmp sgt i32 %106, 0
  br i1 %107, label %.lr.ph228, label %._crit_edge229

._crit_edge229.loopexit:                          ; preds = %132
  %.pre347 = load i32, ptr %5, align 4, !tbaa !5
  %.pre348 = load i32, ptr @n, align 4, !tbaa !5
  br label %._crit_edge229

._crit_edge229:                                   ; preds = %._crit_edge229.loopexit, %.lr.ph231
  %108 = phi i32 [ %133, %._crit_edge229.loopexit ], [ %102, %.lr.ph231 ]
  %109 = phi i32 [ %.pre348, %._crit_edge229.loopexit ], [ %103, %.lr.ph231 ]
  %110 = phi i32 [ %.pre347, %._crit_edge229.loopexit ], [ %104, %.lr.ph231 ]
  %111 = phi i32 [ %134, %._crit_edge229.loopexit ], [ %105, %.lr.ph231 ]
  %112 = phi i32 [ %134, %._crit_edge229.loopexit ], [ %106, %.lr.ph231 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %6) #5
  %113 = add nsw i32 %110, 1
  store i32 %113, ptr %5, align 4, !tbaa !5
  %114 = icmp slt i32 %113, %109
  br i1 %114, label %.lr.ph231, label %._crit_edge232.loopexit, !llvm.loop !25

.lr.ph228:                                        ; preds = %.lr.ph231, %132
  %115 = phi i32 [ %133, %132 ], [ %102, %.lr.ph231 ]
  %116 = phi i32 [ %134, %132 ], [ %105, %.lr.ph231 ]
  %storemerge160226 = phi i32 [ %136, %132 ], [ 0, %.lr.ph231 ]
  %117 = load i32, ptr %5, align 4, !tbaa !5
  %118 = sext i32 %117 to i64
  %119 = sext i32 %storemerge160226 to i64
  %120 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %118, i64 %119
  %121 = load i8, ptr %120, align 1, !tbaa !14
  %122 = icmp eq i8 %121, 119
  br i1 %122, label %123, label %132

123:                                              ; preds = %.lr.ph228
  %124 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %1, ptr noundef nonnull align 4 dereferenceable(4) %5)
  %125 = load i32, ptr %124, align 4, !tbaa !5
  store i32 %125, ptr %1, align 4, !tbaa !5
  %126 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %2, ptr noundef nonnull align 4 dereferenceable(4) %5)
  %127 = load i32, ptr %126, align 4, !tbaa !5
  store i32 %127, ptr %2, align 4, !tbaa !5
  %128 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %3, ptr noundef nonnull align 4 dereferenceable(4) %6)
  %129 = load i32, ptr %128, align 4, !tbaa !5
  store i32 %129, ptr %3, align 4, !tbaa !5
  %130 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %4, ptr noundef nonnull align 4 dereferenceable(4) %6)
  %131 = load i32, ptr %130, align 4, !tbaa !5
  store i32 %131, ptr %4, align 4, !tbaa !5
  %.pre345 = load i32, ptr %6, align 4, !tbaa !5
  %.pre346 = load i32, ptr @m, align 4, !tbaa !5
  br label %132

132:                                              ; preds = %.lr.ph228, %123
  %133 = phi i32 [ %115, %.lr.ph228 ], [ %131, %123 ]
  %134 = phi i32 [ %116, %.lr.ph228 ], [ %.pre346, %123 ]
  %135 = phi i32 [ %storemerge160226, %.lr.ph228 ], [ %.pre345, %123 ]
  %136 = add nsw i32 %135, 1
  store i32 %136, ptr %6, align 4, !tbaa !5
  %137 = icmp slt i32 %136, %134
  br i1 %137, label %.lr.ph228, label %._crit_edge229.loopexit, !llvm.loop !26

.split.us:                                        ; preds = %.lr.ph235.split.us242
  %138 = call i32 @puts(ptr noundef nonnull dereferenceable(1) @.str.2)
  br label %512

.critedge169:                                     ; preds = %..critedge_crit_edge.us, %._crit_edge232
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #5
  %139 = add i32 %.pre349, 1
  %140 = sub i32 %139, %.pre350
  store i32 %140, ptr %7, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #5
  %141 = add i32 %86, 1
  %142 = sub i32 %141, %.pre351
  store i32 %142, ptr %8, align 4, !tbaa !5
  %143 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4) %7, ptr noundef nonnull align 4 dereferenceable(4) %8)
  %144 = load i32, ptr %143, align 4, !tbaa !5
  %145 = load i32, ptr @n, align 4, !tbaa !5
  %146 = icmp sgt i32 %144, %145
  %147 = load i32, ptr @m, align 4
  %148 = icmp sgt i32 %144, %147
  %or.cond171 = select i1 %146, i1 true, i1 %148
  br i1 %or.cond171, label %.loopexit.sink.split, label %149

149:                                              ; preds = %.critedge169
  %150 = load i32, ptr %7, align 4, !tbaa !5
  %151 = icmp sgt i32 %144, %150
  br i1 %151, label %.lr.ph251, label %249

.lr.ph251:                                        ; preds = %149
  store i32 -1, ptr %2, align 4, !tbaa !5
  store i32 -1, ptr %1, align 4, !tbaa !5
  %152 = load i32, ptr %4, align 4, !tbaa !5
  %153 = sext i32 %152 to i64
  %154 = load i32, ptr %3, align 4, !tbaa !5
  %155 = icmp sgt i32 %154, 1
  %156 = add nsw i32 %154, -1
  %157 = zext nneg i32 %156 to i64
  %158 = load i32, ptr @tot, align 4, !tbaa !5
  %159 = add nsw i32 %152, -1
  %160 = sext i32 %159 to i64
  %161 = sext i32 %154 to i64
  %162 = sext i32 %144 to i64
  %163 = sext i32 %145 to i64
  %164 = add nsw i64 %162, -1
  %165 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %164, i64 %153
  %166 = load i32, ptr %165, align 4, !tbaa !5
  br i1 %155, label %167, label %.thread179.peel

167:                                              ; preds = %.lr.ph251
  %168 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %164, i64 %157
  %169 = load i32, ptr %168, align 4, !tbaa !5
  br label %.thread179.peel

.thread179.peel:                                  ; preds = %.lr.ph251, %167
  %170 = phi i32 [ %169, %167 ], [ 0, %.lr.ph251 ]
  %171 = sub i32 %166, %170
  %172 = icmp eq i32 %171, %158
  br i1 %172, label %173, label %187

173:                                              ; preds = %.thread179.peel
  %174 = add nsw i64 %162, -2
  %175 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %174, i64 %160
  %176 = load i32, ptr %175, align 4, !tbaa !5
  %177 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %174, i64 %161
  %178 = load i32, ptr %177, align 4, !tbaa !5
  %179 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 0, i64 %160
  %180 = load i32, ptr %179, align 4, !tbaa !5
  %181 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 0, i64 %161
  %182 = load i32, ptr %181, align 4, !tbaa !5
  %183 = add i32 %178, %180
  %184 = sub i32 %176, %183
  %185 = sub i32 0, %182
  %186 = icmp eq i32 %184, %185
  br i1 %186, label %.thread181, label %187

187:                                              ; preds = %173, %.thread179.peel
  %.not154.peel.not = icmp slt i32 %144, %145
  br i1 %.not154.peel.not, label %.peel.next322, label %.loopexit.sink.split

.peel.next322:                                    ; preds = %187
  %188 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %162, i64 %153
  %189 = load i32, ptr %188, align 4, !tbaa !5
  br i1 %155, label %190, label %.thread179.peel324

190:                                              ; preds = %.peel.next322
  %191 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %162, i64 %157
  %192 = load i32, ptr %191, align 4, !tbaa !5
  br label %.thread179.peel324

.thread179.peel324:                               ; preds = %.peel.next322, %190
  %193 = phi i32 [ %192, %190 ], [ 0, %.peel.next322 ]
  %194 = sub i32 %189, %193
  %195 = icmp eq i32 %194, %158
  br i1 %195, label %196, label %210

196:                                              ; preds = %.thread179.peel324
  %197 = add nsw i64 %162, -1
  %198 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %197, i64 %160
  %199 = load i32, ptr %198, align 4, !tbaa !5
  %200 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %197, i64 %161
  %201 = load i32, ptr %200, align 4, !tbaa !5
  %202 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 1, i64 %160
  %203 = load i32, ptr %202, align 4, !tbaa !5
  %204 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 1, i64 %161
  %205 = load i32, ptr %204, align 4, !tbaa !5
  %206 = add i32 %201, %203
  %207 = sub i32 %199, %206
  %208 = sub i32 0, %205
  %209 = icmp eq i32 %207, %208
  br i1 %209, label %.thread181, label %210

210:                                              ; preds = %196, %.thread179.peel324
  %211 = add nsw i64 %162, 2
  %.not154.peel327 = icmp sgt i64 %211, %163
  br i1 %.not154.peel327, label %.loopexit.sink.split, label %.peel.next323

.peel.next323:                                    ; preds = %210
  %invariant.op373 = sub nsw i64 %163, %162
  br label %212

212:                                              ; preds = %.peel.next323, %248
  %indvars.iv318 = phi i64 [ 2, %.peel.next323 ], [ %indvars.iv.next319, %248 ]
  %213 = add nsw i64 %indvars.iv318, %162
  %214 = add nsw i64 %213, -1
  %215 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %214, i64 %153
  %216 = load i32, ptr %215, align 4, !tbaa !5
  br i1 %155, label %218, label %.thread180

.thread180:                                       ; preds = %212
  %217 = add nsw i64 %indvars.iv318, -1
  br label %224

218:                                              ; preds = %212
  %219 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %214, i64 %157
  %220 = load i32, ptr %219, align 4, !tbaa !5
  %221 = add nsw i64 %indvars.iv318, -1
  %222 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %221, i64 %157
  %223 = load i32, ptr %222, align 4, !tbaa !5
  br label %224

224:                                              ; preds = %.thread180, %218
  %225 = phi i32 [ %220, %218 ], [ 0, %.thread180 ]
  %.pn = phi i64 [ %221, %218 ], [ %217, %.thread180 ]
  %226 = phi i32 [ %223, %218 ], [ 0, %.thread180 ]
  %.in = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %.pn, i64 %153
  %227 = load i32, ptr %.in, align 4, !tbaa !5
  %228 = add i32 %225, %227
  %229 = sub i32 %216, %228
  %230 = add nsw i32 %229, %226
  %231 = icmp eq i32 %230, %158
  br i1 %231, label %232, label %248

232:                                              ; preds = %224
  %233 = add nsw i64 %213, -2
  %234 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %233, i64 %160
  %235 = load i32, ptr %234, align 4, !tbaa !5
  %236 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %233, i64 %161
  %237 = load i32, ptr %236, align 4, !tbaa !5
  %238 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %indvars.iv318, i64 %160
  %239 = load i32, ptr %238, align 4, !tbaa !5
  %240 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %indvars.iv318, i64 %161
  %241 = load i32, ptr %240, align 4, !tbaa !5
  %242 = add i32 %237, %239
  %243 = sub i32 %235, %242
  %244 = sub i32 0, %241
  %245 = icmp eq i32 %243, %244
  br i1 %245, label %.thread181.loopexit, label %248

.thread181.loopexit:                              ; preds = %232
  %246 = trunc nuw nsw i64 %indvars.iv318 to i32
  br label %.thread181

.thread181:                                       ; preds = %.thread181.loopexit, %196, %173
  %.0125249.lcssa.wide = phi i32 [ 0, %173 ], [ 1, %196 ], [ %246, %.thread181.loopexit ]
  %.lcssa268.wide = phi i64 [ %164, %173 ], [ %162, %196 ], [ %214, %.thread181.loopexit ]
  %247 = trunc nsw i64 %.lcssa268.wide to i32
  store i32 %.0125249.lcssa.wide, ptr %1, align 4, !tbaa !5
  store i32 %247, ptr %2, align 4, !tbaa !5
  br label %350

248:                                              ; preds = %232, %224
  %indvars.iv.next319 = add nuw nsw i64 %indvars.iv318, 1
  %.not154.not = icmp slt i64 %indvars.iv318, %invariant.op373
  br i1 %.not154.not, label %212, label %.loopexit.sink.split, !llvm.loop !27

249:                                              ; preds = %149
  %250 = load i32, ptr %8, align 4, !tbaa !5
  %251 = icmp sgt i32 %144, %250
  br i1 %251, label %252, label %350

252:                                              ; preds = %249
  store i32 -1, ptr %4, align 4, !tbaa !5
  store i32 -1, ptr %3, align 4, !tbaa !5
  %253 = load i32, ptr %2, align 4, !tbaa !5
  %254 = sext i32 %253 to i64
  %255 = load i32, ptr %1, align 4, !tbaa !5
  %256 = icmp slt i32 %255, 2
  %257 = add nsw i32 %255, -1
  %258 = zext nneg i32 %257 to i64
  %259 = load i32, ptr @tot, align 4, !tbaa !5
  %260 = add nsw i32 %253, -1
  %261 = sext i32 %260 to i64
  %262 = sext i32 %255 to i64
  %263 = sext i32 %144 to i64
  %264 = sext i32 %147 to i64
  %265 = add nsw i64 %263, -1
  %266 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %254, i64 %265
  %267 = load i32, ptr %266, align 4, !tbaa !5
  br i1 %256, label %.thread182.peel, label %268

268:                                              ; preds = %252
  %269 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %258, i64 %265
  %270 = load i32, ptr %269, align 4, !tbaa !5
  br label %.thread182.peel

.thread182.peel:                                  ; preds = %268, %252
  %271 = phi i32 [ %270, %268 ], [ 0, %252 ]
  %272 = sub i32 %267, %271
  %273 = icmp eq i32 %272, %259
  br i1 %273, label %274, label %288

274:                                              ; preds = %.thread182.peel
  %275 = add nsw i64 %263, -2
  %276 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %261, i64 %275
  %277 = load i32, ptr %276, align 4, !tbaa !5
  %278 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %261, i64 0
  %279 = load i32, ptr %278, align 16, !tbaa !5
  %280 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %262, i64 %275
  %281 = load i32, ptr %280, align 4, !tbaa !5
  %282 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %262, i64 0
  %283 = load i32, ptr %282, align 16, !tbaa !5
  %284 = add i32 %279, %281
  %285 = sub i32 %277, %284
  %286 = sub i32 0, %283
  %287 = icmp eq i32 %285, %286
  br i1 %287, label %.thread188, label %288

288:                                              ; preds = %274, %.thread182.peel
  %.not153.peel.not = icmp slt i32 %144, %147
  br i1 %.not153.peel.not, label %289, label %.loopexit.sink.split

289:                                              ; preds = %288
  %290 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %254, i64 %263
  %291 = load i32, ptr %290, align 4, !tbaa !5
  br i1 %256, label %.thread182.peel314, label %292

292:                                              ; preds = %289
  %293 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %258, i64 %263
  %294 = load i32, ptr %293, align 4, !tbaa !5
  br label %.thread182.peel314

.thread182.peel314:                               ; preds = %292, %289
  %295 = phi i32 [ %294, %292 ], [ 0, %289 ]
  %296 = sub i32 %291, %295
  %297 = icmp eq i32 %296, %259
  br i1 %297, label %298, label %312

298:                                              ; preds = %.thread182.peel314
  %299 = add nsw i64 %263, -1
  %300 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %261, i64 %299
  %301 = load i32, ptr %300, align 4, !tbaa !5
  %302 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %261, i64 1
  %303 = load i32, ptr %302, align 4, !tbaa !5
  %304 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %262, i64 %299
  %305 = load i32, ptr %304, align 4, !tbaa !5
  %306 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %262, i64 1
  %307 = load i32, ptr %306, align 4, !tbaa !5
  %308 = add i32 %303, %305
  %309 = sub i32 %301, %308
  %310 = sub i32 0, %307
  %311 = icmp eq i32 %309, %310
  br i1 %311, label %.thread188, label %312

312:                                              ; preds = %298, %.thread182.peel314
  %313 = add nsw i64 %263, 2
  %.not153.peel316 = icmp sgt i64 %313, %264
  br i1 %.not153.peel316, label %.loopexit.sink.split, label %.peel.next313

.peel.next313:                                    ; preds = %312
  %invariant.op = sub nsw i64 %264, %263
  br label %314

314:                                              ; preds = %.peel.next313, %349
  %indvars.iv310 = phi i64 [ 2, %.peel.next313 ], [ %indvars.iv.next311, %349 ]
  %315 = add nsw i64 %indvars.iv310, %263
  %316 = add nsw i64 %315, -1
  %317 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %254, i64 %316
  %318 = load i32, ptr %317, align 4, !tbaa !5
  %319 = add nsw i64 %indvars.iv310, -1
  %320 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %254, i64 %319
  %321 = load i32, ptr %320, align 4, !tbaa !5
  br i1 %256, label %.thread182, label %322

322:                                              ; preds = %314
  %323 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %258, i64 %316
  %324 = load i32, ptr %323, align 4, !tbaa !5
  %325 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %258, i64 %319
  %326 = load i32, ptr %325, align 4, !tbaa !5
  br label %.thread182

.thread182:                                       ; preds = %314, %322
  %327 = phi i32 [ %324, %322 ], [ 0, %314 ]
  %328 = phi i32 [ %326, %322 ], [ 0, %314 ]
  %329 = add i32 %321, %327
  %330 = sub i32 %318, %329
  %331 = add nsw i32 %330, %328
  %332 = icmp eq i32 %331, %259
  br i1 %332, label %333, label %349

333:                                              ; preds = %.thread182
  %334 = add nsw i64 %315, -2
  %335 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %261, i64 %334
  %336 = load i32, ptr %335, align 4, !tbaa !5
  %337 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %261, i64 %indvars.iv310
  %338 = load i32, ptr %337, align 4, !tbaa !5
  %339 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %262, i64 %334
  %340 = load i32, ptr %339, align 4, !tbaa !5
  %341 = getelementptr inbounds [2100 x [2100 x i32]], ptr @sum, i64 0, i64 %262, i64 %indvars.iv310
  %342 = load i32, ptr %341, align 4, !tbaa !5
  %343 = add i32 %338, %340
  %344 = sub i32 %336, %343
  %345 = sub i32 0, %342
  %346 = icmp eq i32 %344, %345
  br i1 %346, label %.thread188.loopexit, label %349

.thread188.loopexit:                              ; preds = %333
  %347 = trunc nuw nsw i64 %indvars.iv310 to i32
  br label %.thread188

.thread188:                                       ; preds = %.thread188.loopexit, %298, %274
  %.0124244.lcssa.wide = phi i32 [ 0, %274 ], [ 1, %298 ], [ %347, %.thread188.loopexit ]
  %.lcssa271.wide = phi i64 [ %265, %274 ], [ %263, %298 ], [ %316, %.thread188.loopexit ]
  %348 = trunc nsw i64 %.lcssa271.wide to i32
  store i32 %.0124244.lcssa.wide, ptr %3, align 4, !tbaa !5
  store i32 %348, ptr %4, align 4, !tbaa !5
  br label %350

349:                                              ; preds = %333, %.thread182
  %indvars.iv.next311 = add nuw nsw i64 %indvars.iv310, 1
  %.not153.not = icmp slt i64 %indvars.iv310, %invariant.op
  br i1 %.not153.not, label %314, label %.loopexit.sink.split, !llvm.loop !29

350:                                              ; preds = %.thread188, %.thread181, %249
  %351 = load i32, ptr %1, align 4, !tbaa !5
  %352 = load i32, ptr %2, align 4, !tbaa !5
  %.not155257 = icmp sgt i32 %351, %352
  br i1 %.not155257, label %.preheader, label %.lr.ph261

.lr.ph261:                                        ; preds = %350
  %353 = load i32, ptr %3, align 4
  %354 = sext i32 %353 to i64
  %355 = load i32, ptr %4, align 4
  %356 = sext i32 %355 to i64
  %.not158253 = icmp sgt i32 %353, %355
  %357 = add i32 %355, 1
  %358 = sext i32 %351 to i64
  %sext = sext i32 %352 to i64
  %359 = add i32 %352, 1
  %360 = sub i32 %355, %353
  %361 = zext i32 %360 to i64
  %362 = add nuw nsw i64 %361, 1
  %min.iters.check393 = icmp ult i32 %360, 7
  %min.iters.check395 = icmp ult i32 %360, 31
  %n.vec398 = and i64 %362, 8589934560
  %cmp.n466 = icmp eq i64 %362, %n.vec398
  %ind.end469 = add nsw i64 %n.vec398, %354
  %n.vec.remaining = and i64 %362, 24
  %min.epilog.iters.check = icmp eq i64 %n.vec.remaining, 0
  %n.vec468 = and i64 %362, 8589934584
  %ind.end = add nsw i64 %n.vec468, %354
  %cmp.n491 = icmp eq i64 %362, %n.vec468
  br label %364

.preheader:                                       ; preds = %.loopexit202, %350
  %363 = icmp sgt i32 %145, 0
  br i1 %363, label %.lr.ph263, label %.loopexit

364:                                              ; preds = %.lr.ph261, %.loopexit202
  %indvars.iv333 = phi i64 [ %358, %.lr.ph261 ], [ %indvars.iv.next334, %.loopexit202 ]
  %365 = icmp eq i64 %indvars.iv333, %358
  %366 = icmp eq i64 %indvars.iv333, %sext
  %or.cond178 = or i1 %365, %366
  br i1 %or.cond178, label %367, label %498

367:                                              ; preds = %364
  br i1 %.not158253, label %.loopexit202, label %iter.check

iter.check:                                       ; preds = %367
  br i1 %min.iters.check393, label %.lr.ph256.preheader, label %vector.main.loop.iter.check

vector.main.loop.iter.check:                      ; preds = %iter.check
  br i1 %min.iters.check395, label %vec.epilog.ph, label %vector.body399

vector.body399:                                   ; preds = %vector.main.loop.iter.check, %pred.store.continue464
  %index400 = phi i64 [ %index.next465, %pred.store.continue464 ], [ 0, %vector.main.loop.iter.check ]
  %offset.idx = add i64 %index400, %354
  %368 = add i64 %offset.idx, 16
  %369 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %offset.idx
  %370 = getelementptr inbounds i8, ptr %369, i64 16
  %wide.load401 = load <16 x i8>, ptr %369, align 1, !tbaa !14
  %wide.load402 = load <16 x i8>, ptr %370, align 1, !tbaa !14
  %371 = icmp ne <16 x i8> %wide.load401, <i8 119, i8 119, i8 119, i8 119, i8 119, i8 119, i8 119, i8 119, i8 119, i8 119, i8 119, i8 119, i8 119, i8 119, i8 119, i8 119>
  %372 = icmp ne <16 x i8> %wide.load402, <i8 119, i8 119, i8 119, i8 119, i8 119, i8 119, i8 119, i8 119, i8 119, i8 119, i8 119, i8 119, i8 119, i8 119, i8 119, i8 119>
  %373 = extractelement <16 x i1> %371, i64 0
  br i1 %373, label %pred.store.if, label %pred.store.continue

pred.store.if:                                    ; preds = %vector.body399
  %374 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %offset.idx
  store i8 43, ptr %374, align 1, !tbaa !14
  br label %pred.store.continue

pred.store.continue:                              ; preds = %pred.store.if, %vector.body399
  %375 = extractelement <16 x i1> %371, i64 1
  br i1 %375, label %pred.store.if403, label %pred.store.continue404

pred.store.if403:                                 ; preds = %pred.store.continue
  %376 = add i64 %offset.idx, 1
  %377 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %376
  store i8 43, ptr %377, align 1, !tbaa !14
  br label %pred.store.continue404

pred.store.continue404:                           ; preds = %pred.store.if403, %pred.store.continue
  %378 = extractelement <16 x i1> %371, i64 2
  br i1 %378, label %pred.store.if405, label %pred.store.continue406

pred.store.if405:                                 ; preds = %pred.store.continue404
  %379 = add i64 %offset.idx, 2
  %380 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %379
  store i8 43, ptr %380, align 1, !tbaa !14
  br label %pred.store.continue406

pred.store.continue406:                           ; preds = %pred.store.if405, %pred.store.continue404
  %381 = extractelement <16 x i1> %371, i64 3
  br i1 %381, label %pred.store.if407, label %pred.store.continue408

pred.store.if407:                                 ; preds = %pred.store.continue406
  %382 = add i64 %offset.idx, 3
  %383 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %382
  store i8 43, ptr %383, align 1, !tbaa !14
  br label %pred.store.continue408

pred.store.continue408:                           ; preds = %pred.store.if407, %pred.store.continue406
  %384 = extractelement <16 x i1> %371, i64 4
  br i1 %384, label %pred.store.if409, label %pred.store.continue410

pred.store.if409:                                 ; preds = %pred.store.continue408
  %385 = add i64 %offset.idx, 4
  %386 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %385
  store i8 43, ptr %386, align 1, !tbaa !14
  br label %pred.store.continue410

pred.store.continue410:                           ; preds = %pred.store.if409, %pred.store.continue408
  %387 = extractelement <16 x i1> %371, i64 5
  br i1 %387, label %pred.store.if411, label %pred.store.continue412

pred.store.if411:                                 ; preds = %pred.store.continue410
  %388 = add i64 %offset.idx, 5
  %389 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %388
  store i8 43, ptr %389, align 1, !tbaa !14
  br label %pred.store.continue412

pred.store.continue412:                           ; preds = %pred.store.if411, %pred.store.continue410
  %390 = extractelement <16 x i1> %371, i64 6
  br i1 %390, label %pred.store.if413, label %pred.store.continue414

pred.store.if413:                                 ; preds = %pred.store.continue412
  %391 = add i64 %offset.idx, 6
  %392 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %391
  store i8 43, ptr %392, align 1, !tbaa !14
  br label %pred.store.continue414

pred.store.continue414:                           ; preds = %pred.store.if413, %pred.store.continue412
  %393 = extractelement <16 x i1> %371, i64 7
  br i1 %393, label %pred.store.if415, label %pred.store.continue416

pred.store.if415:                                 ; preds = %pred.store.continue414
  %394 = add i64 %offset.idx, 7
  %395 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %394
  store i8 43, ptr %395, align 1, !tbaa !14
  br label %pred.store.continue416

pred.store.continue416:                           ; preds = %pred.store.if415, %pred.store.continue414
  %396 = extractelement <16 x i1> %371, i64 8
  br i1 %396, label %pred.store.if417, label %pred.store.continue418

pred.store.if417:                                 ; preds = %pred.store.continue416
  %397 = add i64 %offset.idx, 8
  %398 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %397
  store i8 43, ptr %398, align 1, !tbaa !14
  br label %pred.store.continue418

pred.store.continue418:                           ; preds = %pred.store.if417, %pred.store.continue416
  %399 = extractelement <16 x i1> %371, i64 9
  br i1 %399, label %pred.store.if419, label %pred.store.continue420

pred.store.if419:                                 ; preds = %pred.store.continue418
  %400 = add i64 %offset.idx, 9
  %401 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %400
  store i8 43, ptr %401, align 1, !tbaa !14
  br label %pred.store.continue420

pred.store.continue420:                           ; preds = %pred.store.if419, %pred.store.continue418
  %402 = extractelement <16 x i1> %371, i64 10
  br i1 %402, label %pred.store.if421, label %pred.store.continue422

pred.store.if421:                                 ; preds = %pred.store.continue420
  %403 = add i64 %offset.idx, 10
  %404 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %403
  store i8 43, ptr %404, align 1, !tbaa !14
  br label %pred.store.continue422

pred.store.continue422:                           ; preds = %pred.store.if421, %pred.store.continue420
  %405 = extractelement <16 x i1> %371, i64 11
  br i1 %405, label %pred.store.if423, label %pred.store.continue424

pred.store.if423:                                 ; preds = %pred.store.continue422
  %406 = add i64 %offset.idx, 11
  %407 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %406
  store i8 43, ptr %407, align 1, !tbaa !14
  br label %pred.store.continue424

pred.store.continue424:                           ; preds = %pred.store.if423, %pred.store.continue422
  %408 = extractelement <16 x i1> %371, i64 12
  br i1 %408, label %pred.store.if425, label %pred.store.continue426

pred.store.if425:                                 ; preds = %pred.store.continue424
  %409 = add i64 %offset.idx, 12
  %410 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %409
  store i8 43, ptr %410, align 1, !tbaa !14
  br label %pred.store.continue426

pred.store.continue426:                           ; preds = %pred.store.if425, %pred.store.continue424
  %411 = extractelement <16 x i1> %371, i64 13
  br i1 %411, label %pred.store.if427, label %pred.store.continue428

pred.store.if427:                                 ; preds = %pred.store.continue426
  %412 = add i64 %offset.idx, 13
  %413 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %412
  store i8 43, ptr %413, align 1, !tbaa !14
  br label %pred.store.continue428

pred.store.continue428:                           ; preds = %pred.store.if427, %pred.store.continue426
  %414 = extractelement <16 x i1> %371, i64 14
  br i1 %414, label %pred.store.if429, label %pred.store.continue430

pred.store.if429:                                 ; preds = %pred.store.continue428
  %415 = add i64 %offset.idx, 14
  %416 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %415
  store i8 43, ptr %416, align 1, !tbaa !14
  br label %pred.store.continue430

pred.store.continue430:                           ; preds = %pred.store.if429, %pred.store.continue428
  %417 = extractelement <16 x i1> %371, i64 15
  br i1 %417, label %pred.store.if431, label %pred.store.continue432

pred.store.if431:                                 ; preds = %pred.store.continue430
  %418 = add i64 %offset.idx, 15
  %419 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %418
  store i8 43, ptr %419, align 1, !tbaa !14
  br label %pred.store.continue432

pred.store.continue432:                           ; preds = %pred.store.if431, %pred.store.continue430
  %420 = extractelement <16 x i1> %372, i64 0
  br i1 %420, label %pred.store.if433, label %pred.store.continue434

pred.store.if433:                                 ; preds = %pred.store.continue432
  %421 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %368
  store i8 43, ptr %421, align 1, !tbaa !14
  br label %pred.store.continue434

pred.store.continue434:                           ; preds = %pred.store.if433, %pred.store.continue432
  %422 = extractelement <16 x i1> %372, i64 1
  br i1 %422, label %pred.store.if435, label %pred.store.continue436

pred.store.if435:                                 ; preds = %pred.store.continue434
  %423 = add i64 %offset.idx, 17
  %424 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %423
  store i8 43, ptr %424, align 1, !tbaa !14
  br label %pred.store.continue436

pred.store.continue436:                           ; preds = %pred.store.if435, %pred.store.continue434
  %425 = extractelement <16 x i1> %372, i64 2
  br i1 %425, label %pred.store.if437, label %pred.store.continue438

pred.store.if437:                                 ; preds = %pred.store.continue436
  %426 = add i64 %offset.idx, 18
  %427 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %426
  store i8 43, ptr %427, align 1, !tbaa !14
  br label %pred.store.continue438

pred.store.continue438:                           ; preds = %pred.store.if437, %pred.store.continue436
  %428 = extractelement <16 x i1> %372, i64 3
  br i1 %428, label %pred.store.if439, label %pred.store.continue440

pred.store.if439:                                 ; preds = %pred.store.continue438
  %429 = add i64 %offset.idx, 19
  %430 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %429
  store i8 43, ptr %430, align 1, !tbaa !14
  br label %pred.store.continue440

pred.store.continue440:                           ; preds = %pred.store.if439, %pred.store.continue438
  %431 = extractelement <16 x i1> %372, i64 4
  br i1 %431, label %pred.store.if441, label %pred.store.continue442

pred.store.if441:                                 ; preds = %pred.store.continue440
  %432 = add i64 %offset.idx, 20
  %433 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %432
  store i8 43, ptr %433, align 1, !tbaa !14
  br label %pred.store.continue442

pred.store.continue442:                           ; preds = %pred.store.if441, %pred.store.continue440
  %434 = extractelement <16 x i1> %372, i64 5
  br i1 %434, label %pred.store.if443, label %pred.store.continue444

pred.store.if443:                                 ; preds = %pred.store.continue442
  %435 = add i64 %offset.idx, 21
  %436 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %435
  store i8 43, ptr %436, align 1, !tbaa !14
  br label %pred.store.continue444

pred.store.continue444:                           ; preds = %pred.store.if443, %pred.store.continue442
  %437 = extractelement <16 x i1> %372, i64 6
  br i1 %437, label %pred.store.if445, label %pred.store.continue446

pred.store.if445:                                 ; preds = %pred.store.continue444
  %438 = add i64 %offset.idx, 22
  %439 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %438
  store i8 43, ptr %439, align 1, !tbaa !14
  br label %pred.store.continue446

pred.store.continue446:                           ; preds = %pred.store.if445, %pred.store.continue444
  %440 = extractelement <16 x i1> %372, i64 7
  br i1 %440, label %pred.store.if447, label %pred.store.continue448

pred.store.if447:                                 ; preds = %pred.store.continue446
  %441 = add i64 %offset.idx, 23
  %442 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %441
  store i8 43, ptr %442, align 1, !tbaa !14
  br label %pred.store.continue448

pred.store.continue448:                           ; preds = %pred.store.if447, %pred.store.continue446
  %443 = extractelement <16 x i1> %372, i64 8
  br i1 %443, label %pred.store.if449, label %pred.store.continue450

pred.store.if449:                                 ; preds = %pred.store.continue448
  %444 = add i64 %offset.idx, 24
  %445 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %444
  store i8 43, ptr %445, align 1, !tbaa !14
  br label %pred.store.continue450

pred.store.continue450:                           ; preds = %pred.store.if449, %pred.store.continue448
  %446 = extractelement <16 x i1> %372, i64 9
  br i1 %446, label %pred.store.if451, label %pred.store.continue452

pred.store.if451:                                 ; preds = %pred.store.continue450
  %447 = add i64 %offset.idx, 25
  %448 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %447
  store i8 43, ptr %448, align 1, !tbaa !14
  br label %pred.store.continue452

pred.store.continue452:                           ; preds = %pred.store.if451, %pred.store.continue450
  %449 = extractelement <16 x i1> %372, i64 10
  br i1 %449, label %pred.store.if453, label %pred.store.continue454

pred.store.if453:                                 ; preds = %pred.store.continue452
  %450 = add i64 %offset.idx, 26
  %451 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %450
  store i8 43, ptr %451, align 1, !tbaa !14
  br label %pred.store.continue454

pred.store.continue454:                           ; preds = %pred.store.if453, %pred.store.continue452
  %452 = extractelement <16 x i1> %372, i64 11
  br i1 %452, label %pred.store.if455, label %pred.store.continue456

pred.store.if455:                                 ; preds = %pred.store.continue454
  %453 = add i64 %offset.idx, 27
  %454 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %453
  store i8 43, ptr %454, align 1, !tbaa !14
  br label %pred.store.continue456

pred.store.continue456:                           ; preds = %pred.store.if455, %pred.store.continue454
  %455 = extractelement <16 x i1> %372, i64 12
  br i1 %455, label %pred.store.if457, label %pred.store.continue458

pred.store.if457:                                 ; preds = %pred.store.continue456
  %456 = add i64 %offset.idx, 28
  %457 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %456
  store i8 43, ptr %457, align 1, !tbaa !14
  br label %pred.store.continue458

pred.store.continue458:                           ; preds = %pred.store.if457, %pred.store.continue456
  %458 = extractelement <16 x i1> %372, i64 13
  br i1 %458, label %pred.store.if459, label %pred.store.continue460

pred.store.if459:                                 ; preds = %pred.store.continue458
  %459 = add i64 %offset.idx, 29
  %460 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %459
  store i8 43, ptr %460, align 1, !tbaa !14
  br label %pred.store.continue460

pred.store.continue460:                           ; preds = %pred.store.if459, %pred.store.continue458
  %461 = extractelement <16 x i1> %372, i64 14
  br i1 %461, label %pred.store.if461, label %pred.store.continue462

pred.store.if461:                                 ; preds = %pred.store.continue460
  %462 = add i64 %offset.idx, 30
  %463 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %462
  store i8 43, ptr %463, align 1, !tbaa !14
  br label %pred.store.continue462

pred.store.continue462:                           ; preds = %pred.store.if461, %pred.store.continue460
  %464 = extractelement <16 x i1> %372, i64 15
  br i1 %464, label %pred.store.if463, label %pred.store.continue464

pred.store.if463:                                 ; preds = %pred.store.continue462
  %465 = add i64 %offset.idx, 31
  %466 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %465
  store i8 43, ptr %466, align 1, !tbaa !14
  br label %pred.store.continue464

pred.store.continue464:                           ; preds = %pred.store.if463, %pred.store.continue462
  %index.next465 = add nuw i64 %index400, 32
  %467 = icmp eq i64 %index.next465, %n.vec398
  br i1 %467, label %middle.block391, label %vector.body399, !llvm.loop !30

middle.block391:                                  ; preds = %pred.store.continue464
  br i1 %cmp.n466, label %.loopexit202, label %vec.epilog.iter.check

vec.epilog.iter.check:                            ; preds = %middle.block391
  br i1 %min.epilog.iters.check, label %.lr.ph256.preheader, label %vec.epilog.ph

vec.epilog.ph:                                    ; preds = %vector.main.loop.iter.check, %vec.epilog.iter.check
  %vec.epilog.resume.val = phi i64 [ %n.vec398, %vec.epilog.iter.check ], [ 0, %vector.main.loop.iter.check ]
  br label %vec.epilog.vector.body

vec.epilog.vector.body:                           ; preds = %pred.store.continue489, %vec.epilog.ph
  %index471 = phi i64 [ %vec.epilog.resume.val, %vec.epilog.ph ], [ %index.next490, %pred.store.continue489 ]
  %offset.idx472 = add i64 %index471, %354
  %468 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %offset.idx472
  %wide.load473 = load <8 x i8>, ptr %468, align 1, !tbaa !14
  %469 = icmp ne <8 x i8> %wide.load473, <i8 119, i8 119, i8 119, i8 119, i8 119, i8 119, i8 119, i8 119>
  %470 = extractelement <8 x i1> %469, i64 0
  br i1 %470, label %pred.store.if474, label %pred.store.continue475

pred.store.if474:                                 ; preds = %vec.epilog.vector.body
  %471 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %offset.idx472
  store i8 43, ptr %471, align 1, !tbaa !14
  br label %pred.store.continue475

pred.store.continue475:                           ; preds = %pred.store.if474, %vec.epilog.vector.body
  %472 = extractelement <8 x i1> %469, i64 1
  br i1 %472, label %pred.store.if476, label %pred.store.continue477

pred.store.if476:                                 ; preds = %pred.store.continue475
  %473 = add i64 %offset.idx472, 1
  %474 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %473
  store i8 43, ptr %474, align 1, !tbaa !14
  br label %pred.store.continue477

pred.store.continue477:                           ; preds = %pred.store.if476, %pred.store.continue475
  %475 = extractelement <8 x i1> %469, i64 2
  br i1 %475, label %pred.store.if478, label %pred.store.continue479

pred.store.if478:                                 ; preds = %pred.store.continue477
  %476 = add i64 %offset.idx472, 2
  %477 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %476
  store i8 43, ptr %477, align 1, !tbaa !14
  br label %pred.store.continue479

pred.store.continue479:                           ; preds = %pred.store.if478, %pred.store.continue477
  %478 = extractelement <8 x i1> %469, i64 3
  br i1 %478, label %pred.store.if480, label %pred.store.continue481

pred.store.if480:                                 ; preds = %pred.store.continue479
  %479 = add i64 %offset.idx472, 3
  %480 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %479
  store i8 43, ptr %480, align 1, !tbaa !14
  br label %pred.store.continue481

pred.store.continue481:                           ; preds = %pred.store.if480, %pred.store.continue479
  %481 = extractelement <8 x i1> %469, i64 4
  br i1 %481, label %pred.store.if482, label %pred.store.continue483

pred.store.if482:                                 ; preds = %pred.store.continue481
  %482 = add i64 %offset.idx472, 4
  %483 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %482
  store i8 43, ptr %483, align 1, !tbaa !14
  br label %pred.store.continue483

pred.store.continue483:                           ; preds = %pred.store.if482, %pred.store.continue481
  %484 = extractelement <8 x i1> %469, i64 5
  br i1 %484, label %pred.store.if484, label %pred.store.continue485

pred.store.if484:                                 ; preds = %pred.store.continue483
  %485 = add i64 %offset.idx472, 5
  %486 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %485
  store i8 43, ptr %486, align 1, !tbaa !14
  br label %pred.store.continue485

pred.store.continue485:                           ; preds = %pred.store.if484, %pred.store.continue483
  %487 = extractelement <8 x i1> %469, i64 6
  br i1 %487, label %pred.store.if486, label %pred.store.continue487

pred.store.if486:                                 ; preds = %pred.store.continue485
  %488 = add i64 %offset.idx472, 6
  %489 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %488
  store i8 43, ptr %489, align 1, !tbaa !14
  br label %pred.store.continue487

pred.store.continue487:                           ; preds = %pred.store.if486, %pred.store.continue485
  %490 = extractelement <8 x i1> %469, i64 7
  br i1 %490, label %pred.store.if488, label %pred.store.continue489

pred.store.if488:                                 ; preds = %pred.store.continue487
  %491 = add i64 %offset.idx472, 7
  %492 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %491
  store i8 43, ptr %492, align 1, !tbaa !14
  br label %pred.store.continue489

pred.store.continue489:                           ; preds = %pred.store.if488, %pred.store.continue487
  %index.next490 = add nuw i64 %index471, 8
  %493 = icmp eq i64 %index.next490, %n.vec468
  br i1 %493, label %vec.epilog.middle.block, label %vec.epilog.vector.body, !llvm.loop !31

vec.epilog.middle.block:                          ; preds = %pred.store.continue489
  br i1 %cmp.n491, label %.loopexit202, label %.lr.ph256.preheader

.lr.ph256.preheader:                              ; preds = %vec.epilog.middle.block, %iter.check, %vec.epilog.iter.check
  %indvars.iv329.ph = phi i64 [ %354, %iter.check ], [ %ind.end469, %vec.epilog.iter.check ], [ %ind.end, %vec.epilog.middle.block ]
  br label %.lr.ph256

.lr.ph256:                                        ; preds = %.lr.ph256.preheader, %497
  %indvars.iv329 = phi i64 [ %indvars.iv.next330, %497 ], [ %indvars.iv329.ph, %.lr.ph256.preheader ]
  %494 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %indvars.iv329
  %495 = load i8, ptr %494, align 1, !tbaa !14
  %.not159 = icmp eq i8 %495, 119
  br i1 %.not159, label %497, label %496

496:                                              ; preds = %.lr.ph256
  store i8 43, ptr %494, align 1, !tbaa !14
  br label %497

497:                                              ; preds = %.lr.ph256, %496
  %indvars.iv.next330 = add nsw i64 %indvars.iv329, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next330 to i32
  %exitcond332.not = icmp eq i32 %357, %lftr.wideiv
  br i1 %exitcond332.not, label %.loopexit202, label %.lr.ph256, !llvm.loop !32

498:                                              ; preds = %364
  %499 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %354
  %500 = load i8, ptr %499, align 1, !tbaa !14
  %.not156 = icmp eq i8 %500, 119
  br i1 %.not156, label %502, label %501

501:                                              ; preds = %498
  store i8 43, ptr %499, align 1, !tbaa !14
  br label %502

502:                                              ; preds = %501, %498
  %503 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv333, i64 %356
  %504 = load i8, ptr %503, align 1, !tbaa !14
  %.not157 = icmp eq i8 %504, 119
  br i1 %.not157, label %.loopexit202, label %505

505:                                              ; preds = %502
  store i8 43, ptr %503, align 1, !tbaa !14
  br label %.loopexit202

.loopexit202:                                     ; preds = %497, %middle.block391, %vec.epilog.middle.block, %367, %505, %502
  %indvars.iv.next334 = add nsw i64 %indvars.iv333, 1
  %lftr.wideiv337 = trunc i64 %indvars.iv.next334 to i32
  %exitcond338.not = icmp eq i32 %359, %lftr.wideiv337
  br i1 %exitcond338.not, label %.preheader, label %364, !llvm.loop !33

.lr.ph263:                                        ; preds = %.preheader, %.lr.ph263
  %indvars.iv339 = phi i64 [ %indvars.iv.next340, %.lr.ph263 ], [ 0, %.preheader ]
  %506 = getelementptr inbounds [2100 x [2100 x i8]], ptr @g, i64 0, i64 %indvars.iv339
  %507 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3, ptr noundef nonnull %506)
  %indvars.iv.next340 = add nuw nsw i64 %indvars.iv339, 1
  %508 = load i32, ptr @n, align 4, !tbaa !5
  %509 = sext i32 %508 to i64
  %510 = icmp slt i64 %indvars.iv.next340, %509
  br i1 %510, label %.lr.ph263, label %.loopexit, !llvm.loop !34

.loopexit.sink.split:                             ; preds = %349, %248, %288, %312, %187, %210, %.critedge169
  %511 = call i32 @puts(ptr noundef nonnull dereferenceable(1) @.str.2)
  br label %.loopexit

.loopexit:                                        ; preds = %.lr.ph263, %.loopexit.sink.split, %.preheader
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #5
  br label %512

512:                                              ; preds = %.split.us, %.loopexit
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %2) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %1) #5
  ret i32 0
}

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3minIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #3

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZSt3maxIiERKT_S2_S2_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #3

; Function Attrs: nofree nounwind
declare noundef i32 @puts(ptr nocapture noundef readonly) local_unnamed_addr #1

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"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, !12}
!12 = !{!"llvm.loop.unroll.disable"}
!13 = distinct !{!13, !10}
!14 = !{!7, !7, i64 0}
!15 = distinct !{!15, !10, !16, !17}
!16 = !{!"llvm.loop.isvectorized", i32 1}
!17 = !{!"llvm.loop.unroll.runtime.disable"}
!18 = distinct !{!18, !10}
!19 = distinct !{!19, !10, !17, !16}
!20 = distinct !{!20, !10}
!21 = distinct !{!21, !12}
!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}
!28 = !{!"llvm.loop.peeled.count", i32 2}
!29 = distinct !{!29, !10, !28}
!30 = distinct !{!30, !10, !16, !17}
!31 = distinct !{!31, !10, !16, !17}
!32 = distinct !{!32, !10, !17, !16}
!33 = distinct !{!33, !10}
!34 = distinct !{!34, !10}


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