; LLVM IR from rweather/lightweight-crypto :: src/combined (internal-forkskinny)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.forkskinny_128_384_state_t = type { [4 x i32], [4 x i32], [4 x i32], [4 x i32] }

@RC = external hidden constant [87 x i8], align 16

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

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

; Function Attrs: nounwind uwtable
define dso_local void @forkskinny_128_384_rounds(ptr noundef %0, i32 noundef %1, i32 noundef %2) #1 {
  %4 = alloca ptr, align 8
  %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 i8, align 1
  %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 ptr %0, ptr %4, align 8, !tbaa !5
  store i32 %1, ptr %5, align 4, !tbaa !9
  store i32 %2, ptr %6, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #2
  call void @llvm.lifetime.start.p0(i64 1, ptr %12) #2
  %33 = load ptr, ptr %4, align 8, !tbaa !5
  %34 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %33, i32 0, i32 3
  %35 = getelementptr inbounds [4 x i32], ptr %34, i64 0, i64 0
  %36 = load i32, ptr %35, align 4, !tbaa !9
  store i32 %36, ptr %7, align 4, !tbaa !9
  %37 = load ptr, ptr %4, align 8, !tbaa !5
  %38 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %37, i32 0, i32 3
  %39 = getelementptr inbounds [4 x i32], ptr %38, i64 0, i64 1
  %40 = load i32, ptr %39, align 4, !tbaa !9
  store i32 %40, ptr %8, align 4, !tbaa !9
  %41 = load ptr, ptr %4, align 8, !tbaa !5
  %42 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %41, i32 0, i32 3
  %43 = getelementptr inbounds [4 x i32], ptr %42, i64 0, i64 2
  %44 = load i32, ptr %43, align 4, !tbaa !9
  store i32 %44, ptr %9, align 4, !tbaa !9
  %45 = load ptr, ptr %4, align 8, !tbaa !5
  %46 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %45, i32 0, i32 3
  %47 = getelementptr inbounds [4 x i32], ptr %46, i64 0, i64 3
  %48 = load i32, ptr %47, align 4, !tbaa !9
  store i32 %48, ptr %10, align 4, !tbaa !9
  br label %49

49:                                               ; preds = %736, %3
  %50 = load i32, ptr %5, align 4, !tbaa !9
  %51 = load i32, ptr %6, align 4, !tbaa !9
  %52 = icmp ult i32 %50, %51
  br i1 %52, label %53, label %739

53:                                               ; preds = %49
  br label %54

54:                                               ; preds = %53
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #2
  %55 = load i32, ptr %7, align 4, !tbaa !9
  %56 = xor i32 %55, -1
  store i32 %56, ptr %7, align 4, !tbaa !9
  %57 = load i32, ptr %7, align 4, !tbaa !9
  %58 = lshr i32 %57, 2
  %59 = load i32, ptr %7, align 4, !tbaa !9
  %60 = lshr i32 %59, 3
  %61 = and i32 %58, %60
  %62 = and i32 %61, 286331153
  %63 = load i32, ptr %7, align 4, !tbaa !9
  %64 = xor i32 %63, %62
  store i32 %64, ptr %7, align 4, !tbaa !9
  %65 = load i32, ptr %7, align 4, !tbaa !9
  %66 = shl i32 %65, 5
  %67 = load i32, ptr %7, align 4, !tbaa !9
  %68 = shl i32 %67, 1
  %69 = and i32 %66, %68
  %70 = and i32 %69, 538976288
  store i32 %70, ptr %13, align 4, !tbaa !9
  %71 = load i32, ptr %7, align 4, !tbaa !9
  %72 = shl i32 %71, 5
  %73 = load i32, ptr %7, align 4, !tbaa !9
  %74 = shl i32 %73, 4
  %75 = and i32 %72, %74
  %76 = and i32 %75, 1077952576
  %77 = load i32, ptr %13, align 4, !tbaa !9
  %78 = xor i32 %76, %77
  %79 = load i32, ptr %7, align 4, !tbaa !9
  %80 = xor i32 %79, %78
  store i32 %80, ptr %7, align 4, !tbaa !9
  %81 = load i32, ptr %7, align 4, !tbaa !9
  %82 = shl i32 %81, 2
  %83 = load i32, ptr %7, align 4, !tbaa !9
  %84 = shl i32 %83, 1
  %85 = and i32 %82, %84
  %86 = and i32 %85, -2139062144
  store i32 %86, ptr %13, align 4, !tbaa !9
  %87 = load i32, ptr %7, align 4, !tbaa !9
  %88 = lshr i32 %87, 2
  %89 = load i32, ptr %7, align 4, !tbaa !9
  %90 = shl i32 %89, 1
  %91 = and i32 %88, %90
  %92 = and i32 %91, 33686018
  %93 = load i32, ptr %13, align 4, !tbaa !9
  %94 = xor i32 %92, %93
  %95 = load i32, ptr %7, align 4, !tbaa !9
  %96 = xor i32 %95, %94
  store i32 %96, ptr %7, align 4, !tbaa !9
  %97 = load i32, ptr %7, align 4, !tbaa !9
  %98 = lshr i32 %97, 5
  %99 = load i32, ptr %7, align 4, !tbaa !9
  %100 = shl i32 %99, 1
  %101 = and i32 %98, %100
  %102 = and i32 %101, 67372036
  store i32 %102, ptr %13, align 4, !tbaa !9
  %103 = load i32, ptr %7, align 4, !tbaa !9
  %104 = lshr i32 %103, 1
  %105 = load i32, ptr %7, align 4, !tbaa !9
  %106 = lshr i32 %105, 2
  %107 = and i32 %104, %106
  %108 = and i32 %107, 134744072
  %109 = load i32, ptr %13, align 4, !tbaa !9
  %110 = xor i32 %108, %109
  %111 = load i32, ptr %7, align 4, !tbaa !9
  %112 = xor i32 %111, %110
  store i32 %112, ptr %7, align 4, !tbaa !9
  %113 = load i32, ptr %7, align 4, !tbaa !9
  %114 = xor i32 %113, -1
  store i32 %114, ptr %7, align 4, !tbaa !9
  %115 = load i32, ptr %7, align 4, !tbaa !9
  %116 = and i32 %115, 134744072
  %117 = shl i32 %116, 1
  %118 = load i32, ptr %7, align 4, !tbaa !9
  %119 = and i32 %118, 842150450
  %120 = shl i32 %119, 2
  %121 = or i32 %117, %120
  %122 = load i32, ptr %7, align 4, !tbaa !9
  %123 = and i32 %122, 16843009
  %124 = shl i32 %123, 5
  %125 = or i32 %121, %124
  %126 = load i32, ptr %7, align 4, !tbaa !9
  %127 = and i32 %126, -2139062144
  %128 = lshr i32 %127, 6
  %129 = or i32 %125, %128
  %130 = load i32, ptr %7, align 4, !tbaa !9
  %131 = and i32 %130, 1077952576
  %132 = lshr i32 %131, 4
  %133 = or i32 %129, %132
  %134 = load i32, ptr %7, align 4, !tbaa !9
  %135 = and i32 %134, 67372036
  %136 = lshr i32 %135, 2
  %137 = or i32 %133, %136
  store i32 %137, ptr %7, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #2
  br label %138

138:                                              ; preds = %54
  br label %139

139:                                              ; preds = %138
  br label %140

140:                                              ; preds = %139
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #2
  %141 = load i32, ptr %8, align 4, !tbaa !9
  %142 = xor i32 %141, -1
  store i32 %142, ptr %8, align 4, !tbaa !9
  %143 = load i32, ptr %8, align 4, !tbaa !9
  %144 = lshr i32 %143, 2
  %145 = load i32, ptr %8, align 4, !tbaa !9
  %146 = lshr i32 %145, 3
  %147 = and i32 %144, %146
  %148 = and i32 %147, 286331153
  %149 = load i32, ptr %8, align 4, !tbaa !9
  %150 = xor i32 %149, %148
  store i32 %150, ptr %8, align 4, !tbaa !9
  %151 = load i32, ptr %8, align 4, !tbaa !9
  %152 = shl i32 %151, 5
  %153 = load i32, ptr %8, align 4, !tbaa !9
  %154 = shl i32 %153, 1
  %155 = and i32 %152, %154
  %156 = and i32 %155, 538976288
  store i32 %156, ptr %14, align 4, !tbaa !9
  %157 = load i32, ptr %8, align 4, !tbaa !9
  %158 = shl i32 %157, 5
  %159 = load i32, ptr %8, align 4, !tbaa !9
  %160 = shl i32 %159, 4
  %161 = and i32 %158, %160
  %162 = and i32 %161, 1077952576
  %163 = load i32, ptr %14, align 4, !tbaa !9
  %164 = xor i32 %162, %163
  %165 = load i32, ptr %8, align 4, !tbaa !9
  %166 = xor i32 %165, %164
  store i32 %166, ptr %8, align 4, !tbaa !9
  %167 = load i32, ptr %8, align 4, !tbaa !9
  %168 = shl i32 %167, 2
  %169 = load i32, ptr %8, align 4, !tbaa !9
  %170 = shl i32 %169, 1
  %171 = and i32 %168, %170
  %172 = and i32 %171, -2139062144
  store i32 %172, ptr %14, align 4, !tbaa !9
  %173 = load i32, ptr %8, align 4, !tbaa !9
  %174 = lshr i32 %173, 2
  %175 = load i32, ptr %8, align 4, !tbaa !9
  %176 = shl i32 %175, 1
  %177 = and i32 %174, %176
  %178 = and i32 %177, 33686018
  %179 = load i32, ptr %14, align 4, !tbaa !9
  %180 = xor i32 %178, %179
  %181 = load i32, ptr %8, align 4, !tbaa !9
  %182 = xor i32 %181, %180
  store i32 %182, ptr %8, align 4, !tbaa !9
  %183 = load i32, ptr %8, align 4, !tbaa !9
  %184 = lshr i32 %183, 5
  %185 = load i32, ptr %8, align 4, !tbaa !9
  %186 = shl i32 %185, 1
  %187 = and i32 %184, %186
  %188 = and i32 %187, 67372036
  store i32 %188, ptr %14, align 4, !tbaa !9
  %189 = load i32, ptr %8, align 4, !tbaa !9
  %190 = lshr i32 %189, 1
  %191 = load i32, ptr %8, align 4, !tbaa !9
  %192 = lshr i32 %191, 2
  %193 = and i32 %190, %192
  %194 = and i32 %193, 134744072
  %195 = load i32, ptr %14, align 4, !tbaa !9
  %196 = xor i32 %194, %195
  %197 = load i32, ptr %8, align 4, !tbaa !9
  %198 = xor i32 %197, %196
  store i32 %198, ptr %8, align 4, !tbaa !9
  %199 = load i32, ptr %8, align 4, !tbaa !9
  %200 = xor i32 %199, -1
  store i32 %200, ptr %8, align 4, !tbaa !9
  %201 = load i32, ptr %8, align 4, !tbaa !9
  %202 = and i32 %201, 134744072
  %203 = shl i32 %202, 1
  %204 = load i32, ptr %8, align 4, !tbaa !9
  %205 = and i32 %204, 842150450
  %206 = shl i32 %205, 2
  %207 = or i32 %203, %206
  %208 = load i32, ptr %8, align 4, !tbaa !9
  %209 = and i32 %208, 16843009
  %210 = shl i32 %209, 5
  %211 = or i32 %207, %210
  %212 = load i32, ptr %8, align 4, !tbaa !9
  %213 = and i32 %212, -2139062144
  %214 = lshr i32 %213, 6
  %215 = or i32 %211, %214
  %216 = load i32, ptr %8, align 4, !tbaa !9
  %217 = and i32 %216, 1077952576
  %218 = lshr i32 %217, 4
  %219 = or i32 %215, %218
  %220 = load i32, ptr %8, align 4, !tbaa !9
  %221 = and i32 %220, 67372036
  %222 = lshr i32 %221, 2
  %223 = or i32 %219, %222
  store i32 %223, ptr %8, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #2
  br label %224

224:                                              ; preds = %140
  br label %225

225:                                              ; preds = %224
  br label %226

226:                                              ; preds = %225
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #2
  %227 = load i32, ptr %9, align 4, !tbaa !9
  %228 = xor i32 %227, -1
  store i32 %228, ptr %9, align 4, !tbaa !9
  %229 = load i32, ptr %9, align 4, !tbaa !9
  %230 = lshr i32 %229, 2
  %231 = load i32, ptr %9, align 4, !tbaa !9
  %232 = lshr i32 %231, 3
  %233 = and i32 %230, %232
  %234 = and i32 %233, 286331153
  %235 = load i32, ptr %9, align 4, !tbaa !9
  %236 = xor i32 %235, %234
  store i32 %236, ptr %9, align 4, !tbaa !9
  %237 = load i32, ptr %9, align 4, !tbaa !9
  %238 = shl i32 %237, 5
  %239 = load i32, ptr %9, align 4, !tbaa !9
  %240 = shl i32 %239, 1
  %241 = and i32 %238, %240
  %242 = and i32 %241, 538976288
  store i32 %242, ptr %15, align 4, !tbaa !9
  %243 = load i32, ptr %9, align 4, !tbaa !9
  %244 = shl i32 %243, 5
  %245 = load i32, ptr %9, align 4, !tbaa !9
  %246 = shl i32 %245, 4
  %247 = and i32 %244, %246
  %248 = and i32 %247, 1077952576
  %249 = load i32, ptr %15, align 4, !tbaa !9
  %250 = xor i32 %248, %249
  %251 = load i32, ptr %9, align 4, !tbaa !9
  %252 = xor i32 %251, %250
  store i32 %252, ptr %9, align 4, !tbaa !9
  %253 = load i32, ptr %9, align 4, !tbaa !9
  %254 = shl i32 %253, 2
  %255 = load i32, ptr %9, align 4, !tbaa !9
  %256 = shl i32 %255, 1
  %257 = and i32 %254, %256
  %258 = and i32 %257, -2139062144
  store i32 %258, ptr %15, align 4, !tbaa !9
  %259 = load i32, ptr %9, align 4, !tbaa !9
  %260 = lshr i32 %259, 2
  %261 = load i32, ptr %9, align 4, !tbaa !9
  %262 = shl i32 %261, 1
  %263 = and i32 %260, %262
  %264 = and i32 %263, 33686018
  %265 = load i32, ptr %15, align 4, !tbaa !9
  %266 = xor i32 %264, %265
  %267 = load i32, ptr %9, align 4, !tbaa !9
  %268 = xor i32 %267, %266
  store i32 %268, ptr %9, align 4, !tbaa !9
  %269 = load i32, ptr %9, align 4, !tbaa !9
  %270 = lshr i32 %269, 5
  %271 = load i32, ptr %9, align 4, !tbaa !9
  %272 = shl i32 %271, 1
  %273 = and i32 %270, %272
  %274 = and i32 %273, 67372036
  store i32 %274, ptr %15, align 4, !tbaa !9
  %275 = load i32, ptr %9, align 4, !tbaa !9
  %276 = lshr i32 %275, 1
  %277 = load i32, ptr %9, align 4, !tbaa !9
  %278 = lshr i32 %277, 2
  %279 = and i32 %276, %278
  %280 = and i32 %279, 134744072
  %281 = load i32, ptr %15, align 4, !tbaa !9
  %282 = xor i32 %280, %281
  %283 = load i32, ptr %9, align 4, !tbaa !9
  %284 = xor i32 %283, %282
  store i32 %284, ptr %9, align 4, !tbaa !9
  %285 = load i32, ptr %9, align 4, !tbaa !9
  %286 = xor i32 %285, -1
  store i32 %286, ptr %9, align 4, !tbaa !9
  %287 = load i32, ptr %9, align 4, !tbaa !9
  %288 = and i32 %287, 134744072
  %289 = shl i32 %288, 1
  %290 = load i32, ptr %9, align 4, !tbaa !9
  %291 = and i32 %290, 842150450
  %292 = shl i32 %291, 2
  %293 = or i32 %289, %292
  %294 = load i32, ptr %9, align 4, !tbaa !9
  %295 = and i32 %294, 16843009
  %296 = shl i32 %295, 5
  %297 = or i32 %293, %296
  %298 = load i32, ptr %9, align 4, !tbaa !9
  %299 = and i32 %298, -2139062144
  %300 = lshr i32 %299, 6
  %301 = or i32 %297, %300
  %302 = load i32, ptr %9, align 4, !tbaa !9
  %303 = and i32 %302, 1077952576
  %304 = lshr i32 %303, 4
  %305 = or i32 %301, %304
  %306 = load i32, ptr %9, align 4, !tbaa !9
  %307 = and i32 %306, 67372036
  %308 = lshr i32 %307, 2
  %309 = or i32 %305, %308
  store i32 %309, ptr %9, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #2
  br label %310

310:                                              ; preds = %226
  br label %311

311:                                              ; preds = %310
  br label %312

312:                                              ; preds = %311
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #2
  %313 = load i32, ptr %10, align 4, !tbaa !9
  %314 = xor i32 %313, -1
  store i32 %314, ptr %10, align 4, !tbaa !9
  %315 = load i32, ptr %10, align 4, !tbaa !9
  %316 = lshr i32 %315, 2
  %317 = load i32, ptr %10, align 4, !tbaa !9
  %318 = lshr i32 %317, 3
  %319 = and i32 %316, %318
  %320 = and i32 %319, 286331153
  %321 = load i32, ptr %10, align 4, !tbaa !9
  %322 = xor i32 %321, %320
  store i32 %322, ptr %10, align 4, !tbaa !9
  %323 = load i32, ptr %10, align 4, !tbaa !9
  %324 = shl i32 %323, 5
  %325 = load i32, ptr %10, align 4, !tbaa !9
  %326 = shl i32 %325, 1
  %327 = and i32 %324, %326
  %328 = and i32 %327, 538976288
  store i32 %328, ptr %16, align 4, !tbaa !9
  %329 = load i32, ptr %10, align 4, !tbaa !9
  %330 = shl i32 %329, 5
  %331 = load i32, ptr %10, align 4, !tbaa !9
  %332 = shl i32 %331, 4
  %333 = and i32 %330, %332
  %334 = and i32 %333, 1077952576
  %335 = load i32, ptr %16, align 4, !tbaa !9
  %336 = xor i32 %334, %335
  %337 = load i32, ptr %10, align 4, !tbaa !9
  %338 = xor i32 %337, %336
  store i32 %338, ptr %10, align 4, !tbaa !9
  %339 = load i32, ptr %10, align 4, !tbaa !9
  %340 = shl i32 %339, 2
  %341 = load i32, ptr %10, align 4, !tbaa !9
  %342 = shl i32 %341, 1
  %343 = and i32 %340, %342
  %344 = and i32 %343, -2139062144
  store i32 %344, ptr %16, align 4, !tbaa !9
  %345 = load i32, ptr %10, align 4, !tbaa !9
  %346 = lshr i32 %345, 2
  %347 = load i32, ptr %10, align 4, !tbaa !9
  %348 = shl i32 %347, 1
  %349 = and i32 %346, %348
  %350 = and i32 %349, 33686018
  %351 = load i32, ptr %16, align 4, !tbaa !9
  %352 = xor i32 %350, %351
  %353 = load i32, ptr %10, align 4, !tbaa !9
  %354 = xor i32 %353, %352
  store i32 %354, ptr %10, align 4, !tbaa !9
  %355 = load i32, ptr %10, align 4, !tbaa !9
  %356 = lshr i32 %355, 5
  %357 = load i32, ptr %10, align 4, !tbaa !9
  %358 = shl i32 %357, 1
  %359 = and i32 %356, %358
  %360 = and i32 %359, 67372036
  store i32 %360, ptr %16, align 4, !tbaa !9
  %361 = load i32, ptr %10, align 4, !tbaa !9
  %362 = lshr i32 %361, 1
  %363 = load i32, ptr %10, align 4, !tbaa !9
  %364 = lshr i32 %363, 2
  %365 = and i32 %362, %364
  %366 = and i32 %365, 134744072
  %367 = load i32, ptr %16, align 4, !tbaa !9
  %368 = xor i32 %366, %367
  %369 = load i32, ptr %10, align 4, !tbaa !9
  %370 = xor i32 %369, %368
  store i32 %370, ptr %10, align 4, !tbaa !9
  %371 = load i32, ptr %10, align 4, !tbaa !9
  %372 = xor i32 %371, -1
  store i32 %372, ptr %10, align 4, !tbaa !9
  %373 = load i32, ptr %10, align 4, !tbaa !9
  %374 = and i32 %373, 134744072
  %375 = shl i32 %374, 1
  %376 = load i32, ptr %10, align 4, !tbaa !9
  %377 = and i32 %376, 842150450
  %378 = shl i32 %377, 2
  %379 = or i32 %375, %378
  %380 = load i32, ptr %10, align 4, !tbaa !9
  %381 = and i32 %380, 16843009
  %382 = shl i32 %381, 5
  %383 = or i32 %379, %382
  %384 = load i32, ptr %10, align 4, !tbaa !9
  %385 = and i32 %384, -2139062144
  %386 = lshr i32 %385, 6
  %387 = or i32 %383, %386
  %388 = load i32, ptr %10, align 4, !tbaa !9
  %389 = and i32 %388, 1077952576
  %390 = lshr i32 %389, 4
  %391 = or i32 %387, %390
  %392 = load i32, ptr %10, align 4, !tbaa !9
  %393 = and i32 %392, 67372036
  %394 = lshr i32 %393, 2
  %395 = or i32 %391, %394
  store i32 %395, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #2
  br label %396

396:                                              ; preds = %312
  br label %397

397:                                              ; preds = %396
  %398 = load i32, ptr %5, align 4, !tbaa !9
  %399 = zext i32 %398 to i64
  %400 = getelementptr inbounds [87 x i8], ptr @RC, i64 0, i64 %399
  %401 = load i8, ptr %400, align 1, !tbaa !11
  store i8 %401, ptr %12, align 1, !tbaa !11
  %402 = load ptr, ptr %4, align 8, !tbaa !5
  %403 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %402, i32 0, i32 0
  %404 = getelementptr inbounds [4 x i32], ptr %403, i64 0, i64 0
  %405 = load i32, ptr %404, align 4, !tbaa !9
  %406 = load ptr, ptr %4, align 8, !tbaa !5
  %407 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %406, i32 0, i32 1
  %408 = getelementptr inbounds [4 x i32], ptr %407, i64 0, i64 0
  %409 = load i32, ptr %408, align 4, !tbaa !9
  %410 = xor i32 %405, %409
  %411 = load ptr, ptr %4, align 8, !tbaa !5
  %412 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %411, i32 0, i32 2
  %413 = getelementptr inbounds [4 x i32], ptr %412, i64 0, i64 0
  %414 = load i32, ptr %413, align 4, !tbaa !9
  %415 = xor i32 %410, %414
  %416 = load i8, ptr %12, align 1, !tbaa !11
  %417 = zext i8 %416 to i32
  %418 = and i32 %417, 15
  %419 = xor i32 %415, %418
  %420 = xor i32 %419, 131072
  %421 = load i32, ptr %7, align 4, !tbaa !9
  %422 = xor i32 %421, %420
  store i32 %422, ptr %7, align 4, !tbaa !9
  %423 = load ptr, ptr %4, align 8, !tbaa !5
  %424 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %423, i32 0, i32 0
  %425 = getelementptr inbounds [4 x i32], ptr %424, i64 0, i64 1
  %426 = load i32, ptr %425, align 4, !tbaa !9
  %427 = load ptr, ptr %4, align 8, !tbaa !5
  %428 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %427, i32 0, i32 1
  %429 = getelementptr inbounds [4 x i32], ptr %428, i64 0, i64 1
  %430 = load i32, ptr %429, align 4, !tbaa !9
  %431 = xor i32 %426, %430
  %432 = load ptr, ptr %4, align 8, !tbaa !5
  %433 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %432, i32 0, i32 2
  %434 = getelementptr inbounds [4 x i32], ptr %433, i64 0, i64 1
  %435 = load i32, ptr %434, align 4, !tbaa !9
  %436 = xor i32 %431, %435
  %437 = load i8, ptr %12, align 1, !tbaa !11
  %438 = zext i8 %437 to i32
  %439 = ashr i32 %438, 4
  %440 = xor i32 %436, %439
  %441 = load i32, ptr %8, align 4, !tbaa !9
  %442 = xor i32 %441, %440
  store i32 %442, ptr %8, align 4, !tbaa !9
  %443 = load i32, ptr %9, align 4, !tbaa !9
  %444 = xor i32 %443, 2
  store i32 %444, ptr %9, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #2
  %445 = load i32, ptr %8, align 4, !tbaa !9
  store i32 %445, ptr %17, align 4, !tbaa !9
  %446 = load i32, ptr %17, align 4, !tbaa !9
  %447 = shl i32 %446, 8
  %448 = load i32, ptr %17, align 4, !tbaa !9
  %449 = lshr i32 %448, 24
  %450 = or i32 %447, %449
  store i32 %450, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #2
  %451 = load i32, ptr %18, align 4, !tbaa !9
  store i32 %451, ptr %8, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #2
  %452 = load i32, ptr %9, align 4, !tbaa !9
  store i32 %452, ptr %19, align 4, !tbaa !9
  %453 = load i32, ptr %19, align 4, !tbaa !9
  %454 = shl i32 %453, 16
  %455 = load i32, ptr %19, align 4, !tbaa !9
  %456 = lshr i32 %455, 16
  %457 = or i32 %454, %456
  store i32 %457, ptr %20, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #2
  %458 = load i32, ptr %20, align 4, !tbaa !9
  store i32 %458, ptr %9, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #2
  %459 = load i32, ptr %10, align 4, !tbaa !9
  store i32 %459, ptr %21, align 4, !tbaa !9
  %460 = load i32, ptr %21, align 4, !tbaa !9
  %461 = shl i32 %460, 24
  %462 = load i32, ptr %21, align 4, !tbaa !9
  %463 = lshr i32 %462, 8
  %464 = or i32 %461, %463
  store i32 %464, ptr %22, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #2
  %465 = load i32, ptr %22, align 4, !tbaa !9
  store i32 %465, ptr %10, align 4, !tbaa !9
  %466 = load i32, ptr %9, align 4, !tbaa !9
  %467 = load i32, ptr %8, align 4, !tbaa !9
  %468 = xor i32 %467, %466
  store i32 %468, ptr %8, align 4, !tbaa !9
  %469 = load i32, ptr %7, align 4, !tbaa !9
  %470 = load i32, ptr %9, align 4, !tbaa !9
  %471 = xor i32 %470, %469
  store i32 %471, ptr %9, align 4, !tbaa !9
  %472 = load i32, ptr %10, align 4, !tbaa !9
  %473 = load i32, ptr %9, align 4, !tbaa !9
  %474 = xor i32 %472, %473
  store i32 %474, ptr %11, align 4, !tbaa !9
  %475 = load i32, ptr %9, align 4, !tbaa !9
  store i32 %475, ptr %10, align 4, !tbaa !9
  %476 = load i32, ptr %8, align 4, !tbaa !9
  store i32 %476, ptr %9, align 4, !tbaa !9
  %477 = load i32, ptr %7, align 4, !tbaa !9
  store i32 %477, ptr %8, align 4, !tbaa !9
  %478 = load i32, ptr %11, align 4, !tbaa !9
  store i32 %478, ptr %7, align 4, !tbaa !9
  br label %479

479:                                              ; preds = %397
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #2
  %480 = load ptr, ptr %4, align 8, !tbaa !5
  %481 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %480, i32 0, i32 0
  %482 = getelementptr inbounds [4 x i32], ptr %481, i64 0, i64 2
  %483 = load i32, ptr %482, align 4, !tbaa !9
  store i32 %483, ptr %23, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #2
  %484 = load ptr, ptr %4, align 8, !tbaa !5
  %485 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %484, i32 0, i32 0
  %486 = getelementptr inbounds [4 x i32], ptr %485, i64 0, i64 3
  %487 = load i32, ptr %486, align 4, !tbaa !9
  store i32 %487, ptr %24, align 4, !tbaa !9
  %488 = load ptr, ptr %4, align 8, !tbaa !5
  %489 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %488, i32 0, i32 0
  %490 = getelementptr inbounds [4 x i32], ptr %489, i64 0, i64 0
  %491 = load i32, ptr %490, align 4, !tbaa !9
  %492 = load ptr, ptr %4, align 8, !tbaa !5
  %493 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %492, i32 0, i32 0
  %494 = getelementptr inbounds [4 x i32], ptr %493, i64 0, i64 2
  store i32 %491, ptr %494, align 4, !tbaa !9
  %495 = load ptr, ptr %4, align 8, !tbaa !5
  %496 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %495, i32 0, i32 0
  %497 = getelementptr inbounds [4 x i32], ptr %496, i64 0, i64 1
  %498 = load i32, ptr %497, align 4, !tbaa !9
  %499 = load ptr, ptr %4, align 8, !tbaa !5
  %500 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %499, i32 0, i32 0
  %501 = getelementptr inbounds [4 x i32], ptr %500, i64 0, i64 3
  store i32 %498, ptr %501, align 4, !tbaa !9
  %502 = load i32, ptr %24, align 4, !tbaa !9
  %503 = shl i32 %502, 16
  %504 = load i32, ptr %24, align 4, !tbaa !9
  %505 = lshr i32 %504, 16
  %506 = or i32 %503, %505
  store i32 %506, ptr %24, align 4, !tbaa !9
  %507 = load i32, ptr %23, align 4, !tbaa !9
  %508 = lshr i32 %507, 8
  %509 = and i32 %508, 255
  %510 = load i32, ptr %23, align 4, !tbaa !9
  %511 = shl i32 %510, 16
  %512 = and i32 %511, 16711680
  %513 = or i32 %509, %512
  %514 = load i32, ptr %24, align 4, !tbaa !9
  %515 = and i32 %514, -16711936
  %516 = or i32 %513, %515
  %517 = load ptr, ptr %4, align 8, !tbaa !5
  %518 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %517, i32 0, i32 0
  %519 = getelementptr inbounds [4 x i32], ptr %518, i64 0, i64 0
  store i32 %516, ptr %519, align 4, !tbaa !9
  %520 = load i32, ptr %23, align 4, !tbaa !9
  %521 = lshr i32 %520, 16
  %522 = and i32 %521, 255
  %523 = load i32, ptr %23, align 4, !tbaa !9
  %524 = and i32 %523, -16777216
  %525 = or i32 %522, %524
  %526 = load i32, ptr %24, align 4, !tbaa !9
  %527 = shl i32 %526, 8
  %528 = and i32 %527, 65280
  %529 = or i32 %525, %528
  %530 = load i32, ptr %24, align 4, !tbaa !9
  %531 = and i32 %530, 16711680
  %532 = or i32 %529, %531
  %533 = load ptr, ptr %4, align 8, !tbaa !5
  %534 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %533, i32 0, i32 0
  %535 = getelementptr inbounds [4 x i32], ptr %534, i64 0, i64 1
  store i32 %532, ptr %535, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #2
  br label %536

536:                                              ; preds = %479
  br label %537

537:                                              ; preds = %536
  br label %538

538:                                              ; preds = %537
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #2
  %539 = load ptr, ptr %4, align 8, !tbaa !5
  %540 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %539, i32 0, i32 1
  %541 = getelementptr inbounds [4 x i32], ptr %540, i64 0, i64 2
  %542 = load i32, ptr %541, align 4, !tbaa !9
  store i32 %542, ptr %25, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #2
  %543 = load ptr, ptr %4, align 8, !tbaa !5
  %544 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %543, i32 0, i32 1
  %545 = getelementptr inbounds [4 x i32], ptr %544, i64 0, i64 3
  %546 = load i32, ptr %545, align 4, !tbaa !9
  store i32 %546, ptr %26, align 4, !tbaa !9
  %547 = load ptr, ptr %4, align 8, !tbaa !5
  %548 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %547, i32 0, i32 1
  %549 = getelementptr inbounds [4 x i32], ptr %548, i64 0, i64 0
  %550 = load i32, ptr %549, align 4, !tbaa !9
  %551 = load ptr, ptr %4, align 8, !tbaa !5
  %552 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %551, i32 0, i32 1
  %553 = getelementptr inbounds [4 x i32], ptr %552, i64 0, i64 2
  store i32 %550, ptr %553, align 4, !tbaa !9
  %554 = load ptr, ptr %4, align 8, !tbaa !5
  %555 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %554, i32 0, i32 1
  %556 = getelementptr inbounds [4 x i32], ptr %555, i64 0, i64 1
  %557 = load i32, ptr %556, align 4, !tbaa !9
  %558 = load ptr, ptr %4, align 8, !tbaa !5
  %559 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %558, i32 0, i32 1
  %560 = getelementptr inbounds [4 x i32], ptr %559, i64 0, i64 3
  store i32 %557, ptr %560, align 4, !tbaa !9
  %561 = load i32, ptr %26, align 4, !tbaa !9
  %562 = shl i32 %561, 16
  %563 = load i32, ptr %26, align 4, !tbaa !9
  %564 = lshr i32 %563, 16
  %565 = or i32 %562, %564
  store i32 %565, ptr %26, align 4, !tbaa !9
  %566 = load i32, ptr %25, align 4, !tbaa !9
  %567 = lshr i32 %566, 8
  %568 = and i32 %567, 255
  %569 = load i32, ptr %25, align 4, !tbaa !9
  %570 = shl i32 %569, 16
  %571 = and i32 %570, 16711680
  %572 = or i32 %568, %571
  %573 = load i32, ptr %26, align 4, !tbaa !9
  %574 = and i32 %573, -16711936
  %575 = or i32 %572, %574
  %576 = load ptr, ptr %4, align 8, !tbaa !5
  %577 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %576, i32 0, i32 1
  %578 = getelementptr inbounds [4 x i32], ptr %577, i64 0, i64 0
  store i32 %575, ptr %578, align 4, !tbaa !9
  %579 = load i32, ptr %25, align 4, !tbaa !9
  %580 = lshr i32 %579, 16
  %581 = and i32 %580, 255
  %582 = load i32, ptr %25, align 4, !tbaa !9
  %583 = and i32 %582, -16777216
  %584 = or i32 %581, %583
  %585 = load i32, ptr %26, align 4, !tbaa !9
  %586 = shl i32 %585, 8
  %587 = and i32 %586, 65280
  %588 = or i32 %584, %587
  %589 = load i32, ptr %26, align 4, !tbaa !9
  %590 = and i32 %589, 16711680
  %591 = or i32 %588, %590
  %592 = load ptr, ptr %4, align 8, !tbaa !5
  %593 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %592, i32 0, i32 1
  %594 = getelementptr inbounds [4 x i32], ptr %593, i64 0, i64 1
  store i32 %591, ptr %594, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #2
  br label %595

595:                                              ; preds = %538
  br label %596

596:                                              ; preds = %595
  br label %597

597:                                              ; preds = %596
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #2
  %598 = load ptr, ptr %4, align 8, !tbaa !5
  %599 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %598, i32 0, i32 2
  %600 = getelementptr inbounds [4 x i32], ptr %599, i64 0, i64 2
  %601 = load i32, ptr %600, align 4, !tbaa !9
  store i32 %601, ptr %27, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #2
  %602 = load ptr, ptr %4, align 8, !tbaa !5
  %603 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %602, i32 0, i32 2
  %604 = getelementptr inbounds [4 x i32], ptr %603, i64 0, i64 3
  %605 = load i32, ptr %604, align 4, !tbaa !9
  store i32 %605, ptr %28, align 4, !tbaa !9
  %606 = load ptr, ptr %4, align 8, !tbaa !5
  %607 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %606, i32 0, i32 2
  %608 = getelementptr inbounds [4 x i32], ptr %607, i64 0, i64 0
  %609 = load i32, ptr %608, align 4, !tbaa !9
  %610 = load ptr, ptr %4, align 8, !tbaa !5
  %611 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %610, i32 0, i32 2
  %612 = getelementptr inbounds [4 x i32], ptr %611, i64 0, i64 2
  store i32 %609, ptr %612, align 4, !tbaa !9
  %613 = load ptr, ptr %4, align 8, !tbaa !5
  %614 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %613, i32 0, i32 2
  %615 = getelementptr inbounds [4 x i32], ptr %614, i64 0, i64 1
  %616 = load i32, ptr %615, align 4, !tbaa !9
  %617 = load ptr, ptr %4, align 8, !tbaa !5
  %618 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %617, i32 0, i32 2
  %619 = getelementptr inbounds [4 x i32], ptr %618, i64 0, i64 3
  store i32 %616, ptr %619, align 4, !tbaa !9
  %620 = load i32, ptr %28, align 4, !tbaa !9
  %621 = shl i32 %620, 16
  %622 = load i32, ptr %28, align 4, !tbaa !9
  %623 = lshr i32 %622, 16
  %624 = or i32 %621, %623
  store i32 %624, ptr %28, align 4, !tbaa !9
  %625 = load i32, ptr %27, align 4, !tbaa !9
  %626 = lshr i32 %625, 8
  %627 = and i32 %626, 255
  %628 = load i32, ptr %27, align 4, !tbaa !9
  %629 = shl i32 %628, 16
  %630 = and i32 %629, 16711680
  %631 = or i32 %627, %630
  %632 = load i32, ptr %28, align 4, !tbaa !9
  %633 = and i32 %632, -16711936
  %634 = or i32 %631, %633
  %635 = load ptr, ptr %4, align 8, !tbaa !5
  %636 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %635, i32 0, i32 2
  %637 = getelementptr inbounds [4 x i32], ptr %636, i64 0, i64 0
  store i32 %634, ptr %637, align 4, !tbaa !9
  %638 = load i32, ptr %27, align 4, !tbaa !9
  %639 = lshr i32 %638, 16
  %640 = and i32 %639, 255
  %641 = load i32, ptr %27, align 4, !tbaa !9
  %642 = and i32 %641, -16777216
  %643 = or i32 %640, %642
  %644 = load i32, ptr %28, align 4, !tbaa !9
  %645 = shl i32 %644, 8
  %646 = and i32 %645, 65280
  %647 = or i32 %643, %646
  %648 = load i32, ptr %28, align 4, !tbaa !9
  %649 = and i32 %648, 16711680
  %650 = or i32 %647, %649
  %651 = load ptr, ptr %4, align 8, !tbaa !5
  %652 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %651, i32 0, i32 2
  %653 = getelementptr inbounds [4 x i32], ptr %652, i64 0, i64 1
  store i32 %650, ptr %653, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #2
  br label %654

654:                                              ; preds = %597
  br label %655

655:                                              ; preds = %654
  br label %656

656:                                              ; preds = %655
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #2
  %657 = load ptr, ptr %4, align 8, !tbaa !5
  %658 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %657, i32 0, i32 1
  %659 = getelementptr inbounds [4 x i32], ptr %658, i64 0, i64 0
  %660 = load i32, ptr %659, align 4, !tbaa !9
  store i32 %660, ptr %29, align 4, !tbaa !9
  %661 = load i32, ptr %29, align 4, !tbaa !9
  %662 = shl i32 %661, 1
  %663 = and i32 %662, -16843010
  %664 = load i32, ptr %29, align 4, !tbaa !9
  %665 = lshr i32 %664, 7
  %666 = load i32, ptr %29, align 4, !tbaa !9
  %667 = lshr i32 %666, 5
  %668 = xor i32 %665, %667
  %669 = and i32 %668, 16843009
  %670 = xor i32 %663, %669
  %671 = load ptr, ptr %4, align 8, !tbaa !5
  %672 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %671, i32 0, i32 1
  %673 = getelementptr inbounds [4 x i32], ptr %672, i64 0, i64 0
  store i32 %670, ptr %673, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #2
  br label %674

674:                                              ; preds = %656
  br label %675

675:                                              ; preds = %674
  br label %676

676:                                              ; preds = %675
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #2
  %677 = load ptr, ptr %4, align 8, !tbaa !5
  %678 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %677, i32 0, i32 1
  %679 = getelementptr inbounds [4 x i32], ptr %678, i64 0, i64 1
  %680 = load i32, ptr %679, align 4, !tbaa !9
  store i32 %680, ptr %30, align 4, !tbaa !9
  %681 = load i32, ptr %30, align 4, !tbaa !9
  %682 = shl i32 %681, 1
  %683 = and i32 %682, -16843010
  %684 = load i32, ptr %30, align 4, !tbaa !9
  %685 = lshr i32 %684, 7
  %686 = load i32, ptr %30, align 4, !tbaa !9
  %687 = lshr i32 %686, 5
  %688 = xor i32 %685, %687
  %689 = and i32 %688, 16843009
  %690 = xor i32 %683, %689
  %691 = load ptr, ptr %4, align 8, !tbaa !5
  %692 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %691, i32 0, i32 1
  %693 = getelementptr inbounds [4 x i32], ptr %692, i64 0, i64 1
  store i32 %690, ptr %693, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #2
  br label %694

694:                                              ; preds = %676
  br label %695

695:                                              ; preds = %694
  br label %696

696:                                              ; preds = %695
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #2
  %697 = load ptr, ptr %4, align 8, !tbaa !5
  %698 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %697, i32 0, i32 2
  %699 = getelementptr inbounds [4 x i32], ptr %698, i64 0, i64 0
  %700 = load i32, ptr %699, align 4, !tbaa !9
  store i32 %700, ptr %31, align 4, !tbaa !9
  %701 = load i32, ptr %31, align 4, !tbaa !9
  %702 = lshr i32 %701, 1
  %703 = and i32 %702, 2139062143
  %704 = load i32, ptr %31, align 4, !tbaa !9
  %705 = shl i32 %704, 7
  %706 = load i32, ptr %31, align 4, !tbaa !9
  %707 = shl i32 %706, 1
  %708 = xor i32 %705, %707
  %709 = and i32 %708, -2139062144
  %710 = xor i32 %703, %709
  %711 = load ptr, ptr %4, align 8, !tbaa !5
  %712 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %711, i32 0, i32 2
  %713 = getelementptr inbounds [4 x i32], ptr %712, i64 0, i64 0
  store i32 %710, ptr %713, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #2
  br label %714

714:                                              ; preds = %696
  br label %715

715:                                              ; preds = %714
  br label %716

716:                                              ; preds = %715
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #2
  %717 = load ptr, ptr %4, align 8, !tbaa !5
  %718 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %717, i32 0, i32 2
  %719 = getelementptr inbounds [4 x i32], ptr %718, i64 0, i64 1
  %720 = load i32, ptr %719, align 4, !tbaa !9
  store i32 %720, ptr %32, align 4, !tbaa !9
  %721 = load i32, ptr %32, align 4, !tbaa !9
  %722 = lshr i32 %721, 1
  %723 = and i32 %722, 2139062143
  %724 = load i32, ptr %32, align 4, !tbaa !9
  %725 = shl i32 %724, 7
  %726 = load i32, ptr %32, align 4, !tbaa !9
  %727 = shl i32 %726, 1
  %728 = xor i32 %725, %727
  %729 = and i32 %728, -2139062144
  %730 = xor i32 %723, %729
  %731 = load ptr, ptr %4, align 8, !tbaa !5
  %732 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %731, i32 0, i32 2
  %733 = getelementptr inbounds [4 x i32], ptr %732, i64 0, i64 1
  store i32 %730, ptr %733, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #2
  br label %734

734:                                              ; preds = %716
  br label %735

735:                                              ; preds = %734
  br label %736

736:                                              ; preds = %735
  %737 = load i32, ptr %5, align 4, !tbaa !9
  %738 = add i32 %737, 1
  store i32 %738, ptr %5, align 4, !tbaa !9
  br label %49, !llvm.loop !12

739:                                              ; preds = %49
  %740 = load i32, ptr %7, align 4, !tbaa !9
  %741 = load ptr, ptr %4, align 8, !tbaa !5
  %742 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %741, i32 0, i32 3
  %743 = getelementptr inbounds [4 x i32], ptr %742, i64 0, i64 0
  store i32 %740, ptr %743, align 4, !tbaa !9
  %744 = load i32, ptr %8, align 4, !tbaa !9
  %745 = load ptr, ptr %4, align 8, !tbaa !5
  %746 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %745, i32 0, i32 3
  %747 = getelementptr inbounds [4 x i32], ptr %746, i64 0, i64 1
  store i32 %744, ptr %747, align 4, !tbaa !9
  %748 = load i32, ptr %9, align 4, !tbaa !9
  %749 = load ptr, ptr %4, align 8, !tbaa !5
  %750 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %749, i32 0, i32 3
  %751 = getelementptr inbounds [4 x i32], ptr %750, i64 0, i64 2
  store i32 %748, ptr %751, align 4, !tbaa !9
  %752 = load i32, ptr %10, align 4, !tbaa !9
  %753 = load ptr, ptr %4, align 8, !tbaa !5
  %754 = getelementptr inbounds %struct.forkskinny_128_384_state_t, ptr %753, i32 0, i32 3
  %755 = getelementptr inbounds [4 x i32], ptr %754, i64 0, i64 3
  store i32 %752, ptr %755, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 1, ptr %12) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #2
  ret void
}

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #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 = !{!"int", !7, i64 0}
!11 = !{!7, !7, i64 0}
!12 = distinct !{!12, !13}
!13 = !{!"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"

@RC = external hidden local_unnamed_addr constant [87 x i8], align 16

; Function Attrs: nofree norecurse nosync nounwind memory(argmem: readwrite) uwtable
define dso_local void @forkskinny_128_384_rounds(ptr nocapture noundef %0, i32 noundef %1, i32 noundef %2) local_unnamed_addr #0 {
  %4 = getelementptr inbounds i8, ptr %0, i64 48
  %5 = load i32, ptr %4, align 4, !tbaa !5
  %6 = getelementptr inbounds i8, ptr %0, i64 52
  %7 = load i32, ptr %6, align 4, !tbaa !5
  %8 = getelementptr inbounds i8, ptr %0, i64 56
  %9 = load i32, ptr %8, align 4, !tbaa !5
  %10 = getelementptr inbounds i8, ptr %0, i64 60
  %11 = load i32, ptr %10, align 4, !tbaa !5
  %12 = icmp ult i32 %1, %2
  br i1 %12, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %3
  %13 = getelementptr inbounds i8, ptr %0, i64 16
  %14 = getelementptr inbounds i8, ptr %0, i64 32
  %15 = getelementptr inbounds i8, ptr %0, i64 4
  %16 = getelementptr inbounds i8, ptr %0, i64 20
  %17 = getelementptr inbounds i8, ptr %0, i64 36
  %18 = getelementptr inbounds i8, ptr %0, i64 8
  %19 = getelementptr inbounds i8, ptr %0, i64 12
  %20 = getelementptr inbounds i8, ptr %0, i64 24
  %21 = getelementptr inbounds i8, ptr %0, i64 28
  %22 = getelementptr inbounds i8, ptr %0, i64 40
  %23 = getelementptr inbounds i8, ptr %0, i64 44
  %.promoted = load i32, ptr %0, align 4, !tbaa !5
  %.promoted247 = load i32, ptr %13, align 4, !tbaa !5
  %.promoted248 = load i32, ptr %14, align 4, !tbaa !5
  %.promoted249 = load i32, ptr %15, align 4, !tbaa !5
  %.promoted250 = load i32, ptr %16, align 4, !tbaa !5
  %.promoted251 = load i32, ptr %17, align 4, !tbaa !5
  %.promoted252 = load i32, ptr %18, align 4, !tbaa !5
  %.promoted253 = load i32, ptr %19, align 4, !tbaa !5
  %.promoted254 = load i32, ptr %20, align 4, !tbaa !5
  %.promoted255 = load i32, ptr %21, align 4, !tbaa !5
  %.promoted256 = load i32, ptr %22, align 4, !tbaa !5
  %.promoted257 = load i32, ptr %23, align 4, !tbaa !5
  %24 = zext i32 %1 to i64
  %wide.trip.count = zext i32 %2 to i64
  br label %25

25:                                               ; preds = %.lr.ph, %25
  %indvars.iv = phi i64 [ %24, %.lr.ph ], [ %indvars.iv.next, %25 ]
  %26 = phi i32 [ %.promoted257, %.lr.ph ], [ %32, %25 ]
  %27 = phi i32 [ %.promoted256, %.lr.ph ], [ %35, %25 ]
  %28 = phi i32 [ %.promoted255, %.lr.ph ], [ %33, %25 ]
  %29 = phi i32 [ %.promoted254, %.lr.ph ], [ %36, %25 ]
  %30 = phi i32 [ %.promoted253, %.lr.ph ], [ %34, %25 ]
  %31 = phi i32 [ %.promoted252, %.lr.ph ], [ %37, %25 ]
  %32 = phi i32 [ %.promoted251, %.lr.ph ], [ %337, %25 ]
  %33 = phi i32 [ %.promoted250, %.lr.ph ], [ %323, %25 ]
  %34 = phi i32 [ %.promoted249, %.lr.ph ], [ %275, %25 ]
  %35 = phi i32 [ %.promoted248, %.lr.ph ], [ %330, %25 ]
  %36 = phi i32 [ %.promoted247, %.lr.ph ], [ %316, %25 ]
  %37 = phi i32 [ %.promoted, %.lr.ph ], [ %266, %25 ]
  %.0235242 = phi i32 [ %5, %.lr.ph ], [ %258, %25 ]
  %.0236241 = phi i32 [ %7, %.lr.ph ], [ %246, %25 ]
  %.0237240 = phi i32 [ %9, %.lr.ph ], [ %256, %25 ]
  %.0238239 = phi i32 [ %11, %.lr.ph ], [ %257, %25 ]
  %38 = xor i32 %.0235242, -1
  %39 = lshr i32 %38, 2
  %40 = lshr i32 %38, 3
  %41 = and i32 %40, 286331153
  %42 = and i32 %41, %39
  %43 = xor i32 %42, %38
  %44 = shl i32 %43, 5
  %45 = shl i32 %43, 1
  %46 = and i32 %45, 538976288
  %47 = shl i32 %38, 4
  %48 = and i32 %47, 1077952576
  %49 = or disjoint i32 %46, %48
  %50 = and i32 %49, %44
  %51 = xor i32 %50, %43
  %52 = shl i32 %51, 2
  %53 = shl i32 %51, 1
  %54 = and i32 %53, -2139062144
  %55 = and i32 %54, %52
  %56 = and i32 %39, 33686018
  %57 = and i32 %56, %53
  %58 = or disjoint i32 %55, %57
  %59 = xor i32 %58, %51
  %60 = lshr i32 %59, 5
  %61 = shl i32 %59, 1
  %62 = and i32 %61, 67372036
  %63 = and i32 %62, %60
  %64 = lshr i32 %43, 1
  %65 = lshr i32 %51, 2
  %66 = and i32 %64, 134744072
  %67 = and i32 %66, %65
  %68 = or disjoint i32 %63, %67
  %69 = xor i32 %59, %68
  %70 = xor i32 %69, -1
  %71 = shl i32 %70, 1
  %72 = and i32 %71, 269488144
  %73 = shl i32 %70, 2
  %74 = and i32 %73, -926365496
  %75 = or disjoint i32 %72, %74
  %76 = shl i32 %70, 5
  %77 = and i32 %76, 538976288
  %78 = or disjoint i32 %75, %77
  %79 = lshr i32 %70, 6
  %80 = and i32 %79, 33686018
  %81 = or disjoint i32 %78, %80
  %82 = lshr i32 %70, 4
  %83 = and i32 %82, 67372036
  %84 = or disjoint i32 %81, %83
  %85 = lshr i32 %70, 2
  %86 = and i32 %85, 16843009
  %87 = or disjoint i32 %84, %86
  %88 = xor i32 %.0236241, -1
  %89 = lshr i32 %88, 2
  %90 = lshr i32 %88, 3
  %91 = and i32 %90, 286331153
  %92 = and i32 %91, %89
  %93 = xor i32 %92, %88
  %94 = shl i32 %93, 5
  %95 = shl i32 %93, 1
  %96 = and i32 %95, 538976288
  %97 = shl i32 %88, 4
  %98 = and i32 %97, 1077952576
  %99 = or disjoint i32 %96, %98
  %100 = and i32 %99, %94
  %101 = xor i32 %100, %93
  %102 = shl i32 %101, 2
  %103 = shl i32 %101, 1
  %104 = and i32 %103, -2139062144
  %105 = and i32 %104, %102
  %106 = and i32 %89, 33686018
  %107 = and i32 %106, %103
  %108 = or disjoint i32 %105, %107
  %109 = xor i32 %108, %101
  %110 = lshr i32 %109, 5
  %111 = shl i32 %109, 1
  %112 = and i32 %111, 67372036
  %113 = and i32 %112, %110
  %114 = lshr i32 %93, 1
  %115 = lshr i32 %101, 2
  %116 = and i32 %114, 134744072
  %117 = and i32 %116, %115
  %118 = or disjoint i32 %113, %117
  %119 = xor i32 %109, %118
  %120 = xor i32 %119, -1
  %121 = shl i32 %120, 1
  %122 = and i32 %121, 269488144
  %123 = shl i32 %120, 2
  %124 = and i32 %123, -926365496
  %125 = or disjoint i32 %122, %124
  %126 = shl i32 %120, 5
  %127 = and i32 %126, 538976288
  %128 = or disjoint i32 %125, %127
  %129 = lshr i32 %120, 6
  %130 = and i32 %129, 33686018
  %131 = or disjoint i32 %128, %130
  %132 = lshr i32 %120, 4
  %133 = and i32 %132, 67372036
  %134 = or disjoint i32 %131, %133
  %135 = lshr i32 %120, 2
  %136 = and i32 %135, 16843009
  %137 = or disjoint i32 %134, %136
  %138 = xor i32 %.0237240, -1
  %139 = lshr i32 %138, 2
  %140 = lshr i32 %138, 3
  %141 = and i32 %140, 286331153
  %142 = and i32 %141, %139
  %143 = xor i32 %142, %138
  %144 = shl i32 %143, 5
  %145 = shl i32 %143, 1
  %146 = and i32 %145, 538976288
  %147 = shl i32 %138, 4
  %148 = and i32 %147, 1077952576
  %149 = or disjoint i32 %146, %148
  %150 = and i32 %149, %144
  %151 = xor i32 %150, %143
  %152 = shl i32 %151, 2
  %153 = shl i32 %151, 1
  %154 = and i32 %153, -2139062144
  %155 = and i32 %154, %152
  %156 = and i32 %139, 33686018
  %157 = and i32 %156, %153
  %158 = or disjoint i32 %155, %157
  %159 = xor i32 %158, %151
  %160 = lshr i32 %159, 5
  %161 = shl i32 %159, 1
  %162 = and i32 %161, 67372036
  %163 = and i32 %162, %160
  %164 = lshr i32 %143, 1
  %165 = lshr i32 %151, 2
  %166 = and i32 %164, 134744072
  %167 = and i32 %166, %165
  %168 = or disjoint i32 %163, %167
  %169 = xor i32 %159, %168
  %170 = xor i32 %169, -1
  %171 = shl i32 %170, 1
  %172 = and i32 %171, 269488144
  %173 = shl i32 %170, 2
  %174 = and i32 %173, -926365496
  %175 = or disjoint i32 %172, %174
  %176 = shl i32 %170, 5
  %177 = and i32 %176, 538976288
  %178 = or disjoint i32 %175, %177
  %179 = lshr i32 %170, 6
  %180 = and i32 %179, 33686018
  %181 = or disjoint i32 %178, %180
  %182 = lshr i32 %170, 4
  %183 = and i32 %182, 67372036
  %184 = or disjoint i32 %181, %183
  %185 = lshr i32 %170, 2
  %186 = and i32 %185, 16843009
  %187 = or disjoint i32 %184, %186
  %188 = xor i32 %.0238239, -1
  %189 = lshr i32 %188, 2
  %190 = lshr i32 %188, 3
  %191 = and i32 %190, 286331153
  %192 = and i32 %191, %189
  %193 = xor i32 %192, %188
  %194 = shl i32 %193, 5
  %195 = shl i32 %193, 1
  %196 = and i32 %195, 538976288
  %197 = shl i32 %188, 4
  %198 = and i32 %197, 1077952576
  %199 = or disjoint i32 %196, %198
  %200 = and i32 %199, %194
  %201 = xor i32 %200, %193
  %202 = shl i32 %201, 2
  %203 = shl i32 %201, 1
  %204 = and i32 %203, -2139062144
  %205 = and i32 %204, %202
  %206 = and i32 %189, 33686018
  %207 = and i32 %206, %203
  %208 = or disjoint i32 %205, %207
  %209 = xor i32 %208, %201
  %210 = lshr i32 %209, 5
  %211 = shl i32 %209, 1
  %212 = and i32 %211, 67372036
  %213 = and i32 %212, %210
  %214 = lshr i32 %193, 1
  %215 = lshr i32 %201, 2
  %216 = and i32 %214, 134744072
  %217 = and i32 %216, %215
  %218 = or disjoint i32 %213, %217
  %219 = xor i32 %209, %218
  %220 = xor i32 %219, -1
  %221 = shl i32 %220, 1
  %222 = and i32 %221, 269488144
  %223 = shl i32 %220, 2
  %224 = and i32 %223, -926365496
  %225 = or disjoint i32 %222, %224
  %226 = shl i32 %220, 5
  %227 = and i32 %226, 538976288
  %228 = or disjoint i32 %225, %227
  %229 = lshr i32 %220, 6
  %230 = and i32 %229, 33686018
  %231 = or disjoint i32 %228, %230
  %232 = lshr i32 %220, 4
  %233 = and i32 %232, 67372036
  %234 = or disjoint i32 %231, %233
  %235 = lshr i32 %220, 2
  %236 = and i32 %235, 16843009
  %237 = or disjoint i32 %234, %236
  %238 = getelementptr inbounds [87 x i8], ptr @RC, i64 0, i64 %indvars.iv
  %239 = load i8, ptr %238, align 1, !tbaa !9
  %240 = zext i8 %239 to i32
  %241 = and i32 %240, 15
  %242 = xor i32 %87, %241
  %243 = xor i32 %242, %37
  %244 = xor i32 %243, %36
  %245 = xor i32 %244, %35
  %246 = xor i32 %245, 131072
  %247 = lshr i32 %240, 4
  %248 = xor i32 %247, %137
  %249 = xor i32 %248, %34
  %250 = xor i32 %249, %33
  %251 = xor i32 %250, %32
  %252 = xor i32 %187, 2
  %253 = tail call i32 @llvm.fshl.i32(i32 %251, i32 %251, i32 8)
  %254 = tail call i32 @llvm.fshl.i32(i32 %252, i32 %252, i32 16)
  %255 = tail call i32 @llvm.fshl.i32(i32 %237, i32 %237, i32 24)
  %256 = xor i32 %253, %254
  %257 = xor i32 %246, %254
  %258 = xor i32 %257, %255
  store i32 %37, ptr %18, align 4, !tbaa !5
  store i32 %34, ptr %19, align 4, !tbaa !5
  %259 = tail call i32 @llvm.fshl.i32(i32 %30, i32 %30, i32 16)
  %260 = lshr i32 %31, 8
  %261 = and i32 %260, 255
  %262 = shl i32 %31, 16
  %263 = and i32 %262, 16711680
  %264 = or disjoint i32 %261, %263
  %265 = and i32 %259, -16711936
  %266 = or disjoint i32 %264, %265
  store i32 %266, ptr %0, align 4, !tbaa !5
  %267 = lshr i32 %31, 16
  %268 = and i32 %267, 255
  %269 = and i32 %31, -16777216
  %270 = or disjoint i32 %268, %269
  %271 = shl i32 %259, 8
  %272 = and i32 %271, 65280
  %273 = and i32 %259, 16711680
  %274 = or disjoint i32 %270, %273
  %275 = or disjoint i32 %274, %272
  store i32 %275, ptr %15, align 4, !tbaa !5
  store i32 %36, ptr %20, align 4, !tbaa !5
  store i32 %33, ptr %21, align 4, !tbaa !5
  %276 = tail call i32 @llvm.fshl.i32(i32 %28, i32 %28, i32 16)
  %277 = lshr i32 %29, 8
  %278 = and i32 %277, 255
  %279 = shl i32 %29, 16
  %280 = and i32 %279, 16711680
  %281 = or disjoint i32 %278, %280
  %282 = and i32 %276, -16711936
  %283 = or disjoint i32 %281, %282
  %284 = lshr i32 %29, 16
  %285 = and i32 %284, 255
  %286 = and i32 %29, -16777216
  %287 = or disjoint i32 %285, %286
  %288 = shl i32 %276, 8
  %289 = and i32 %288, 65280
  %290 = and i32 %276, 16711680
  %291 = or disjoint i32 %287, %290
  %292 = or disjoint i32 %291, %289
  store i32 %35, ptr %22, align 4, !tbaa !5
  store i32 %32, ptr %23, align 4, !tbaa !5
  %293 = tail call i32 @llvm.fshl.i32(i32 %26, i32 %26, i32 16)
  %294 = lshr i32 %27, 8
  %295 = and i32 %294, 255
  %296 = shl i32 %27, 16
  %297 = and i32 %296, 16711680
  %298 = or disjoint i32 %295, %297
  %299 = and i32 %293, -16711936
  %300 = or disjoint i32 %298, %299
  %301 = lshr i32 %27, 16
  %302 = and i32 %301, 255
  %303 = and i32 %27, -16777216
  %304 = or disjoint i32 %302, %303
  %305 = shl i32 %293, 8
  %306 = and i32 %305, 65280
  %307 = and i32 %293, 16711680
  %308 = or disjoint i32 %304, %307
  %309 = or disjoint i32 %308, %306
  %310 = shl i32 %283, 1
  %311 = and i32 %310, -16843010
  %312 = lshr i32 %283, 7
  %313 = lshr i32 %283, 5
  %314 = xor i32 %312, %313
  %315 = and i32 %314, 16843009
  %316 = or disjoint i32 %315, %311
  store i32 %316, ptr %13, align 4, !tbaa !5
  %317 = shl i32 %292, 1
  %318 = and i32 %317, -16843010
  %319 = lshr i32 %292, 7
  %320 = lshr i32 %292, 5
  %321 = xor i32 %319, %320
  %322 = and i32 %321, 16843009
  %323 = or disjoint i32 %322, %318
  store i32 %323, ptr %16, align 4, !tbaa !5
  %324 = lshr i32 %300, 1
  %325 = and i32 %324, 2139062143
  %326 = shl i32 %300, 7
  %327 = shl i32 %300, 1
  %328 = xor i32 %326, %327
  %329 = and i32 %328, -2139062144
  %330 = or disjoint i32 %329, %325
  store i32 %330, ptr %14, align 4, !tbaa !5
  %331 = lshr i32 %309, 1
  %332 = and i32 %331, 2139062143
  %333 = shl i32 %309, 7
  %334 = shl i32 %309, 1
  %335 = xor i32 %333, %334
  %336 = and i32 %335, -2139062144
  %337 = or disjoint i32 %336, %332
  store i32 %337, ptr %17, align 4, !tbaa !5
  %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 %25, !llvm.loop !10

._crit_edge:                                      ; preds = %25, %3
  %.0238.lcssa = phi i32 [ %11, %3 ], [ %257, %25 ]
  %.0237.lcssa = phi i32 [ %9, %3 ], [ %256, %25 ]
  %.0236.lcssa = phi i32 [ %7, %3 ], [ %246, %25 ]
  %.0235.lcssa = phi i32 [ %5, %3 ], [ %258, %25 ]
  store i32 %.0235.lcssa, ptr %4, align 4, !tbaa !5
  store i32 %.0236.lcssa, ptr %6, align 4, !tbaa !5
  store i32 %.0237.lcssa, ptr %8, align 4, !tbaa !5
  store i32 %.0238.lcssa, ptr %10, align 4, !tbaa !5
  ret void
}

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.fshl.i32(i32, i32, i32) #1

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

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

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


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