; LLVM IR from NOAA-PMEL/Ferret :: fmt/src (string_array_hash)

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

; Function Attrs: nounwind uwtable
define dso_local i32 @string_array_hash(ptr noundef %0, i64 noundef %1, i64 noundef %2, i32 noundef %3) #0 {
  %5 = alloca ptr, align 8
  %6 = alloca i64, align 8
  %7 = alloca i64, align 8
  %8 = alloca i32, align 4
  %9 = alloca i64, align 8
  %10 = alloca i64, align 8
  %11 = alloca i64, align 8
  %12 = alloca i64, align 8
  %13 = alloca i32, align 4
  store ptr %0, ptr %5, align 8, !tbaa !5
  store i64 %1, ptr %6, align 8, !tbaa !9
  store i64 %2, ptr %7, align 8, !tbaa !9
  store i32 %3, ptr %8, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #2
  %14 = load i64, ptr %6, align 8, !tbaa !9
  store i64 %14, ptr %12, align 8, !tbaa !9
  store i64 2654435769, ptr %10, align 8, !tbaa !9
  store i64 2654435769, ptr %9, align 8, !tbaa !9
  %15 = load i64, ptr %7, align 8, !tbaa !9
  store i64 %15, ptr %11, align 8, !tbaa !9
  br label %16

16:                                               ; preds = %337, %4
  %17 = load i64, ptr %12, align 8, !tbaa !9
  %18 = icmp uge i64 %17, 12
  br i1 %18, label %19, label %438

19:                                               ; preds = %16
  %20 = load ptr, ptr %5, align 8, !tbaa !5
  %21 = getelementptr inbounds i8, ptr %20, i64 0
  %22 = load i8, ptr %21, align 1, !tbaa !13
  %23 = zext i8 %22 to i32
  %24 = icmp sge i32 %23, 97
  br i1 %24, label %25, label %37

25:                                               ; preds = %19
  %26 = load ptr, ptr %5, align 8, !tbaa !5
  %27 = getelementptr inbounds i8, ptr %26, i64 0
  %28 = load i8, ptr %27, align 1, !tbaa !13
  %29 = zext i8 %28 to i32
  %30 = icmp sle i32 %29, 122
  br i1 %30, label %31, label %37

31:                                               ; preds = %25
  %32 = load ptr, ptr %5, align 8, !tbaa !5
  %33 = getelementptr inbounds i8, ptr %32, i64 0
  %34 = load i8, ptr %33, align 1, !tbaa !13
  %35 = zext i8 %34 to i32
  %36 = and i32 %35, 223
  br label %42

37:                                               ; preds = %25, %19
  %38 = load ptr, ptr %5, align 8, !tbaa !5
  %39 = getelementptr inbounds i8, ptr %38, i64 0
  %40 = load i8, ptr %39, align 1, !tbaa !13
  %41 = zext i8 %40 to i32
  br label %42

42:                                               ; preds = %37, %31
  %43 = phi i32 [ %36, %31 ], [ %41, %37 ]
  %44 = sext i32 %43 to i64
  %45 = load ptr, ptr %5, align 8, !tbaa !5
  %46 = getelementptr inbounds i8, ptr %45, i64 1
  %47 = load i8, ptr %46, align 1, !tbaa !13
  %48 = zext i8 %47 to i32
  %49 = icmp sge i32 %48, 97
  br i1 %49, label %50, label %62

50:                                               ; preds = %42
  %51 = load ptr, ptr %5, align 8, !tbaa !5
  %52 = getelementptr inbounds i8, ptr %51, i64 1
  %53 = load i8, ptr %52, align 1, !tbaa !13
  %54 = zext i8 %53 to i32
  %55 = icmp sle i32 %54, 122
  br i1 %55, label %56, label %62

56:                                               ; preds = %50
  %57 = load ptr, ptr %5, align 8, !tbaa !5
  %58 = getelementptr inbounds i8, ptr %57, i64 1
  %59 = load i8, ptr %58, align 1, !tbaa !13
  %60 = zext i8 %59 to i32
  %61 = and i32 %60, 223
  br label %67

62:                                               ; preds = %50, %42
  %63 = load ptr, ptr %5, align 8, !tbaa !5
  %64 = getelementptr inbounds i8, ptr %63, i64 1
  %65 = load i8, ptr %64, align 1, !tbaa !13
  %66 = zext i8 %65 to i32
  br label %67

67:                                               ; preds = %62, %56
  %68 = phi i32 [ %61, %56 ], [ %66, %62 ]
  %69 = sext i32 %68 to i64
  %70 = shl i64 %69, 8
  %71 = add i64 %44, %70
  %72 = load ptr, ptr %5, align 8, !tbaa !5
  %73 = getelementptr inbounds i8, ptr %72, i64 2
  %74 = load i8, ptr %73, align 1, !tbaa !13
  %75 = zext i8 %74 to i32
  %76 = icmp sge i32 %75, 97
  br i1 %76, label %77, label %89

77:                                               ; preds = %67
  %78 = load ptr, ptr %5, align 8, !tbaa !5
  %79 = getelementptr inbounds i8, ptr %78, i64 2
  %80 = load i8, ptr %79, align 1, !tbaa !13
  %81 = zext i8 %80 to i32
  %82 = icmp sle i32 %81, 122
  br i1 %82, label %83, label %89

83:                                               ; preds = %77
  %84 = load ptr, ptr %5, align 8, !tbaa !5
  %85 = getelementptr inbounds i8, ptr %84, i64 2
  %86 = load i8, ptr %85, align 1, !tbaa !13
  %87 = zext i8 %86 to i32
  %88 = and i32 %87, 223
  br label %94

89:                                               ; preds = %77, %67
  %90 = load ptr, ptr %5, align 8, !tbaa !5
  %91 = getelementptr inbounds i8, ptr %90, i64 2
  %92 = load i8, ptr %91, align 1, !tbaa !13
  %93 = zext i8 %92 to i32
  br label %94

94:                                               ; preds = %89, %83
  %95 = phi i32 [ %88, %83 ], [ %93, %89 ]
  %96 = sext i32 %95 to i64
  %97 = shl i64 %96, 16
  %98 = add i64 %71, %97
  %99 = load ptr, ptr %5, align 8, !tbaa !5
  %100 = getelementptr inbounds i8, ptr %99, i64 3
  %101 = load i8, ptr %100, align 1, !tbaa !13
  %102 = zext i8 %101 to i32
  %103 = icmp sge i32 %102, 97
  br i1 %103, label %104, label %116

104:                                              ; preds = %94
  %105 = load ptr, ptr %5, align 8, !tbaa !5
  %106 = getelementptr inbounds i8, ptr %105, i64 3
  %107 = load i8, ptr %106, align 1, !tbaa !13
  %108 = zext i8 %107 to i32
  %109 = icmp sle i32 %108, 122
  br i1 %109, label %110, label %116

110:                                              ; preds = %104
  %111 = load ptr, ptr %5, align 8, !tbaa !5
  %112 = getelementptr inbounds i8, ptr %111, i64 3
  %113 = load i8, ptr %112, align 1, !tbaa !13
  %114 = zext i8 %113 to i32
  %115 = and i32 %114, 223
  br label %121

116:                                              ; preds = %104, %94
  %117 = load ptr, ptr %5, align 8, !tbaa !5
  %118 = getelementptr inbounds i8, ptr %117, i64 3
  %119 = load i8, ptr %118, align 1, !tbaa !13
  %120 = zext i8 %119 to i32
  br label %121

121:                                              ; preds = %116, %110
  %122 = phi i32 [ %115, %110 ], [ %120, %116 ]
  %123 = sext i32 %122 to i64
  %124 = shl i64 %123, 24
  %125 = add i64 %98, %124
  %126 = load i64, ptr %9, align 8, !tbaa !9
  %127 = add i64 %126, %125
  store i64 %127, ptr %9, align 8, !tbaa !9
  %128 = load ptr, ptr %5, align 8, !tbaa !5
  %129 = getelementptr inbounds i8, ptr %128, i64 4
  %130 = load i8, ptr %129, align 1, !tbaa !13
  %131 = zext i8 %130 to i32
  %132 = icmp sge i32 %131, 97
  br i1 %132, label %133, label %145

133:                                              ; preds = %121
  %134 = load ptr, ptr %5, align 8, !tbaa !5
  %135 = getelementptr inbounds i8, ptr %134, i64 4
  %136 = load i8, ptr %135, align 1, !tbaa !13
  %137 = zext i8 %136 to i32
  %138 = icmp sle i32 %137, 122
  br i1 %138, label %139, label %145

139:                                              ; preds = %133
  %140 = load ptr, ptr %5, align 8, !tbaa !5
  %141 = getelementptr inbounds i8, ptr %140, i64 4
  %142 = load i8, ptr %141, align 1, !tbaa !13
  %143 = zext i8 %142 to i32
  %144 = and i32 %143, 223
  br label %150

145:                                              ; preds = %133, %121
  %146 = load ptr, ptr %5, align 8, !tbaa !5
  %147 = getelementptr inbounds i8, ptr %146, i64 4
  %148 = load i8, ptr %147, align 1, !tbaa !13
  %149 = zext i8 %148 to i32
  br label %150

150:                                              ; preds = %145, %139
  %151 = phi i32 [ %144, %139 ], [ %149, %145 ]
  %152 = sext i32 %151 to i64
  %153 = load ptr, ptr %5, align 8, !tbaa !5
  %154 = getelementptr inbounds i8, ptr %153, i64 5
  %155 = load i8, ptr %154, align 1, !tbaa !13
  %156 = zext i8 %155 to i32
  %157 = icmp sge i32 %156, 97
  br i1 %157, label %158, label %170

158:                                              ; preds = %150
  %159 = load ptr, ptr %5, align 8, !tbaa !5
  %160 = getelementptr inbounds i8, ptr %159, i64 5
  %161 = load i8, ptr %160, align 1, !tbaa !13
  %162 = zext i8 %161 to i32
  %163 = icmp sle i32 %162, 122
  br i1 %163, label %164, label %170

164:                                              ; preds = %158
  %165 = load ptr, ptr %5, align 8, !tbaa !5
  %166 = getelementptr inbounds i8, ptr %165, i64 5
  %167 = load i8, ptr %166, align 1, !tbaa !13
  %168 = zext i8 %167 to i32
  %169 = and i32 %168, 223
  br label %175

170:                                              ; preds = %158, %150
  %171 = load ptr, ptr %5, align 8, !tbaa !5
  %172 = getelementptr inbounds i8, ptr %171, i64 5
  %173 = load i8, ptr %172, align 1, !tbaa !13
  %174 = zext i8 %173 to i32
  br label %175

175:                                              ; preds = %170, %164
  %176 = phi i32 [ %169, %164 ], [ %174, %170 ]
  %177 = sext i32 %176 to i64
  %178 = shl i64 %177, 8
  %179 = add i64 %152, %178
  %180 = load ptr, ptr %5, align 8, !tbaa !5
  %181 = getelementptr inbounds i8, ptr %180, i64 6
  %182 = load i8, ptr %181, align 1, !tbaa !13
  %183 = zext i8 %182 to i32
  %184 = icmp sge i32 %183, 97
  br i1 %184, label %185, label %197

185:                                              ; preds = %175
  %186 = load ptr, ptr %5, align 8, !tbaa !5
  %187 = getelementptr inbounds i8, ptr %186, i64 6
  %188 = load i8, ptr %187, align 1, !tbaa !13
  %189 = zext i8 %188 to i32
  %190 = icmp sle i32 %189, 122
  br i1 %190, label %191, label %197

191:                                              ; preds = %185
  %192 = load ptr, ptr %5, align 8, !tbaa !5
  %193 = getelementptr inbounds i8, ptr %192, i64 6
  %194 = load i8, ptr %193, align 1, !tbaa !13
  %195 = zext i8 %194 to i32
  %196 = and i32 %195, 223
  br label %202

197:                                              ; preds = %185, %175
  %198 = load ptr, ptr %5, align 8, !tbaa !5
  %199 = getelementptr inbounds i8, ptr %198, i64 6
  %200 = load i8, ptr %199, align 1, !tbaa !13
  %201 = zext i8 %200 to i32
  br label %202

202:                                              ; preds = %197, %191
  %203 = phi i32 [ %196, %191 ], [ %201, %197 ]
  %204 = sext i32 %203 to i64
  %205 = shl i64 %204, 16
  %206 = add i64 %179, %205
  %207 = load ptr, ptr %5, align 8, !tbaa !5
  %208 = getelementptr inbounds i8, ptr %207, i64 7
  %209 = load i8, ptr %208, align 1, !tbaa !13
  %210 = zext i8 %209 to i32
  %211 = icmp sge i32 %210, 97
  br i1 %211, label %212, label %224

212:                                              ; preds = %202
  %213 = load ptr, ptr %5, align 8, !tbaa !5
  %214 = getelementptr inbounds i8, ptr %213, i64 7
  %215 = load i8, ptr %214, align 1, !tbaa !13
  %216 = zext i8 %215 to i32
  %217 = icmp sle i32 %216, 122
  br i1 %217, label %218, label %224

218:                                              ; preds = %212
  %219 = load ptr, ptr %5, align 8, !tbaa !5
  %220 = getelementptr inbounds i8, ptr %219, i64 7
  %221 = load i8, ptr %220, align 1, !tbaa !13
  %222 = zext i8 %221 to i32
  %223 = and i32 %222, 223
  br label %229

224:                                              ; preds = %212, %202
  %225 = load ptr, ptr %5, align 8, !tbaa !5
  %226 = getelementptr inbounds i8, ptr %225, i64 7
  %227 = load i8, ptr %226, align 1, !tbaa !13
  %228 = zext i8 %227 to i32
  br label %229

229:                                              ; preds = %224, %218
  %230 = phi i32 [ %223, %218 ], [ %228, %224 ]
  %231 = sext i32 %230 to i64
  %232 = shl i64 %231, 24
  %233 = add i64 %206, %232
  %234 = load i64, ptr %10, align 8, !tbaa !9
  %235 = add i64 %234, %233
  store i64 %235, ptr %10, align 8, !tbaa !9
  %236 = load ptr, ptr %5, align 8, !tbaa !5
  %237 = getelementptr inbounds i8, ptr %236, i64 8
  %238 = load i8, ptr %237, align 1, !tbaa !13
  %239 = zext i8 %238 to i32
  %240 = icmp sge i32 %239, 97
  br i1 %240, label %241, label %253

241:                                              ; preds = %229
  %242 = load ptr, ptr %5, align 8, !tbaa !5
  %243 = getelementptr inbounds i8, ptr %242, i64 8
  %244 = load i8, ptr %243, align 1, !tbaa !13
  %245 = zext i8 %244 to i32
  %246 = icmp sle i32 %245, 122
  br i1 %246, label %247, label %253

247:                                              ; preds = %241
  %248 = load ptr, ptr %5, align 8, !tbaa !5
  %249 = getelementptr inbounds i8, ptr %248, i64 8
  %250 = load i8, ptr %249, align 1, !tbaa !13
  %251 = zext i8 %250 to i32
  %252 = and i32 %251, 223
  br label %258

253:                                              ; preds = %241, %229
  %254 = load ptr, ptr %5, align 8, !tbaa !5
  %255 = getelementptr inbounds i8, ptr %254, i64 8
  %256 = load i8, ptr %255, align 1, !tbaa !13
  %257 = zext i8 %256 to i32
  br label %258

258:                                              ; preds = %253, %247
  %259 = phi i32 [ %252, %247 ], [ %257, %253 ]
  %260 = sext i32 %259 to i64
  %261 = load ptr, ptr %5, align 8, !tbaa !5
  %262 = getelementptr inbounds i8, ptr %261, i64 9
  %263 = load i8, ptr %262, align 1, !tbaa !13
  %264 = zext i8 %263 to i32
  %265 = icmp sge i32 %264, 97
  br i1 %265, label %266, label %278

266:                                              ; preds = %258
  %267 = load ptr, ptr %5, align 8, !tbaa !5
  %268 = getelementptr inbounds i8, ptr %267, i64 9
  %269 = load i8, ptr %268, align 1, !tbaa !13
  %270 = zext i8 %269 to i32
  %271 = icmp sle i32 %270, 122
  br i1 %271, label %272, label %278

272:                                              ; preds = %266
  %273 = load ptr, ptr %5, align 8, !tbaa !5
  %274 = getelementptr inbounds i8, ptr %273, i64 9
  %275 = load i8, ptr %274, align 1, !tbaa !13
  %276 = zext i8 %275 to i32
  %277 = and i32 %276, 223
  br label %283

278:                                              ; preds = %266, %258
  %279 = load ptr, ptr %5, align 8, !tbaa !5
  %280 = getelementptr inbounds i8, ptr %279, i64 9
  %281 = load i8, ptr %280, align 1, !tbaa !13
  %282 = zext i8 %281 to i32
  br label %283

283:                                              ; preds = %278, %272
  %284 = phi i32 [ %277, %272 ], [ %282, %278 ]
  %285 = sext i32 %284 to i64
  %286 = shl i64 %285, 8
  %287 = add i64 %260, %286
  %288 = load ptr, ptr %5, align 8, !tbaa !5
  %289 = getelementptr inbounds i8, ptr %288, i64 10
  %290 = load i8, ptr %289, align 1, !tbaa !13
  %291 = zext i8 %290 to i32
  %292 = icmp sge i32 %291, 97
  br i1 %292, label %293, label %305

293:                                              ; preds = %283
  %294 = load ptr, ptr %5, align 8, !tbaa !5
  %295 = getelementptr inbounds i8, ptr %294, i64 10
  %296 = load i8, ptr %295, align 1, !tbaa !13
  %297 = zext i8 %296 to i32
  %298 = icmp sle i32 %297, 122
  br i1 %298, label %299, label %305

299:                                              ; preds = %293
  %300 = load ptr, ptr %5, align 8, !tbaa !5
  %301 = getelementptr inbounds i8, ptr %300, i64 10
  %302 = load i8, ptr %301, align 1, !tbaa !13
  %303 = zext i8 %302 to i32
  %304 = and i32 %303, 223
  br label %310

305:                                              ; preds = %293, %283
  %306 = load ptr, ptr %5, align 8, !tbaa !5
  %307 = getelementptr inbounds i8, ptr %306, i64 10
  %308 = load i8, ptr %307, align 1, !tbaa !13
  %309 = zext i8 %308 to i32
  br label %310

310:                                              ; preds = %305, %299
  %311 = phi i32 [ %304, %299 ], [ %309, %305 ]
  %312 = sext i32 %311 to i64
  %313 = shl i64 %312, 16
  %314 = add i64 %287, %313
  %315 = load ptr, ptr %5, align 8, !tbaa !5
  %316 = getelementptr inbounds i8, ptr %315, i64 11
  %317 = load i8, ptr %316, align 1, !tbaa !13
  %318 = zext i8 %317 to i32
  %319 = icmp sge i32 %318, 97
  br i1 %319, label %320, label %332

320:                                              ; preds = %310
  %321 = load ptr, ptr %5, align 8, !tbaa !5
  %322 = getelementptr inbounds i8, ptr %321, i64 11
  %323 = load i8, ptr %322, align 1, !tbaa !13
  %324 = zext i8 %323 to i32
  %325 = icmp sle i32 %324, 122
  br i1 %325, label %326, label %332

326:                                              ; preds = %320
  %327 = load ptr, ptr %5, align 8, !tbaa !5
  %328 = getelementptr inbounds i8, ptr %327, i64 11
  %329 = load i8, ptr %328, align 1, !tbaa !13
  %330 = zext i8 %329 to i32
  %331 = and i32 %330, 223
  br label %337

332:                                              ; preds = %320, %310
  %333 = load ptr, ptr %5, align 8, !tbaa !5
  %334 = getelementptr inbounds i8, ptr %333, i64 11
  %335 = load i8, ptr %334, align 1, !tbaa !13
  %336 = zext i8 %335 to i32
  br label %337

337:                                              ; preds = %332, %326
  %338 = phi i32 [ %331, %326 ], [ %336, %332 ]
  %339 = sext i32 %338 to i64
  %340 = shl i64 %339, 24
  %341 = add i64 %314, %340
  %342 = load i64, ptr %11, align 8, !tbaa !9
  %343 = add i64 %342, %341
  store i64 %343, ptr %11, align 8, !tbaa !9
  %344 = load i64, ptr %10, align 8, !tbaa !9
  %345 = load i64, ptr %9, align 8, !tbaa !9
  %346 = sub i64 %345, %344
  store i64 %346, ptr %9, align 8, !tbaa !9
  %347 = load i64, ptr %11, align 8, !tbaa !9
  %348 = load i64, ptr %9, align 8, !tbaa !9
  %349 = sub i64 %348, %347
  store i64 %349, ptr %9, align 8, !tbaa !9
  %350 = load i64, ptr %11, align 8, !tbaa !9
  %351 = lshr i64 %350, 13
  %352 = load i64, ptr %9, align 8, !tbaa !9
  %353 = xor i64 %352, %351
  store i64 %353, ptr %9, align 8, !tbaa !9
  %354 = load i64, ptr %11, align 8, !tbaa !9
  %355 = load i64, ptr %10, align 8, !tbaa !9
  %356 = sub i64 %355, %354
  store i64 %356, ptr %10, align 8, !tbaa !9
  %357 = load i64, ptr %9, align 8, !tbaa !9
  %358 = load i64, ptr %10, align 8, !tbaa !9
  %359 = sub i64 %358, %357
  store i64 %359, ptr %10, align 8, !tbaa !9
  %360 = load i64, ptr %9, align 8, !tbaa !9
  %361 = shl i64 %360, 8
  %362 = load i64, ptr %10, align 8, !tbaa !9
  %363 = xor i64 %362, %361
  store i64 %363, ptr %10, align 8, !tbaa !9
  %364 = load i64, ptr %9, align 8, !tbaa !9
  %365 = load i64, ptr %11, align 8, !tbaa !9
  %366 = sub i64 %365, %364
  store i64 %366, ptr %11, align 8, !tbaa !9
  %367 = load i64, ptr %10, align 8, !tbaa !9
  %368 = load i64, ptr %11, align 8, !tbaa !9
  %369 = sub i64 %368, %367
  store i64 %369, ptr %11, align 8, !tbaa !9
  %370 = load i64, ptr %10, align 8, !tbaa !9
  %371 = lshr i64 %370, 13
  %372 = load i64, ptr %11, align 8, !tbaa !9
  %373 = xor i64 %372, %371
  store i64 %373, ptr %11, align 8, !tbaa !9
  %374 = load i64, ptr %10, align 8, !tbaa !9
  %375 = load i64, ptr %9, align 8, !tbaa !9
  %376 = sub i64 %375, %374
  store i64 %376, ptr %9, align 8, !tbaa !9
  %377 = load i64, ptr %11, align 8, !tbaa !9
  %378 = load i64, ptr %9, align 8, !tbaa !9
  %379 = sub i64 %378, %377
  store i64 %379, ptr %9, align 8, !tbaa !9
  %380 = load i64, ptr %11, align 8, !tbaa !9
  %381 = lshr i64 %380, 12
  %382 = load i64, ptr %9, align 8, !tbaa !9
  %383 = xor i64 %382, %381
  store i64 %383, ptr %9, align 8, !tbaa !9
  %384 = load i64, ptr %11, align 8, !tbaa !9
  %385 = load i64, ptr %10, align 8, !tbaa !9
  %386 = sub i64 %385, %384
  store i64 %386, ptr %10, align 8, !tbaa !9
  %387 = load i64, ptr %9, align 8, !tbaa !9
  %388 = load i64, ptr %10, align 8, !tbaa !9
  %389 = sub i64 %388, %387
  store i64 %389, ptr %10, align 8, !tbaa !9
  %390 = load i64, ptr %9, align 8, !tbaa !9
  %391 = shl i64 %390, 16
  %392 = load i64, ptr %10, align 8, !tbaa !9
  %393 = xor i64 %392, %391
  store i64 %393, ptr %10, align 8, !tbaa !9
  %394 = load i64, ptr %9, align 8, !tbaa !9
  %395 = load i64, ptr %11, align 8, !tbaa !9
  %396 = sub i64 %395, %394
  store i64 %396, ptr %11, align 8, !tbaa !9
  %397 = load i64, ptr %10, align 8, !tbaa !9
  %398 = load i64, ptr %11, align 8, !tbaa !9
  %399 = sub i64 %398, %397
  store i64 %399, ptr %11, align 8, !tbaa !9
  %400 = load i64, ptr %10, align 8, !tbaa !9
  %401 = lshr i64 %400, 5
  %402 = load i64, ptr %11, align 8, !tbaa !9
  %403 = xor i64 %402, %401
  store i64 %403, ptr %11, align 8, !tbaa !9
  %404 = load i64, ptr %10, align 8, !tbaa !9
  %405 = load i64, ptr %9, align 8, !tbaa !9
  %406 = sub i64 %405, %404
  store i64 %406, ptr %9, align 8, !tbaa !9
  %407 = load i64, ptr %11, align 8, !tbaa !9
  %408 = load i64, ptr %9, align 8, !tbaa !9
  %409 = sub i64 %408, %407
  store i64 %409, ptr %9, align 8, !tbaa !9
  %410 = load i64, ptr %11, align 8, !tbaa !9
  %411 = lshr i64 %410, 3
  %412 = load i64, ptr %9, align 8, !tbaa !9
  %413 = xor i64 %412, %411
  store i64 %413, ptr %9, align 8, !tbaa !9
  %414 = load i64, ptr %11, align 8, !tbaa !9
  %415 = load i64, ptr %10, align 8, !tbaa !9
  %416 = sub i64 %415, %414
  store i64 %416, ptr %10, align 8, !tbaa !9
  %417 = load i64, ptr %9, align 8, !tbaa !9
  %418 = load i64, ptr %10, align 8, !tbaa !9
  %419 = sub i64 %418, %417
  store i64 %419, ptr %10, align 8, !tbaa !9
  %420 = load i64, ptr %9, align 8, !tbaa !9
  %421 = shl i64 %420, 10
  %422 = load i64, ptr %10, align 8, !tbaa !9
  %423 = xor i64 %422, %421
  store i64 %423, ptr %10, align 8, !tbaa !9
  %424 = load i64, ptr %9, align 8, !tbaa !9
  %425 = load i64, ptr %11, align 8, !tbaa !9
  %426 = sub i64 %425, %424
  store i64 %426, ptr %11, align 8, !tbaa !9
  %427 = load i64, ptr %10, align 8, !tbaa !9
  %428 = load i64, ptr %11, align 8, !tbaa !9
  %429 = sub i64 %428, %427
  store i64 %429, ptr %11, align 8, !tbaa !9
  %430 = load i64, ptr %10, align 8, !tbaa !9
  %431 = lshr i64 %430, 15
  %432 = load i64, ptr %11, align 8, !tbaa !9
  %433 = xor i64 %432, %431
  store i64 %433, ptr %11, align 8, !tbaa !9
  %434 = load ptr, ptr %5, align 8, !tbaa !5
  %435 = getelementptr inbounds i8, ptr %434, i64 12
  store ptr %435, ptr %5, align 8, !tbaa !5
  %436 = load i64, ptr %12, align 8, !tbaa !9
  %437 = sub i64 %436, 12
  store i64 %437, ptr %12, align 8, !tbaa !9
  br label %16, !llvm.loop !14

438:                                              ; preds = %16
  %439 = load i64, ptr %6, align 8, !tbaa !9
  %440 = load i64, ptr %11, align 8, !tbaa !9
  %441 = add i64 %440, %439
  store i64 %441, ptr %11, align 8, !tbaa !9
  %442 = load i64, ptr %12, align 8, !tbaa !9
  switch i64 %442, label %760 [
    i64 11, label %443
    i64 10, label %472
    i64 9, label %501
    i64 8, label %530
    i64 7, label %559
    i64 6, label %588
    i64 5, label %617
    i64 4, label %645
    i64 3, label %674
    i64 2, label %703
    i64 1, label %732
  ]

443:                                              ; preds = %438
  %444 = load ptr, ptr %5, align 8, !tbaa !5
  %445 = getelementptr inbounds i8, ptr %444, i64 10
  %446 = load i8, ptr %445, align 1, !tbaa !13
  %447 = zext i8 %446 to i32
  %448 = icmp sge i32 %447, 97
  br i1 %448, label %449, label %461

449:                                              ; preds = %443
  %450 = load ptr, ptr %5, align 8, !tbaa !5
  %451 = getelementptr inbounds i8, ptr %450, i64 10
  %452 = load i8, ptr %451, align 1, !tbaa !13
  %453 = zext i8 %452 to i32
  %454 = icmp sle i32 %453, 122
  br i1 %454, label %455, label %461

455:                                              ; preds = %449
  %456 = load ptr, ptr %5, align 8, !tbaa !5
  %457 = getelementptr inbounds i8, ptr %456, i64 10
  %458 = load i8, ptr %457, align 1, !tbaa !13
  %459 = zext i8 %458 to i32
  %460 = and i32 %459, 223
  br label %466

461:                                              ; preds = %449, %443
  %462 = load ptr, ptr %5, align 8, !tbaa !5
  %463 = getelementptr inbounds i8, ptr %462, i64 10
  %464 = load i8, ptr %463, align 1, !tbaa !13
  %465 = zext i8 %464 to i32
  br label %466

466:                                              ; preds = %461, %455
  %467 = phi i32 [ %460, %455 ], [ %465, %461 ]
  %468 = sext i32 %467 to i64
  %469 = shl i64 %468, 24
  %470 = load i64, ptr %11, align 8, !tbaa !9
  %471 = add i64 %470, %469
  store i64 %471, ptr %11, align 8, !tbaa !9
  br label %472

472:                                              ; preds = %466, %438
  %473 = load ptr, ptr %5, align 8, !tbaa !5
  %474 = getelementptr inbounds i8, ptr %473, i64 9
  %475 = load i8, ptr %474, align 1, !tbaa !13
  %476 = zext i8 %475 to i32
  %477 = icmp sge i32 %476, 97
  br i1 %477, label %478, label %490

478:                                              ; preds = %472
  %479 = load ptr, ptr %5, align 8, !tbaa !5
  %480 = getelementptr inbounds i8, ptr %479, i64 9
  %481 = load i8, ptr %480, align 1, !tbaa !13
  %482 = zext i8 %481 to i32
  %483 = icmp sle i32 %482, 122
  br i1 %483, label %484, label %490

484:                                              ; preds = %478
  %485 = load ptr, ptr %5, align 8, !tbaa !5
  %486 = getelementptr inbounds i8, ptr %485, i64 9
  %487 = load i8, ptr %486, align 1, !tbaa !13
  %488 = zext i8 %487 to i32
  %489 = and i32 %488, 223
  br label %495

490:                                              ; preds = %478, %472
  %491 = load ptr, ptr %5, align 8, !tbaa !5
  %492 = getelementptr inbounds i8, ptr %491, i64 9
  %493 = load i8, ptr %492, align 1, !tbaa !13
  %494 = zext i8 %493 to i32
  br label %495

495:                                              ; preds = %490, %484
  %496 = phi i32 [ %489, %484 ], [ %494, %490 ]
  %497 = sext i32 %496 to i64
  %498 = shl i64 %497, 16
  %499 = load i64, ptr %11, align 8, !tbaa !9
  %500 = add i64 %499, %498
  store i64 %500, ptr %11, align 8, !tbaa !9
  br label %501

501:                                              ; preds = %495, %438
  %502 = load ptr, ptr %5, align 8, !tbaa !5
  %503 = getelementptr inbounds i8, ptr %502, i64 8
  %504 = load i8, ptr %503, align 1, !tbaa !13
  %505 = zext i8 %504 to i32
  %506 = icmp sge i32 %505, 97
  br i1 %506, label %507, label %519

507:                                              ; preds = %501
  %508 = load ptr, ptr %5, align 8, !tbaa !5
  %509 = getelementptr inbounds i8, ptr %508, i64 8
  %510 = load i8, ptr %509, align 1, !tbaa !13
  %511 = zext i8 %510 to i32
  %512 = icmp sle i32 %511, 122
  br i1 %512, label %513, label %519

513:                                              ; preds = %507
  %514 = load ptr, ptr %5, align 8, !tbaa !5
  %515 = getelementptr inbounds i8, ptr %514, i64 8
  %516 = load i8, ptr %515, align 1, !tbaa !13
  %517 = zext i8 %516 to i32
  %518 = and i32 %517, 223
  br label %524

519:                                              ; preds = %507, %501
  %520 = load ptr, ptr %5, align 8, !tbaa !5
  %521 = getelementptr inbounds i8, ptr %520, i64 8
  %522 = load i8, ptr %521, align 1, !tbaa !13
  %523 = zext i8 %522 to i32
  br label %524

524:                                              ; preds = %519, %513
  %525 = phi i32 [ %518, %513 ], [ %523, %519 ]
  %526 = sext i32 %525 to i64
  %527 = shl i64 %526, 8
  %528 = load i64, ptr %11, align 8, !tbaa !9
  %529 = add i64 %528, %527
  store i64 %529, ptr %11, align 8, !tbaa !9
  br label %530

530:                                              ; preds = %524, %438
  %531 = load ptr, ptr %5, align 8, !tbaa !5
  %532 = getelementptr inbounds i8, ptr %531, i64 7
  %533 = load i8, ptr %532, align 1, !tbaa !13
  %534 = zext i8 %533 to i32
  %535 = icmp sge i32 %534, 97
  br i1 %535, label %536, label %548

536:                                              ; preds = %530
  %537 = load ptr, ptr %5, align 8, !tbaa !5
  %538 = getelementptr inbounds i8, ptr %537, i64 7
  %539 = load i8, ptr %538, align 1, !tbaa !13
  %540 = zext i8 %539 to i32
  %541 = icmp sle i32 %540, 122
  br i1 %541, label %542, label %548

542:                                              ; preds = %536
  %543 = load ptr, ptr %5, align 8, !tbaa !5
  %544 = getelementptr inbounds i8, ptr %543, i64 7
  %545 = load i8, ptr %544, align 1, !tbaa !13
  %546 = zext i8 %545 to i32
  %547 = and i32 %546, 223
  br label %553

548:                                              ; preds = %536, %530
  %549 = load ptr, ptr %5, align 8, !tbaa !5
  %550 = getelementptr inbounds i8, ptr %549, i64 7
  %551 = load i8, ptr %550, align 1, !tbaa !13
  %552 = zext i8 %551 to i32
  br label %553

553:                                              ; preds = %548, %542
  %554 = phi i32 [ %547, %542 ], [ %552, %548 ]
  %555 = sext i32 %554 to i64
  %556 = shl i64 %555, 24
  %557 = load i64, ptr %10, align 8, !tbaa !9
  %558 = add i64 %557, %556
  store i64 %558, ptr %10, align 8, !tbaa !9
  br label %559

559:                                              ; preds = %553, %438
  %560 = load ptr, ptr %5, align 8, !tbaa !5
  %561 = getelementptr inbounds i8, ptr %560, i64 6
  %562 = load i8, ptr %561, align 1, !tbaa !13
  %563 = zext i8 %562 to i32
  %564 = icmp sge i32 %563, 97
  br i1 %564, label %565, label %577

565:                                              ; preds = %559
  %566 = load ptr, ptr %5, align 8, !tbaa !5
  %567 = getelementptr inbounds i8, ptr %566, i64 6
  %568 = load i8, ptr %567, align 1, !tbaa !13
  %569 = zext i8 %568 to i32
  %570 = icmp sle i32 %569, 122
  br i1 %570, label %571, label %577

571:                                              ; preds = %565
  %572 = load ptr, ptr %5, align 8, !tbaa !5
  %573 = getelementptr inbounds i8, ptr %572, i64 6
  %574 = load i8, ptr %573, align 1, !tbaa !13
  %575 = zext i8 %574 to i32
  %576 = and i32 %575, 223
  br label %582

577:                                              ; preds = %565, %559
  %578 = load ptr, ptr %5, align 8, !tbaa !5
  %579 = getelementptr inbounds i8, ptr %578, i64 6
  %580 = load i8, ptr %579, align 1, !tbaa !13
  %581 = zext i8 %580 to i32
  br label %582

582:                                              ; preds = %577, %571
  %583 = phi i32 [ %576, %571 ], [ %581, %577 ]
  %584 = sext i32 %583 to i64
  %585 = shl i64 %584, 16
  %586 = load i64, ptr %10, align 8, !tbaa !9
  %587 = add i64 %586, %585
  store i64 %587, ptr %10, align 8, !tbaa !9
  br label %588

588:                                              ; preds = %582, %438
  %589 = load ptr, ptr %5, align 8, !tbaa !5
  %590 = getelementptr inbounds i8, ptr %589, i64 5
  %591 = load i8, ptr %590, align 1, !tbaa !13
  %592 = zext i8 %591 to i32
  %593 = icmp sge i32 %592, 97
  br i1 %593, label %594, label %606

594:                                              ; preds = %588
  %595 = load ptr, ptr %5, align 8, !tbaa !5
  %596 = getelementptr inbounds i8, ptr %595, i64 5
  %597 = load i8, ptr %596, align 1, !tbaa !13
  %598 = zext i8 %597 to i32
  %599 = icmp sle i32 %598, 122
  br i1 %599, label %600, label %606

600:                                              ; preds = %594
  %601 = load ptr, ptr %5, align 8, !tbaa !5
  %602 = getelementptr inbounds i8, ptr %601, i64 5
  %603 = load i8, ptr %602, align 1, !tbaa !13
  %604 = zext i8 %603 to i32
  %605 = and i32 %604, 223
  br label %611

606:                                              ; preds = %594, %588
  %607 = load ptr, ptr %5, align 8, !tbaa !5
  %608 = getelementptr inbounds i8, ptr %607, i64 5
  %609 = load i8, ptr %608, align 1, !tbaa !13
  %610 = zext i8 %609 to i32
  br label %611

611:                                              ; preds = %606, %600
  %612 = phi i32 [ %605, %600 ], [ %610, %606 ]
  %613 = sext i32 %612 to i64
  %614 = shl i64 %613, 8
  %615 = load i64, ptr %10, align 8, !tbaa !9
  %616 = add i64 %615, %614
  store i64 %616, ptr %10, align 8, !tbaa !9
  br label %617

617:                                              ; preds = %611, %438
  %618 = load ptr, ptr %5, align 8, !tbaa !5
  %619 = getelementptr inbounds i8, ptr %618, i64 4
  %620 = load i8, ptr %619, align 1, !tbaa !13
  %621 = zext i8 %620 to i32
  %622 = icmp sge i32 %621, 97
  br i1 %622, label %623, label %635

623:                                              ; preds = %617
  %624 = load ptr, ptr %5, align 8, !tbaa !5
  %625 = getelementptr inbounds i8, ptr %624, i64 4
  %626 = load i8, ptr %625, align 1, !tbaa !13
  %627 = zext i8 %626 to i32
  %628 = icmp sle i32 %627, 122
  br i1 %628, label %629, label %635

629:                                              ; preds = %623
  %630 = load ptr, ptr %5, align 8, !tbaa !5
  %631 = getelementptr inbounds i8, ptr %630, i64 4
  %632 = load i8, ptr %631, align 1, !tbaa !13
  %633 = zext i8 %632 to i32
  %634 = and i32 %633, 223
  br label %640

635:                                              ; preds = %623, %617
  %636 = load ptr, ptr %5, align 8, !tbaa !5
  %637 = getelementptr inbounds i8, ptr %636, i64 4
  %638 = load i8, ptr %637, align 1, !tbaa !13
  %639 = zext i8 %638 to i32
  br label %640

640:                                              ; preds = %635, %629
  %641 = phi i32 [ %634, %629 ], [ %639, %635 ]
  %642 = sext i32 %641 to i64
  %643 = load i64, ptr %10, align 8, !tbaa !9
  %644 = add i64 %643, %642
  store i64 %644, ptr %10, align 8, !tbaa !9
  br label %645

645:                                              ; preds = %640, %438
  %646 = load ptr, ptr %5, align 8, !tbaa !5
  %647 = getelementptr inbounds i8, ptr %646, i64 3
  %648 = load i8, ptr %647, align 1, !tbaa !13
  %649 = zext i8 %648 to i32
  %650 = icmp sge i32 %649, 97
  br i1 %650, label %651, label %663

651:                                              ; preds = %645
  %652 = load ptr, ptr %5, align 8, !tbaa !5
  %653 = getelementptr inbounds i8, ptr %652, i64 3
  %654 = load i8, ptr %653, align 1, !tbaa !13
  %655 = zext i8 %654 to i32
  %656 = icmp sle i32 %655, 122
  br i1 %656, label %657, label %663

657:                                              ; preds = %651
  %658 = load ptr, ptr %5, align 8, !tbaa !5
  %659 = getelementptr inbounds i8, ptr %658, i64 3
  %660 = load i8, ptr %659, align 1, !tbaa !13
  %661 = zext i8 %660 to i32
  %662 = and i32 %661, 223
  br label %668

663:                                              ; preds = %651, %645
  %664 = load ptr, ptr %5, align 8, !tbaa !5
  %665 = getelementptr inbounds i8, ptr %664, i64 3
  %666 = load i8, ptr %665, align 1, !tbaa !13
  %667 = zext i8 %666 to i32
  br label %668

668:                                              ; preds = %663, %657
  %669 = phi i32 [ %662, %657 ], [ %667, %663 ]
  %670 = sext i32 %669 to i64
  %671 = shl i64 %670, 24
  %672 = load i64, ptr %9, align 8, !tbaa !9
  %673 = add i64 %672, %671
  store i64 %673, ptr %9, align 8, !tbaa !9
  br label %674

674:                                              ; preds = %668, %438
  %675 = load ptr, ptr %5, align 8, !tbaa !5
  %676 = getelementptr inbounds i8, ptr %675, i64 2
  %677 = load i8, ptr %676, align 1, !tbaa !13
  %678 = zext i8 %677 to i32
  %679 = icmp sge i32 %678, 97
  br i1 %679, label %680, label %692

680:                                              ; preds = %674
  %681 = load ptr, ptr %5, align 8, !tbaa !5
  %682 = getelementptr inbounds i8, ptr %681, i64 2
  %683 = load i8, ptr %682, align 1, !tbaa !13
  %684 = zext i8 %683 to i32
  %685 = icmp sle i32 %684, 122
  br i1 %685, label %686, label %692

686:                                              ; preds = %680
  %687 = load ptr, ptr %5, align 8, !tbaa !5
  %688 = getelementptr inbounds i8, ptr %687, i64 2
  %689 = load i8, ptr %688, align 1, !tbaa !13
  %690 = zext i8 %689 to i32
  %691 = and i32 %690, 223
  br label %697

692:                                              ; preds = %680, %674
  %693 = load ptr, ptr %5, align 8, !tbaa !5
  %694 = getelementptr inbounds i8, ptr %693, i64 2
  %695 = load i8, ptr %694, align 1, !tbaa !13
  %696 = zext i8 %695 to i32
  br label %697

697:                                              ; preds = %692, %686
  %698 = phi i32 [ %691, %686 ], [ %696, %692 ]
  %699 = sext i32 %698 to i64
  %700 = shl i64 %699, 16
  %701 = load i64, ptr %9, align 8, !tbaa !9
  %702 = add i64 %701, %700
  store i64 %702, ptr %9, align 8, !tbaa !9
  br label %703

703:                                              ; preds = %697, %438
  %704 = load ptr, ptr %5, align 8, !tbaa !5
  %705 = getelementptr inbounds i8, ptr %704, i64 1
  %706 = load i8, ptr %705, align 1, !tbaa !13
  %707 = zext i8 %706 to i32
  %708 = icmp sge i32 %707, 97
  br i1 %708, label %709, label %721

709:                                              ; preds = %703
  %710 = load ptr, ptr %5, align 8, !tbaa !5
  %711 = getelementptr inbounds i8, ptr %710, i64 1
  %712 = load i8, ptr %711, align 1, !tbaa !13
  %713 = zext i8 %712 to i32
  %714 = icmp sle i32 %713, 122
  br i1 %714, label %715, label %721

715:                                              ; preds = %709
  %716 = load ptr, ptr %5, align 8, !tbaa !5
  %717 = getelementptr inbounds i8, ptr %716, i64 1
  %718 = load i8, ptr %717, align 1, !tbaa !13
  %719 = zext i8 %718 to i32
  %720 = and i32 %719, 223
  br label %726

721:                                              ; preds = %709, %703
  %722 = load ptr, ptr %5, align 8, !tbaa !5
  %723 = getelementptr inbounds i8, ptr %722, i64 1
  %724 = load i8, ptr %723, align 1, !tbaa !13
  %725 = zext i8 %724 to i32
  br label %726

726:                                              ; preds = %721, %715
  %727 = phi i32 [ %720, %715 ], [ %725, %721 ]
  %728 = sext i32 %727 to i64
  %729 = shl i64 %728, 8
  %730 = load i64, ptr %9, align 8, !tbaa !9
  %731 = add i64 %730, %729
  store i64 %731, ptr %9, align 8, !tbaa !9
  br label %732

732:                                              ; preds = %726, %438
  %733 = load ptr, ptr %5, align 8, !tbaa !5
  %734 = getelementptr inbounds i8, ptr %733, i64 0
  %735 = load i8, ptr %734, align 1, !tbaa !13
  %736 = zext i8 %735 to i32
  %737 = icmp sge i32 %736, 97
  br i1 %737, label %738, label %750

738:                                              ; preds = %732
  %739 = load ptr, ptr %5, align 8, !tbaa !5
  %740 = getelementptr inbounds i8, ptr %739, i64 0
  %741 = load i8, ptr %740, align 1, !tbaa !13
  %742 = zext i8 %741 to i32
  %743 = icmp sle i32 %742, 122
  br i1 %743, label %744, label %750

744:                                              ; preds = %738
  %745 = load ptr, ptr %5, align 8, !tbaa !5
  %746 = getelementptr inbounds i8, ptr %745, i64 0
  %747 = load i8, ptr %746, align 1, !tbaa !13
  %748 = zext i8 %747 to i32
  %749 = and i32 %748, 223
  br label %755

750:                                              ; preds = %738, %732
  %751 = load ptr, ptr %5, align 8, !tbaa !5
  %752 = getelementptr inbounds i8, ptr %751, i64 0
  %753 = load i8, ptr %752, align 1, !tbaa !13
  %754 = zext i8 %753 to i32
  br label %755

755:                                              ; preds = %750, %744
  %756 = phi i32 [ %749, %744 ], [ %754, %750 ]
  %757 = sext i32 %756 to i64
  %758 = load i64, ptr %9, align 8, !tbaa !9
  %759 = add i64 %758, %757
  store i64 %759, ptr %9, align 8, !tbaa !9
  br label %760

760:                                              ; preds = %755, %438
  %761 = load i64, ptr %10, align 8, !tbaa !9
  %762 = load i64, ptr %9, align 8, !tbaa !9
  %763 = sub i64 %762, %761
  store i64 %763, ptr %9, align 8, !tbaa !9
  %764 = load i64, ptr %11, align 8, !tbaa !9
  %765 = load i64, ptr %9, align 8, !tbaa !9
  %766 = sub i64 %765, %764
  store i64 %766, ptr %9, align 8, !tbaa !9
  %767 = load i64, ptr %11, align 8, !tbaa !9
  %768 = lshr i64 %767, 13
  %769 = load i64, ptr %9, align 8, !tbaa !9
  %770 = xor i64 %769, %768
  store i64 %770, ptr %9, align 8, !tbaa !9
  %771 = load i64, ptr %11, align 8, !tbaa !9
  %772 = load i64, ptr %10, align 8, !tbaa !9
  %773 = sub i64 %772, %771
  store i64 %773, ptr %10, align 8, !tbaa !9
  %774 = load i64, ptr %9, align 8, !tbaa !9
  %775 = load i64, ptr %10, align 8, !tbaa !9
  %776 = sub i64 %775, %774
  store i64 %776, ptr %10, align 8, !tbaa !9
  %777 = load i64, ptr %9, align 8, !tbaa !9
  %778 = shl i64 %777, 8
  %779 = load i64, ptr %10, align 8, !tbaa !9
  %780 = xor i64 %779, %778
  store i64 %780, ptr %10, align 8, !tbaa !9
  %781 = load i64, ptr %9, align 8, !tbaa !9
  %782 = load i64, ptr %11, align 8, !tbaa !9
  %783 = sub i64 %782, %781
  store i64 %783, ptr %11, align 8, !tbaa !9
  %784 = load i64, ptr %10, align 8, !tbaa !9
  %785 = load i64, ptr %11, align 8, !tbaa !9
  %786 = sub i64 %785, %784
  store i64 %786, ptr %11, align 8, !tbaa !9
  %787 = load i64, ptr %10, align 8, !tbaa !9
  %788 = lshr i64 %787, 13
  %789 = load i64, ptr %11, align 8, !tbaa !9
  %790 = xor i64 %789, %788
  store i64 %790, ptr %11, align 8, !tbaa !9
  %791 = load i64, ptr %10, align 8, !tbaa !9
  %792 = load i64, ptr %9, align 8, !tbaa !9
  %793 = sub i64 %792, %791
  store i64 %793, ptr %9, align 8, !tbaa !9
  %794 = load i64, ptr %11, align 8, !tbaa !9
  %795 = load i64, ptr %9, align 8, !tbaa !9
  %796 = sub i64 %795, %794
  store i64 %796, ptr %9, align 8, !tbaa !9
  %797 = load i64, ptr %11, align 8, !tbaa !9
  %798 = lshr i64 %797, 12
  %799 = load i64, ptr %9, align 8, !tbaa !9
  %800 = xor i64 %799, %798
  store i64 %800, ptr %9, align 8, !tbaa !9
  %801 = load i64, ptr %11, align 8, !tbaa !9
  %802 = load i64, ptr %10, align 8, !tbaa !9
  %803 = sub i64 %802, %801
  store i64 %803, ptr %10, align 8, !tbaa !9
  %804 = load i64, ptr %9, align 8, !tbaa !9
  %805 = load i64, ptr %10, align 8, !tbaa !9
  %806 = sub i64 %805, %804
  store i64 %806, ptr %10, align 8, !tbaa !9
  %807 = load i64, ptr %9, align 8, !tbaa !9
  %808 = shl i64 %807, 16
  %809 = load i64, ptr %10, align 8, !tbaa !9
  %810 = xor i64 %809, %808
  store i64 %810, ptr %10, align 8, !tbaa !9
  %811 = load i64, ptr %9, align 8, !tbaa !9
  %812 = load i64, ptr %11, align 8, !tbaa !9
  %813 = sub i64 %812, %811
  store i64 %813, ptr %11, align 8, !tbaa !9
  %814 = load i64, ptr %10, align 8, !tbaa !9
  %815 = load i64, ptr %11, align 8, !tbaa !9
  %816 = sub i64 %815, %814
  store i64 %816, ptr %11, align 8, !tbaa !9
  %817 = load i64, ptr %10, align 8, !tbaa !9
  %818 = lshr i64 %817, 5
  %819 = load i64, ptr %11, align 8, !tbaa !9
  %820 = xor i64 %819, %818
  store i64 %820, ptr %11, align 8, !tbaa !9
  %821 = load i64, ptr %10, align 8, !tbaa !9
  %822 = load i64, ptr %9, align 8, !tbaa !9
  %823 = sub i64 %822, %821
  store i64 %823, ptr %9, align 8, !tbaa !9
  %824 = load i64, ptr %11, align 8, !tbaa !9
  %825 = load i64, ptr %9, align 8, !tbaa !9
  %826 = sub i64 %825, %824
  store i64 %826, ptr %9, align 8, !tbaa !9
  %827 = load i64, ptr %11, align 8, !tbaa !9
  %828 = lshr i64 %827, 3
  %829 = load i64, ptr %9, align 8, !tbaa !9
  %830 = xor i64 %829, %828
  store i64 %830, ptr %9, align 8, !tbaa !9
  %831 = load i64, ptr %11, align 8, !tbaa !9
  %832 = load i64, ptr %10, align 8, !tbaa !9
  %833 = sub i64 %832, %831
  store i64 %833, ptr %10, align 8, !tbaa !9
  %834 = load i64, ptr %9, align 8, !tbaa !9
  %835 = load i64, ptr %10, align 8, !tbaa !9
  %836 = sub i64 %835, %834
  store i64 %836, ptr %10, align 8, !tbaa !9
  %837 = load i64, ptr %9, align 8, !tbaa !9
  %838 = shl i64 %837, 10
  %839 = load i64, ptr %10, align 8, !tbaa !9
  %840 = xor i64 %839, %838
  store i64 %840, ptr %10, align 8, !tbaa !9
  %841 = load i64, ptr %9, align 8, !tbaa !9
  %842 = load i64, ptr %11, align 8, !tbaa !9
  %843 = sub i64 %842, %841
  store i64 %843, ptr %11, align 8, !tbaa !9
  %844 = load i64, ptr %10, align 8, !tbaa !9
  %845 = load i64, ptr %11, align 8, !tbaa !9
  %846 = sub i64 %845, %844
  store i64 %846, ptr %11, align 8, !tbaa !9
  %847 = load i64, ptr %10, align 8, !tbaa !9
  %848 = lshr i64 %847, 15
  %849 = load i64, ptr %11, align 8, !tbaa !9
  %850 = xor i64 %849, %848
  store i64 %850, ptr %11, align 8, !tbaa !9
  %851 = load i64, ptr %11, align 8, !tbaa !9
  %852 = trunc i64 %851 to i32
  %853 = load i32, ptr %8, align 4, !tbaa !11
  %854 = srem i32 %852, %853
  store i32 %854, ptr %13, align 4, !tbaa !11
  %855 = load i32, ptr %13, align 4, !tbaa !11
  %856 = icmp slt i32 %855, 0
  br i1 %856, label %857, label %861

857:                                              ; preds = %760
  %858 = load i32, ptr %8, align 4, !tbaa !11
  %859 = load i32, ptr %13, align 4, !tbaa !11
  %860 = add nsw i32 %859, %858
  store i32 %860, ptr %13, align 4, !tbaa !11
  br label %861

861:                                              ; preds = %857, %760
  %862 = load i32, ptr %13, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #2
  ret i32 %862
}

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

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

attributes #0 = { 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 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!7, !7, i64 0}
!14 = distinct !{!14, !15}
!15 = !{!"llvm.loop.mustprogress"}


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

; Function Attrs: nofree norecurse nosync nounwind memory(read, inaccessiblemem: none) uwtable
define dso_local i32 @string_array_hash(ptr nocapture noundef readonly %0, i64 noundef %1, i64 noundef %2, i32 noundef %3) local_unnamed_addr #0 {
  %5 = icmp ugt i64 %1, 11
  br i1 %5, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %4, %.lr.ph
  %.0227364 = phi i64 [ %122, %.lr.ph ], [ %1, %4 ]
  %.0228363 = phi i64 [ %120, %.lr.ph ], [ %2, %4 ]
  %.0229362 = phi i64 [ %116, %.lr.ph ], [ 2654435769, %4 ]
  %.0238361 = phi i64 [ %112, %.lr.ph ], [ 2654435769, %4 ]
  %.0243360 = phi ptr [ %121, %.lr.ph ], [ %0, %4 ]
  %6 = load i8, ptr %.0243360, align 1, !tbaa !5
  %7 = add i8 %6, -97
  %or.cond = icmp ult i8 %7, 26
  %8 = and i8 %6, 95
  %spec.select313 = select i1 %or.cond, i8 %8, i8 %6
  %9 = zext i8 %spec.select313 to i64
  %10 = getelementptr inbounds i8, ptr %.0243360, i64 1
  %11 = load i8, ptr %10, align 1, !tbaa !5
  %12 = add i8 %11, -97
  %or.cond291 = icmp ult i8 %12, 26
  %13 = and i8 %11, 95
  %.in280 = select i1 %or.cond291, i8 %13, i8 %11
  %14 = zext i8 %.in280 to i64
  %15 = shl nuw nsw i64 %14, 8
  %16 = getelementptr inbounds i8, ptr %.0243360, i64 2
  %17 = load i8, ptr %16, align 1, !tbaa !5
  %18 = add i8 %17, -97
  %or.cond292 = icmp ult i8 %18, 26
  %19 = and i8 %17, 95
  %.in281 = select i1 %or.cond292, i8 %19, i8 %17
  %20 = zext i8 %.in281 to i64
  %21 = shl nuw nsw i64 %20, 16
  %22 = getelementptr inbounds i8, ptr %.0243360, i64 3
  %23 = load i8, ptr %22, align 1, !tbaa !5
  %24 = add i8 %23, -97
  %or.cond293 = icmp ult i8 %24, 26
  %25 = and i8 %23, 95
  %.in282 = select i1 %or.cond293, i8 %25, i8 %23
  %26 = zext i8 %.in282 to i64
  %27 = shl nuw nsw i64 %26, 24
  %28 = getelementptr inbounds i8, ptr %.0243360, i64 4
  %29 = load i8, ptr %28, align 1, !tbaa !5
  %30 = add i8 %29, -97
  %or.cond294 = icmp ult i8 %30, 26
  %31 = and i8 %29, 95
  %.in283 = select i1 %or.cond294, i8 %31, i8 %29
  %32 = zext i8 %.in283 to i64
  %33 = getelementptr inbounds i8, ptr %.0243360, i64 5
  %34 = load i8, ptr %33, align 1, !tbaa !5
  %35 = add i8 %34, -97
  %or.cond295 = icmp ult i8 %35, 26
  %36 = and i8 %34, 95
  %.in284 = select i1 %or.cond295, i8 %36, i8 %34
  %37 = zext i8 %.in284 to i64
  %38 = shl nuw nsw i64 %37, 8
  %39 = getelementptr inbounds i8, ptr %.0243360, i64 6
  %40 = load i8, ptr %39, align 1, !tbaa !5
  %41 = add i8 %40, -97
  %or.cond296 = icmp ult i8 %41, 26
  %42 = and i8 %40, 95
  %.in285 = select i1 %or.cond296, i8 %42, i8 %40
  %43 = zext i8 %.in285 to i64
  %44 = shl nuw nsw i64 %43, 16
  %45 = getelementptr inbounds i8, ptr %.0243360, i64 7
  %46 = load i8, ptr %45, align 1, !tbaa !5
  %47 = add i8 %46, -97
  %or.cond297 = icmp ult i8 %47, 26
  %48 = and i8 %46, 95
  %.in286 = select i1 %or.cond297, i8 %48, i8 %46
  %49 = zext i8 %.in286 to i64
  %50 = shl nuw nsw i64 %49, 24
  %51 = add i64 %.0229362, %32
  %52 = add i64 %51, %38
  %53 = add i64 %52, %44
  %54 = add i64 %53, %50
  %55 = getelementptr inbounds i8, ptr %.0243360, i64 8
  %56 = load i8, ptr %55, align 1, !tbaa !5
  %57 = add i8 %56, -97
  %or.cond298 = icmp ult i8 %57, 26
  %58 = and i8 %56, 95
  %.in287 = select i1 %or.cond298, i8 %58, i8 %56
  %59 = zext i8 %.in287 to i64
  %60 = getelementptr inbounds i8, ptr %.0243360, i64 9
  %61 = load i8, ptr %60, align 1, !tbaa !5
  %62 = add i8 %61, -97
  %or.cond299 = icmp ult i8 %62, 26
  %63 = and i8 %61, 95
  %.in288 = select i1 %or.cond299, i8 %63, i8 %61
  %64 = zext i8 %.in288 to i64
  %65 = shl nuw nsw i64 %64, 8
  %66 = getelementptr inbounds i8, ptr %.0243360, i64 10
  %67 = load i8, ptr %66, align 1, !tbaa !5
  %68 = add i8 %67, -97
  %or.cond300 = icmp ult i8 %68, 26
  %69 = and i8 %67, 95
  %.in289 = select i1 %or.cond300, i8 %69, i8 %67
  %70 = zext i8 %.in289 to i64
  %71 = shl nuw nsw i64 %70, 16
  %72 = getelementptr inbounds i8, ptr %.0243360, i64 11
  %73 = load i8, ptr %72, align 1, !tbaa !5
  %74 = add i8 %73, -97
  %or.cond301 = icmp ult i8 %74, 26
  %75 = and i8 %73, 95
  %.in290 = select i1 %or.cond301, i8 %75, i8 %73
  %76 = zext i8 %.in290 to i64
  %77 = shl nuw nsw i64 %76, 24
  %78 = add i64 %.0228363, %59
  %79 = add i64 %78, %65
  %80 = add i64 %79, %71
  %81 = add i64 %80, %77
  %82 = add i64 %.0238361, %9
  %83 = add i64 %82, %15
  %.neg343 = add i64 %83, %21
  %84 = add i64 %.neg343, %27
  %85 = add i64 %54, %81
  %86 = sub i64 %84, %85
  %87 = lshr i64 %81, 13
  %88 = xor i64 %86, %87
  %89 = add i64 %81, %88
  %90 = sub i64 %54, %89
  %91 = shl i64 %88, 8
  %92 = xor i64 %90, %91
  %93 = add i64 %88, %92
  %94 = sub i64 %81, %93
  %95 = lshr i64 %92, 13
  %96 = xor i64 %94, %95
  %97 = add i64 %92, %96
  %98 = sub i64 %88, %97
  %99 = lshr i64 %96, 12
  %100 = xor i64 %98, %99
  %101 = add i64 %96, %100
  %102 = sub i64 %92, %101
  %103 = shl i64 %100, 16
  %104 = xor i64 %102, %103
  %105 = add i64 %100, %104
  %106 = sub i64 %96, %105
  %107 = lshr i64 %104, 5
  %108 = xor i64 %106, %107
  %109 = add i64 %104, %108
  %110 = sub i64 %100, %109
  %111 = lshr i64 %108, 3
  %112 = xor i64 %110, %111
  %113 = add i64 %108, %112
  %114 = sub i64 %104, %113
  %115 = shl i64 %112, 10
  %116 = xor i64 %114, %115
  %117 = add i64 %112, %116
  %118 = sub i64 %108, %117
  %119 = lshr i64 %116, 15
  %120 = xor i64 %118, %119
  %121 = getelementptr inbounds i8, ptr %.0243360, i64 12
  %122 = add i64 %.0227364, -12
  %123 = icmp ugt i64 %122, 11
  br i1 %123, label %.lr.ph, label %._crit_edge, !llvm.loop !8

._crit_edge:                                      ; preds = %.lr.ph, %4
  %.0243.lcssa = phi ptr [ %0, %4 ], [ %121, %.lr.ph ]
  %.0238.lcssa = phi i64 [ 2654435769, %4 ], [ %112, %.lr.ph ]
  %.0229.lcssa = phi i64 [ 2654435769, %4 ], [ %116, %.lr.ph ]
  %.0228.lcssa = phi i64 [ %2, %4 ], [ %120, %.lr.ph ]
  %.0227.lcssa = phi i64 [ %1, %4 ], [ %122, %.lr.ph ]
  %124 = add i64 %.0228.lcssa, %1
  switch i64 %.0227.lcssa, label %210 [
    i64 11, label %125
    i64 10, label %133
    i64 9, label %141
    i64 8, label %149
    i64 7, label %157
    i64 6, label %165
    i64 5, label %173
    i64 4, label %180
    i64 3, label %188
    i64 2, label %196
    i64 1, label %204
  ]

125:                                              ; preds = %._crit_edge
  %126 = getelementptr inbounds i8, ptr %.0243.lcssa, i64 10
  %127 = load i8, ptr %126, align 1, !tbaa !5
  %128 = add i8 %127, -97
  %or.cond302 = icmp ult i8 %128, 26
  %129 = and i8 %127, 95
  %spec.select314 = select i1 %or.cond302, i8 %129, i8 %127
  %130 = zext i8 %spec.select314 to i64
  %131 = shl nuw nsw i64 %130, 24
  %132 = add i64 %131, %124
  br label %133

133:                                              ; preds = %125, %._crit_edge
  %.1 = phi i64 [ %124, %._crit_edge ], [ %132, %125 ]
  %134 = getelementptr inbounds i8, ptr %.0243.lcssa, i64 9
  %135 = load i8, ptr %134, align 1, !tbaa !5
  %136 = add i8 %135, -97
  %or.cond303 = icmp ult i8 %136, 26
  %137 = and i8 %135, 95
  %spec.select315 = select i1 %or.cond303, i8 %137, i8 %135
  %138 = zext i8 %spec.select315 to i64
  %139 = shl nuw nsw i64 %138, 16
  %140 = add i64 %139, %.1
  br label %141

141:                                              ; preds = %133, %._crit_edge
  %.2 = phi i64 [ %124, %._crit_edge ], [ %140, %133 ]
  %142 = getelementptr inbounds i8, ptr %.0243.lcssa, i64 8
  %143 = load i8, ptr %142, align 1, !tbaa !5
  %144 = add i8 %143, -97
  %or.cond304 = icmp ult i8 %144, 26
  %145 = and i8 %143, 95
  %spec.select316 = select i1 %or.cond304, i8 %145, i8 %143
  %146 = zext i8 %spec.select316 to i64
  %147 = shl nuw nsw i64 %146, 8
  %148 = add i64 %147, %.2
  br label %149

149:                                              ; preds = %141, %._crit_edge
  %.3 = phi i64 [ %124, %._crit_edge ], [ %148, %141 ]
  %150 = getelementptr inbounds i8, ptr %.0243.lcssa, i64 7
  %151 = load i8, ptr %150, align 1, !tbaa !5
  %152 = add i8 %151, -97
  %or.cond305 = icmp ult i8 %152, 26
  %153 = and i8 %151, 95
  %spec.select317 = select i1 %or.cond305, i8 %153, i8 %151
  %154 = zext i8 %spec.select317 to i64
  %155 = shl nuw nsw i64 %154, 24
  %156 = add i64 %155, %.0229.lcssa
  br label %157

157:                                              ; preds = %149, %._crit_edge
  %.1230 = phi i64 [ %.0229.lcssa, %._crit_edge ], [ %156, %149 ]
  %.4 = phi i64 [ %124, %._crit_edge ], [ %.3, %149 ]
  %158 = getelementptr inbounds i8, ptr %.0243.lcssa, i64 6
  %159 = load i8, ptr %158, align 1, !tbaa !5
  %160 = add i8 %159, -97
  %or.cond306 = icmp ult i8 %160, 26
  %161 = and i8 %159, 95
  %spec.select318 = select i1 %or.cond306, i8 %161, i8 %159
  %162 = zext i8 %spec.select318 to i64
  %163 = shl nuw nsw i64 %162, 16
  %164 = add i64 %163, %.1230
  br label %165

165:                                              ; preds = %157, %._crit_edge
  %.2231 = phi i64 [ %.0229.lcssa, %._crit_edge ], [ %164, %157 ]
  %.5 = phi i64 [ %124, %._crit_edge ], [ %.4, %157 ]
  %166 = getelementptr inbounds i8, ptr %.0243.lcssa, i64 5
  %167 = load i8, ptr %166, align 1, !tbaa !5
  %168 = add i8 %167, -97
  %or.cond307 = icmp ult i8 %168, 26
  %169 = and i8 %167, 95
  %spec.select319 = select i1 %or.cond307, i8 %169, i8 %167
  %170 = zext i8 %spec.select319 to i64
  %171 = shl nuw nsw i64 %170, 8
  %172 = add i64 %171, %.2231
  br label %173

173:                                              ; preds = %165, %._crit_edge
  %.3232 = phi i64 [ %.0229.lcssa, %._crit_edge ], [ %172, %165 ]
  %.6 = phi i64 [ %124, %._crit_edge ], [ %.5, %165 ]
  %174 = getelementptr inbounds i8, ptr %.0243.lcssa, i64 4
  %175 = load i8, ptr %174, align 1, !tbaa !5
  %176 = add i8 %175, -97
  %or.cond308 = icmp ult i8 %176, 26
  %177 = and i8 %175, 95
  %spec.select320 = select i1 %or.cond308, i8 %177, i8 %175
  %178 = zext i8 %spec.select320 to i64
  %179 = add i64 %.3232, %178
  br label %180

180:                                              ; preds = %173, %._crit_edge
  %.4233 = phi i64 [ %.0229.lcssa, %._crit_edge ], [ %179, %173 ]
  %.7 = phi i64 [ %124, %._crit_edge ], [ %.6, %173 ]
  %181 = getelementptr inbounds i8, ptr %.0243.lcssa, i64 3
  %182 = load i8, ptr %181, align 1, !tbaa !5
  %183 = add i8 %182, -97
  %or.cond309 = icmp ult i8 %183, 26
  %184 = and i8 %182, 95
  %spec.select321 = select i1 %or.cond309, i8 %184, i8 %182
  %185 = zext i8 %spec.select321 to i64
  %186 = shl nuw nsw i64 %185, 24
  %187 = add i64 %186, %.0238.lcssa
  br label %188

188:                                              ; preds = %180, %._crit_edge
  %.1239 = phi i64 [ %.0238.lcssa, %._crit_edge ], [ %187, %180 ]
  %.5234 = phi i64 [ %.0229.lcssa, %._crit_edge ], [ %.4233, %180 ]
  %.8 = phi i64 [ %124, %._crit_edge ], [ %.7, %180 ]
  %189 = getelementptr inbounds i8, ptr %.0243.lcssa, i64 2
  %190 = load i8, ptr %189, align 1, !tbaa !5
  %191 = add i8 %190, -97
  %or.cond310 = icmp ult i8 %191, 26
  %192 = and i8 %190, 95
  %spec.select322 = select i1 %or.cond310, i8 %192, i8 %190
  %193 = zext i8 %spec.select322 to i64
  %194 = shl nuw nsw i64 %193, 16
  %195 = add i64 %194, %.1239
  br label %196

196:                                              ; preds = %188, %._crit_edge
  %.2240 = phi i64 [ %.0238.lcssa, %._crit_edge ], [ %195, %188 ]
  %.6235 = phi i64 [ %.0229.lcssa, %._crit_edge ], [ %.5234, %188 ]
  %.9 = phi i64 [ %124, %._crit_edge ], [ %.8, %188 ]
  %197 = getelementptr inbounds i8, ptr %.0243.lcssa, i64 1
  %198 = load i8, ptr %197, align 1, !tbaa !5
  %199 = add i8 %198, -97
  %or.cond311 = icmp ult i8 %199, 26
  %200 = and i8 %198, 95
  %spec.select323 = select i1 %or.cond311, i8 %200, i8 %198
  %201 = zext i8 %spec.select323 to i64
  %202 = shl nuw nsw i64 %201, 8
  %203 = add i64 %202, %.2240
  br label %204

204:                                              ; preds = %196, %._crit_edge
  %.3241 = phi i64 [ %.0238.lcssa, %._crit_edge ], [ %203, %196 ]
  %.7236 = phi i64 [ %.0229.lcssa, %._crit_edge ], [ %.6235, %196 ]
  %.10 = phi i64 [ %124, %._crit_edge ], [ %.9, %196 ]
  %205 = load i8, ptr %.0243.lcssa, align 1, !tbaa !5
  %206 = add i8 %205, -97
  %or.cond312 = icmp ult i8 %206, 26
  %207 = and i8 %205, 95
  %spec.select324 = select i1 %or.cond312, i8 %207, i8 %205
  %208 = zext i8 %spec.select324 to i64
  %209 = add i64 %.3241, %208
  br label %210

210:                                              ; preds = %204, %._crit_edge
  %.4242 = phi i64 [ %.0238.lcssa, %._crit_edge ], [ %209, %204 ]
  %.8237 = phi i64 [ %.0229.lcssa, %._crit_edge ], [ %.7236, %204 ]
  %.11 = phi i64 [ %124, %._crit_edge ], [ %.10, %204 ]
  %211 = add i64 %.8237, %.11
  %212 = sub i64 %.4242, %211
  %213 = lshr i64 %.11, 13
  %214 = xor i64 %212, %213
  %215 = add i64 %.11, %214
  %216 = sub i64 %.8237, %215
  %217 = shl i64 %214, 8
  %218 = xor i64 %216, %217
  %219 = add i64 %214, %218
  %220 = sub i64 %.11, %219
  %221 = lshr i64 %218, 13
  %222 = xor i64 %220, %221
  %223 = add i64 %218, %222
  %224 = sub i64 %214, %223
  %225 = lshr i64 %222, 12
  %226 = xor i64 %224, %225
  %227 = add i64 %222, %226
  %228 = sub i64 %218, %227
  %229 = shl i64 %226, 16
  %230 = xor i64 %228, %229
  %231 = add i64 %226, %230
  %232 = sub i64 %222, %231
  %233 = lshr i64 %230, 5
  %234 = xor i64 %232, %233
  %235 = add i64 %230, %234
  %236 = sub i64 %226, %235
  %237 = lshr i64 %234, 3
  %238 = xor i64 %236, %237
  %239 = add i64 %234, %238
  %240 = sub i64 %230, %239
  %241 = shl i64 %238, 10
  %242 = xor i64 %240, %241
  %243 = add i64 %238, %242
  %244 = sub i64 %234, %243
  %245 = lshr i64 %242, 15
  %246 = xor i64 %244, %245
  %247 = trunc i64 %246 to i32
  %248 = srem i32 %247, %3
  %249 = icmp slt i32 %248, 0
  %250 = select i1 %249, i32 %3, i32 0
  %spec.select = add nsw i32 %250, %248
  ret i32 %spec.select
}

attributes #0 = { nofree norecurse nosync nounwind memory(read, inaccessiblemem: none) 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" }

!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 = !{!"omnipotent char", !7, i64 0}
!7 = !{!"Simple C/C++ TBAA"}
!8 = distinct !{!8, !9}
!9 = !{!"llvm.loop.mustprogress"}


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