; 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_64_192_state_t = type { [4 x i16], [4 x i16], [4 x i16], [4 x i16] }

@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_64_192_inv_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 i16, align 2
  %8 = alloca i16, align 2
  %9 = alloca i16, align 2
  %10 = alloca i16, align 2
  %11 = alloca i16, align 2
  %12 = alloca i8, align 1
  %13 = alloca i16, align 2
  %14 = alloca i16, align 2
  %15 = alloca i16, align 2
  %16 = alloca i16, align 2
  %17 = alloca i16, align 2
  %18 = alloca i16, align 2
  %19 = alloca i16, align 2
  %20 = alloca i16, align 2
  %21 = alloca i16, align 2
  %22 = alloca i16, align 2
  %23 = alloca i16, align 2
  %24 = alloca i32, align 4
  %25 = alloca i16, align 2
  %26 = alloca i32, align 4
  %27 = alloca i16, align 2
  %28 = 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 2, ptr %7) #2
  call void @llvm.lifetime.start.p0(i64 2, ptr %8) #2
  call void @llvm.lifetime.start.p0(i64 2, ptr %9) #2
  call void @llvm.lifetime.start.p0(i64 2, ptr %10) #2
  call void @llvm.lifetime.start.p0(i64 2, ptr %11) #2
  call void @llvm.lifetime.start.p0(i64 1, ptr %12) #2
  %29 = load ptr, ptr %4, align 8, !tbaa !5
  %30 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %29, i32 0, i32 3
  %31 = getelementptr inbounds [4 x i16], ptr %30, i64 0, i64 0
  %32 = load i16, ptr %31, align 2, !tbaa !11
  store i16 %32, ptr %7, align 2, !tbaa !11
  %33 = load ptr, ptr %4, align 8, !tbaa !5
  %34 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %33, i32 0, i32 3
  %35 = getelementptr inbounds [4 x i16], ptr %34, i64 0, i64 1
  %36 = load i16, ptr %35, align 2, !tbaa !11
  store i16 %36, ptr %8, align 2, !tbaa !11
  %37 = load ptr, ptr %4, align 8, !tbaa !5
  %38 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %37, i32 0, i32 3
  %39 = getelementptr inbounds [4 x i16], ptr %38, i64 0, i64 2
  %40 = load i16, ptr %39, align 2, !tbaa !11
  store i16 %40, ptr %9, align 2, !tbaa !11
  %41 = load ptr, ptr %4, align 8, !tbaa !5
  %42 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %41, i32 0, i32 3
  %43 = getelementptr inbounds [4 x i16], ptr %42, i64 0, i64 3
  %44 = load i16, ptr %43, align 2, !tbaa !11
  store i16 %44, ptr %10, align 2, !tbaa !11
  br label %45

45:                                               ; preds = %743, %3
  %46 = load i32, ptr %5, align 4, !tbaa !9
  %47 = load i32, ptr %6, align 4, !tbaa !9
  %48 = icmp ugt i32 %46, %47
  br i1 %48, label %49, label %744

49:                                               ; preds = %45
  br label %50

50:                                               ; preds = %49
  call void @llvm.lifetime.start.p0(i64 2, ptr %13) #2
  %51 = load ptr, ptr %4, align 8, !tbaa !5
  %52 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %51, i32 0, i32 1
  %53 = getelementptr inbounds [4 x i16], ptr %52, i64 0, i64 0
  %54 = load i16, ptr %53, align 2, !tbaa !11
  store i16 %54, ptr %13, align 2, !tbaa !11
  %55 = load i16, ptr %13, align 2, !tbaa !11
  %56 = zext i16 %55 to i32
  %57 = ashr i32 %56, 1
  %58 = and i32 %57, 30583
  %59 = load i16, ptr %13, align 2, !tbaa !11
  %60 = zext i16 %59 to i32
  %61 = load i16, ptr %13, align 2, !tbaa !11
  %62 = zext i16 %61 to i32
  %63 = shl i32 %62, 3
  %64 = xor i32 %60, %63
  %65 = and i32 %64, 34952
  %66 = xor i32 %58, %65
  %67 = trunc i32 %66 to i16
  %68 = load ptr, ptr %4, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %68, i32 0, i32 1
  %70 = getelementptr inbounds [4 x i16], ptr %69, i64 0, i64 0
  store i16 %67, ptr %70, align 2, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 2, ptr %13) #2
  br label %71

71:                                               ; preds = %50
  br label %72

72:                                               ; preds = %71
  br label %73

73:                                               ; preds = %72
  call void @llvm.lifetime.start.p0(i64 2, ptr %14) #2
  %74 = load ptr, ptr %4, align 8, !tbaa !5
  %75 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %74, i32 0, i32 1
  %76 = getelementptr inbounds [4 x i16], ptr %75, i64 0, i64 1
  %77 = load i16, ptr %76, align 2, !tbaa !11
  store i16 %77, ptr %14, align 2, !tbaa !11
  %78 = load i16, ptr %14, align 2, !tbaa !11
  %79 = zext i16 %78 to i32
  %80 = ashr i32 %79, 1
  %81 = and i32 %80, 30583
  %82 = load i16, ptr %14, align 2, !tbaa !11
  %83 = zext i16 %82 to i32
  %84 = load i16, ptr %14, align 2, !tbaa !11
  %85 = zext i16 %84 to i32
  %86 = shl i32 %85, 3
  %87 = xor i32 %83, %86
  %88 = and i32 %87, 34952
  %89 = xor i32 %81, %88
  %90 = trunc i32 %89 to i16
  %91 = load ptr, ptr %4, align 8, !tbaa !5
  %92 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %91, i32 0, i32 1
  %93 = getelementptr inbounds [4 x i16], ptr %92, i64 0, i64 1
  store i16 %90, ptr %93, align 2, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 2, ptr %14) #2
  br label %94

94:                                               ; preds = %73
  br label %95

95:                                               ; preds = %94
  br label %96

96:                                               ; preds = %95
  call void @llvm.lifetime.start.p0(i64 2, ptr %15) #2
  %97 = load ptr, ptr %4, align 8, !tbaa !5
  %98 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %97, i32 0, i32 2
  %99 = getelementptr inbounds [4 x i16], ptr %98, i64 0, i64 0
  %100 = load i16, ptr %99, align 2, !tbaa !11
  store i16 %100, ptr %15, align 2, !tbaa !11
  %101 = load i16, ptr %15, align 2, !tbaa !11
  %102 = zext i16 %101 to i32
  %103 = shl i32 %102, 1
  %104 = and i32 %103, 61166
  %105 = load i16, ptr %15, align 2, !tbaa !11
  %106 = zext i16 %105 to i32
  %107 = ashr i32 %106, 3
  %108 = load i16, ptr %15, align 2, !tbaa !11
  %109 = zext i16 %108 to i32
  %110 = ashr i32 %109, 2
  %111 = xor i32 %107, %110
  %112 = and i32 %111, 4369
  %113 = xor i32 %104, %112
  %114 = trunc i32 %113 to i16
  %115 = load ptr, ptr %4, align 8, !tbaa !5
  %116 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %115, i32 0, i32 2
  %117 = getelementptr inbounds [4 x i16], ptr %116, i64 0, i64 0
  store i16 %114, ptr %117, align 2, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 2, ptr %15) #2
  br label %118

118:                                              ; preds = %96
  br label %119

119:                                              ; preds = %118
  br label %120

120:                                              ; preds = %119
  call void @llvm.lifetime.start.p0(i64 2, ptr %16) #2
  %121 = load ptr, ptr %4, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %121, i32 0, i32 2
  %123 = getelementptr inbounds [4 x i16], ptr %122, i64 0, i64 1
  %124 = load i16, ptr %123, align 2, !tbaa !11
  store i16 %124, ptr %16, align 2, !tbaa !11
  %125 = load i16, ptr %16, align 2, !tbaa !11
  %126 = zext i16 %125 to i32
  %127 = shl i32 %126, 1
  %128 = and i32 %127, 61166
  %129 = load i16, ptr %16, align 2, !tbaa !11
  %130 = zext i16 %129 to i32
  %131 = ashr i32 %130, 3
  %132 = load i16, ptr %16, align 2, !tbaa !11
  %133 = zext i16 %132 to i32
  %134 = ashr i32 %133, 2
  %135 = xor i32 %131, %134
  %136 = and i32 %135, 4369
  %137 = xor i32 %128, %136
  %138 = trunc i32 %137 to i16
  %139 = load ptr, ptr %4, align 8, !tbaa !5
  %140 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %139, i32 0, i32 2
  %141 = getelementptr inbounds [4 x i16], ptr %140, i64 0, i64 1
  store i16 %138, ptr %141, align 2, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 2, ptr %16) #2
  br label %142

142:                                              ; preds = %120
  br label %143

143:                                              ; preds = %142
  br label %144

144:                                              ; preds = %143
  call void @llvm.lifetime.start.p0(i64 2, ptr %17) #2
  %145 = load ptr, ptr %4, align 8, !tbaa !5
  %146 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %145, i32 0, i32 0
  %147 = getelementptr inbounds [4 x i16], ptr %146, i64 0, i64 0
  %148 = load i16, ptr %147, align 2, !tbaa !11
  store i16 %148, ptr %17, align 2, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 2, ptr %18) #2
  %149 = load ptr, ptr %4, align 8, !tbaa !5
  %150 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %149, i32 0, i32 0
  %151 = getelementptr inbounds [4 x i16], ptr %150, i64 0, i64 1
  %152 = load i16, ptr %151, align 2, !tbaa !11
  store i16 %152, ptr %18, align 2, !tbaa !11
  %153 = load ptr, ptr %4, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %153, i32 0, i32 0
  %155 = getelementptr inbounds [4 x i16], ptr %154, i64 0, i64 2
  %156 = load i16, ptr %155, align 2, !tbaa !11
  %157 = load ptr, ptr %4, align 8, !tbaa !5
  %158 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %157, i32 0, i32 0
  %159 = getelementptr inbounds [4 x i16], ptr %158, i64 0, i64 0
  store i16 %156, ptr %159, align 2, !tbaa !11
  %160 = load ptr, ptr %4, align 8, !tbaa !5
  %161 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %160, i32 0, i32 0
  %162 = getelementptr inbounds [4 x i16], ptr %161, i64 0, i64 3
  %163 = load i16, ptr %162, align 2, !tbaa !11
  %164 = load ptr, ptr %4, align 8, !tbaa !5
  %165 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %164, i32 0, i32 0
  %166 = getelementptr inbounds [4 x i16], ptr %165, i64 0, i64 1
  store i16 %163, ptr %166, align 2, !tbaa !11
  %167 = load i16, ptr %17, align 2, !tbaa !11
  %168 = zext i16 %167 to i32
  %169 = shl i32 %168, 8
  %170 = and i32 %169, 61440
  %171 = load i16, ptr %17, align 2, !tbaa !11
  %172 = zext i16 %171 to i32
  %173 = ashr i32 %172, 4
  %174 = and i32 %173, 3840
  %175 = or i32 %170, %174
  %176 = load i16, ptr %18, align 2, !tbaa !11
  %177 = zext i16 %176 to i32
  %178 = ashr i32 %177, 8
  %179 = and i32 %178, 240
  %180 = or i32 %175, %179
  %181 = load i16, ptr %18, align 2, !tbaa !11
  %182 = zext i16 %181 to i32
  %183 = and i32 %182, 15
  %184 = or i32 %180, %183
  %185 = trunc i32 %184 to i16
  %186 = load ptr, ptr %4, align 8, !tbaa !5
  %187 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %186, i32 0, i32 0
  %188 = getelementptr inbounds [4 x i16], ptr %187, i64 0, i64 2
  store i16 %185, ptr %188, align 2, !tbaa !11
  %189 = load i16, ptr %18, align 2, !tbaa !11
  %190 = zext i16 %189 to i32
  %191 = shl i32 %190, 8
  %192 = and i32 %191, 61440
  %193 = load i16, ptr %17, align 2, !tbaa !11
  %194 = zext i16 %193 to i32
  %195 = shl i32 %194, 8
  %196 = and i32 %195, 3840
  %197 = or i32 %192, %196
  %198 = load i16, ptr %18, align 2, !tbaa !11
  %199 = zext i16 %198 to i32
  %200 = ashr i32 %199, 4
  %201 = and i32 %200, 240
  %202 = or i32 %197, %201
  %203 = load i16, ptr %17, align 2, !tbaa !11
  %204 = zext i16 %203 to i32
  %205 = ashr i32 %204, 8
  %206 = and i32 %205, 15
  %207 = or i32 %202, %206
  %208 = trunc i32 %207 to i16
  %209 = load ptr, ptr %4, align 8, !tbaa !5
  %210 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %209, i32 0, i32 0
  %211 = getelementptr inbounds [4 x i16], ptr %210, i64 0, i64 3
  store i16 %208, ptr %211, align 2, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 2, ptr %18) #2
  call void @llvm.lifetime.end.p0(i64 2, ptr %17) #2
  br label %212

212:                                              ; preds = %144
  br label %213

213:                                              ; preds = %212
  br label %214

214:                                              ; preds = %213
  call void @llvm.lifetime.start.p0(i64 2, ptr %19) #2
  %215 = load ptr, ptr %4, align 8, !tbaa !5
  %216 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %215, i32 0, i32 1
  %217 = getelementptr inbounds [4 x i16], ptr %216, i64 0, i64 0
  %218 = load i16, ptr %217, align 2, !tbaa !11
  store i16 %218, ptr %19, align 2, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 2, ptr %20) #2
  %219 = load ptr, ptr %4, align 8, !tbaa !5
  %220 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %219, i32 0, i32 1
  %221 = getelementptr inbounds [4 x i16], ptr %220, i64 0, i64 1
  %222 = load i16, ptr %221, align 2, !tbaa !11
  store i16 %222, ptr %20, align 2, !tbaa !11
  %223 = load ptr, ptr %4, align 8, !tbaa !5
  %224 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %223, i32 0, i32 1
  %225 = getelementptr inbounds [4 x i16], ptr %224, i64 0, i64 2
  %226 = load i16, ptr %225, align 2, !tbaa !11
  %227 = load ptr, ptr %4, align 8, !tbaa !5
  %228 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %227, i32 0, i32 1
  %229 = getelementptr inbounds [4 x i16], ptr %228, i64 0, i64 0
  store i16 %226, ptr %229, align 2, !tbaa !11
  %230 = load ptr, ptr %4, align 8, !tbaa !5
  %231 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %230, i32 0, i32 1
  %232 = getelementptr inbounds [4 x i16], ptr %231, i64 0, i64 3
  %233 = load i16, ptr %232, align 2, !tbaa !11
  %234 = load ptr, ptr %4, align 8, !tbaa !5
  %235 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %234, i32 0, i32 1
  %236 = getelementptr inbounds [4 x i16], ptr %235, i64 0, i64 1
  store i16 %233, ptr %236, align 2, !tbaa !11
  %237 = load i16, ptr %19, align 2, !tbaa !11
  %238 = zext i16 %237 to i32
  %239 = shl i32 %238, 8
  %240 = and i32 %239, 61440
  %241 = load i16, ptr %19, align 2, !tbaa !11
  %242 = zext i16 %241 to i32
  %243 = ashr i32 %242, 4
  %244 = and i32 %243, 3840
  %245 = or i32 %240, %244
  %246 = load i16, ptr %20, align 2, !tbaa !11
  %247 = zext i16 %246 to i32
  %248 = ashr i32 %247, 8
  %249 = and i32 %248, 240
  %250 = or i32 %245, %249
  %251 = load i16, ptr %20, align 2, !tbaa !11
  %252 = zext i16 %251 to i32
  %253 = and i32 %252, 15
  %254 = or i32 %250, %253
  %255 = trunc i32 %254 to i16
  %256 = load ptr, ptr %4, align 8, !tbaa !5
  %257 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %256, i32 0, i32 1
  %258 = getelementptr inbounds [4 x i16], ptr %257, i64 0, i64 2
  store i16 %255, ptr %258, align 2, !tbaa !11
  %259 = load i16, ptr %20, align 2, !tbaa !11
  %260 = zext i16 %259 to i32
  %261 = shl i32 %260, 8
  %262 = and i32 %261, 61440
  %263 = load i16, ptr %19, align 2, !tbaa !11
  %264 = zext i16 %263 to i32
  %265 = shl i32 %264, 8
  %266 = and i32 %265, 3840
  %267 = or i32 %262, %266
  %268 = load i16, ptr %20, align 2, !tbaa !11
  %269 = zext i16 %268 to i32
  %270 = ashr i32 %269, 4
  %271 = and i32 %270, 240
  %272 = or i32 %267, %271
  %273 = load i16, ptr %19, align 2, !tbaa !11
  %274 = zext i16 %273 to i32
  %275 = ashr i32 %274, 8
  %276 = and i32 %275, 15
  %277 = or i32 %272, %276
  %278 = trunc i32 %277 to i16
  %279 = load ptr, ptr %4, align 8, !tbaa !5
  %280 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %279, i32 0, i32 1
  %281 = getelementptr inbounds [4 x i16], ptr %280, i64 0, i64 3
  store i16 %278, ptr %281, align 2, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 2, ptr %20) #2
  call void @llvm.lifetime.end.p0(i64 2, ptr %19) #2
  br label %282

282:                                              ; preds = %214
  br label %283

283:                                              ; preds = %282
  br label %284

284:                                              ; preds = %283
  call void @llvm.lifetime.start.p0(i64 2, ptr %21) #2
  %285 = load ptr, ptr %4, align 8, !tbaa !5
  %286 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %285, i32 0, i32 2
  %287 = getelementptr inbounds [4 x i16], ptr %286, i64 0, i64 0
  %288 = load i16, ptr %287, align 2, !tbaa !11
  store i16 %288, ptr %21, align 2, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 2, ptr %22) #2
  %289 = load ptr, ptr %4, align 8, !tbaa !5
  %290 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %289, i32 0, i32 2
  %291 = getelementptr inbounds [4 x i16], ptr %290, i64 0, i64 1
  %292 = load i16, ptr %291, align 2, !tbaa !11
  store i16 %292, ptr %22, align 2, !tbaa !11
  %293 = load ptr, ptr %4, align 8, !tbaa !5
  %294 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %293, i32 0, i32 2
  %295 = getelementptr inbounds [4 x i16], ptr %294, i64 0, i64 2
  %296 = load i16, ptr %295, align 2, !tbaa !11
  %297 = load ptr, ptr %4, align 8, !tbaa !5
  %298 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %297, i32 0, i32 2
  %299 = getelementptr inbounds [4 x i16], ptr %298, i64 0, i64 0
  store i16 %296, ptr %299, align 2, !tbaa !11
  %300 = load ptr, ptr %4, align 8, !tbaa !5
  %301 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %300, i32 0, i32 2
  %302 = getelementptr inbounds [4 x i16], ptr %301, i64 0, i64 3
  %303 = load i16, ptr %302, align 2, !tbaa !11
  %304 = load ptr, ptr %4, align 8, !tbaa !5
  %305 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %304, i32 0, i32 2
  %306 = getelementptr inbounds [4 x i16], ptr %305, i64 0, i64 1
  store i16 %303, ptr %306, align 2, !tbaa !11
  %307 = load i16, ptr %21, align 2, !tbaa !11
  %308 = zext i16 %307 to i32
  %309 = shl i32 %308, 8
  %310 = and i32 %309, 61440
  %311 = load i16, ptr %21, align 2, !tbaa !11
  %312 = zext i16 %311 to i32
  %313 = ashr i32 %312, 4
  %314 = and i32 %313, 3840
  %315 = or i32 %310, %314
  %316 = load i16, ptr %22, align 2, !tbaa !11
  %317 = zext i16 %316 to i32
  %318 = ashr i32 %317, 8
  %319 = and i32 %318, 240
  %320 = or i32 %315, %319
  %321 = load i16, ptr %22, align 2, !tbaa !11
  %322 = zext i16 %321 to i32
  %323 = and i32 %322, 15
  %324 = or i32 %320, %323
  %325 = trunc i32 %324 to i16
  %326 = load ptr, ptr %4, align 8, !tbaa !5
  %327 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %326, i32 0, i32 2
  %328 = getelementptr inbounds [4 x i16], ptr %327, i64 0, i64 2
  store i16 %325, ptr %328, align 2, !tbaa !11
  %329 = load i16, ptr %22, align 2, !tbaa !11
  %330 = zext i16 %329 to i32
  %331 = shl i32 %330, 8
  %332 = and i32 %331, 61440
  %333 = load i16, ptr %21, align 2, !tbaa !11
  %334 = zext i16 %333 to i32
  %335 = shl i32 %334, 8
  %336 = and i32 %335, 3840
  %337 = or i32 %332, %336
  %338 = load i16, ptr %22, align 2, !tbaa !11
  %339 = zext i16 %338 to i32
  %340 = ashr i32 %339, 4
  %341 = and i32 %340, 240
  %342 = or i32 %337, %341
  %343 = load i16, ptr %21, align 2, !tbaa !11
  %344 = zext i16 %343 to i32
  %345 = ashr i32 %344, 8
  %346 = and i32 %345, 15
  %347 = or i32 %342, %346
  %348 = trunc i32 %347 to i16
  %349 = load ptr, ptr %4, align 8, !tbaa !5
  %350 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %349, i32 0, i32 2
  %351 = getelementptr inbounds [4 x i16], ptr %350, i64 0, i64 3
  store i16 %348, ptr %351, align 2, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 2, ptr %22) #2
  call void @llvm.lifetime.end.p0(i64 2, ptr %21) #2
  br label %352

352:                                              ; preds = %284
  br label %353

353:                                              ; preds = %352
  %354 = load i16, ptr %7, align 2, !tbaa !11
  store i16 %354, ptr %11, align 2, !tbaa !11
  %355 = load i16, ptr %8, align 2, !tbaa !11
  store i16 %355, ptr %7, align 2, !tbaa !11
  %356 = load i16, ptr %9, align 2, !tbaa !11
  store i16 %356, ptr %8, align 2, !tbaa !11
  %357 = load i16, ptr %10, align 2, !tbaa !11
  store i16 %357, ptr %9, align 2, !tbaa !11
  %358 = load i16, ptr %11, align 2, !tbaa !11
  %359 = zext i16 %358 to i32
  %360 = load i16, ptr %9, align 2, !tbaa !11
  %361 = zext i16 %360 to i32
  %362 = xor i32 %359, %361
  %363 = trunc i32 %362 to i16
  store i16 %363, ptr %10, align 2, !tbaa !11
  %364 = load i16, ptr %7, align 2, !tbaa !11
  %365 = zext i16 %364 to i32
  %366 = load i16, ptr %9, align 2, !tbaa !11
  %367 = zext i16 %366 to i32
  %368 = xor i32 %367, %365
  %369 = trunc i32 %368 to i16
  store i16 %369, ptr %9, align 2, !tbaa !11
  %370 = load i16, ptr %9, align 2, !tbaa !11
  %371 = zext i16 %370 to i32
  %372 = load i16, ptr %8, align 2, !tbaa !11
  %373 = zext i16 %372 to i32
  %374 = xor i32 %373, %371
  %375 = trunc i32 %374 to i16
  store i16 %375, ptr %8, align 2, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 2, ptr %23) #2
  %376 = load i16, ptr %8, align 2, !tbaa !11
  store i16 %376, ptr %23, align 2, !tbaa !11
  %377 = load i16, ptr %23, align 2, !tbaa !11
  %378 = zext i16 %377 to i32
  %379 = shl i32 %378, 4
  %380 = load i16, ptr %23, align 2, !tbaa !11
  %381 = zext i16 %380 to i32
  %382 = ashr i32 %381, 12
  %383 = or i32 %379, %382
  store i32 %383, ptr %24, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 2, ptr %23) #2
  %384 = load i32, ptr %24, align 4, !tbaa !9
  %385 = trunc i32 %384 to i16
  store i16 %385, ptr %8, align 2, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 2, ptr %25) #2
  %386 = load i16, ptr %9, align 2, !tbaa !11
  store i16 %386, ptr %25, align 2, !tbaa !11
  %387 = load i16, ptr %25, align 2, !tbaa !11
  %388 = zext i16 %387 to i32
  %389 = shl i32 %388, 8
  %390 = load i16, ptr %25, align 2, !tbaa !11
  %391 = zext i16 %390 to i32
  %392 = ashr i32 %391, 8
  %393 = or i32 %389, %392
  store i32 %393, ptr %26, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 2, ptr %25) #2
  %394 = load i32, ptr %26, align 4, !tbaa !9
  %395 = trunc i32 %394 to i16
  store i16 %395, ptr %9, align 2, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 2, ptr %27) #2
  %396 = load i16, ptr %10, align 2, !tbaa !11
  store i16 %396, ptr %27, align 2, !tbaa !11
  %397 = load i16, ptr %27, align 2, !tbaa !11
  %398 = zext i16 %397 to i32
  %399 = shl i32 %398, 12
  %400 = load i16, ptr %27, align 2, !tbaa !11
  %401 = zext i16 %400 to i32
  %402 = ashr i32 %401, 4
  %403 = or i32 %399, %402
  store i32 %403, ptr %28, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 2, ptr %27) #2
  %404 = load i32, ptr %28, align 4, !tbaa !9
  %405 = trunc i32 %404 to i16
  store i16 %405, ptr %10, align 2, !tbaa !11
  %406 = load i32, ptr %5, align 4, !tbaa !9
  %407 = add i32 %406, -1
  store i32 %407, ptr %5, align 4, !tbaa !9
  %408 = zext i32 %407 to i64
  %409 = getelementptr inbounds [87 x i8], ptr @RC, i64 0, i64 %408
  %410 = load i8, ptr %409, align 1, !tbaa !13
  store i8 %410, ptr %12, align 1, !tbaa !13
  %411 = load ptr, ptr %4, align 8, !tbaa !5
  %412 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %411, i32 0, i32 0
  %413 = getelementptr inbounds [4 x i16], ptr %412, i64 0, i64 0
  %414 = load i16, ptr %413, align 2, !tbaa !11
  %415 = zext i16 %414 to i32
  %416 = load ptr, ptr %4, align 8, !tbaa !5
  %417 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %416, i32 0, i32 1
  %418 = getelementptr inbounds [4 x i16], ptr %417, i64 0, i64 0
  %419 = load i16, ptr %418, align 2, !tbaa !11
  %420 = zext i16 %419 to i32
  %421 = xor i32 %415, %420
  %422 = load ptr, ptr %4, align 8, !tbaa !5
  %423 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %422, i32 0, i32 2
  %424 = getelementptr inbounds [4 x i16], ptr %423, i64 0, i64 0
  %425 = load i16, ptr %424, align 2, !tbaa !11
  %426 = zext i16 %425 to i32
  %427 = xor i32 %421, %426
  %428 = load i8, ptr %12, align 1, !tbaa !13
  %429 = zext i8 %428 to i32
  %430 = and i32 %429, 15
  %431 = shl i32 %430, 12
  %432 = xor i32 %427, %431
  %433 = xor i32 %432, 32
  %434 = load i16, ptr %7, align 2, !tbaa !11
  %435 = zext i16 %434 to i32
  %436 = xor i32 %435, %433
  %437 = trunc i32 %436 to i16
  store i16 %437, ptr %7, align 2, !tbaa !11
  %438 = load ptr, ptr %4, align 8, !tbaa !5
  %439 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %438, i32 0, i32 0
  %440 = getelementptr inbounds [4 x i16], ptr %439, i64 0, i64 1
  %441 = load i16, ptr %440, align 2, !tbaa !11
  %442 = zext i16 %441 to i32
  %443 = load ptr, ptr %4, align 8, !tbaa !5
  %444 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %443, i32 0, i32 1
  %445 = getelementptr inbounds [4 x i16], ptr %444, i64 0, i64 1
  %446 = load i16, ptr %445, align 2, !tbaa !11
  %447 = zext i16 %446 to i32
  %448 = xor i32 %442, %447
  %449 = load ptr, ptr %4, align 8, !tbaa !5
  %450 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %449, i32 0, i32 2
  %451 = getelementptr inbounds [4 x i16], ptr %450, i64 0, i64 1
  %452 = load i16, ptr %451, align 2, !tbaa !11
  %453 = zext i16 %452 to i32
  %454 = xor i32 %448, %453
  %455 = load i8, ptr %12, align 1, !tbaa !13
  %456 = zext i8 %455 to i32
  %457 = and i32 %456, 112
  %458 = shl i32 %457, 8
  %459 = xor i32 %454, %458
  %460 = load i16, ptr %8, align 2, !tbaa !11
  %461 = zext i16 %460 to i32
  %462 = xor i32 %461, %459
  %463 = trunc i32 %462 to i16
  store i16 %463, ptr %8, align 2, !tbaa !11
  %464 = load i16, ptr %9, align 2, !tbaa !11
  %465 = zext i16 %464 to i32
  %466 = xor i32 %465, 8192
  %467 = trunc i32 %466 to i16
  store i16 %467, ptr %9, align 2, !tbaa !11
  br label %468

468:                                              ; preds = %353
  %469 = load i16, ptr %7, align 2, !tbaa !11
  %470 = zext i16 %469 to i32
  %471 = xor i32 %470, -1
  %472 = trunc i32 %471 to i16
  store i16 %472, ptr %7, align 2, !tbaa !11
  %473 = load i16, ptr %7, align 2, !tbaa !11
  %474 = zext i16 %473 to i32
  %475 = ashr i32 %474, 3
  %476 = load i16, ptr %7, align 2, !tbaa !11
  %477 = zext i16 %476 to i32
  %478 = ashr i32 %477, 2
  %479 = and i32 %475, %478
  %480 = and i32 %479, 4369
  %481 = load i16, ptr %7, align 2, !tbaa !11
  %482 = zext i16 %481 to i32
  %483 = xor i32 %480, %482
  %484 = trunc i32 %483 to i16
  store i16 %484, ptr %7, align 2, !tbaa !11
  %485 = load i16, ptr %7, align 2, !tbaa !11
  %486 = zext i16 %485 to i32
  %487 = shl i32 %486, 1
  %488 = load i16, ptr %7, align 2, !tbaa !11
  %489 = zext i16 %488 to i32
  %490 = ashr i32 %489, 2
  %491 = and i32 %487, %490
  %492 = and i32 %491, 8738
  %493 = load i16, ptr %7, align 2, !tbaa !11
  %494 = zext i16 %493 to i32
  %495 = xor i32 %492, %494
  %496 = trunc i32 %495 to i16
  store i16 %496, ptr %7, align 2, !tbaa !11
  %497 = load i16, ptr %7, align 2, !tbaa !11
  %498 = zext i16 %497 to i32
  %499 = shl i32 %498, 1
  %500 = load i16, ptr %7, align 2, !tbaa !11
  %501 = zext i16 %500 to i32
  %502 = shl i32 %501, 2
  %503 = and i32 %499, %502
  %504 = and i32 %503, 17476
  %505 = load i16, ptr %7, align 2, !tbaa !11
  %506 = zext i16 %505 to i32
  %507 = xor i32 %504, %506
  %508 = trunc i32 %507 to i16
  store i16 %508, ptr %7, align 2, !tbaa !11
  %509 = load i16, ptr %7, align 2, !tbaa !11
  %510 = zext i16 %509 to i32
  %511 = shl i32 %510, 1
  %512 = load i16, ptr %7, align 2, !tbaa !11
  %513 = zext i16 %512 to i32
  %514 = shl i32 %513, 2
  %515 = and i32 %511, %514
  %516 = and i32 %515, 34952
  %517 = load i16, ptr %7, align 2, !tbaa !11
  %518 = zext i16 %517 to i32
  %519 = xor i32 %516, %518
  %520 = trunc i32 %519 to i16
  store i16 %520, ptr %7, align 2, !tbaa !11
  %521 = load i16, ptr %7, align 2, !tbaa !11
  %522 = zext i16 %521 to i32
  %523 = xor i32 %522, -1
  %524 = trunc i32 %523 to i16
  store i16 %524, ptr %7, align 2, !tbaa !11
  %525 = load i16, ptr %7, align 2, !tbaa !11
  %526 = zext i16 %525 to i32
  %527 = shl i32 %526, 1
  %528 = and i32 %527, 61166
  %529 = load i16, ptr %7, align 2, !tbaa !11
  %530 = zext i16 %529 to i32
  %531 = ashr i32 %530, 3
  %532 = and i32 %531, 4369
  %533 = or i32 %528, %532
  %534 = trunc i32 %533 to i16
  store i16 %534, ptr %7, align 2, !tbaa !11
  br label %535

535:                                              ; preds = %468
  br label %536

536:                                              ; preds = %535
  br label %537

537:                                              ; preds = %536
  %538 = load i16, ptr %8, align 2, !tbaa !11
  %539 = zext i16 %538 to i32
  %540 = xor i32 %539, -1
  %541 = trunc i32 %540 to i16
  store i16 %541, ptr %8, align 2, !tbaa !11
  %542 = load i16, ptr %8, align 2, !tbaa !11
  %543 = zext i16 %542 to i32
  %544 = ashr i32 %543, 3
  %545 = load i16, ptr %8, align 2, !tbaa !11
  %546 = zext i16 %545 to i32
  %547 = ashr i32 %546, 2
  %548 = and i32 %544, %547
  %549 = and i32 %548, 4369
  %550 = load i16, ptr %8, align 2, !tbaa !11
  %551 = zext i16 %550 to i32
  %552 = xor i32 %549, %551
  %553 = trunc i32 %552 to i16
  store i16 %553, ptr %8, align 2, !tbaa !11
  %554 = load i16, ptr %8, align 2, !tbaa !11
  %555 = zext i16 %554 to i32
  %556 = shl i32 %555, 1
  %557 = load i16, ptr %8, align 2, !tbaa !11
  %558 = zext i16 %557 to i32
  %559 = ashr i32 %558, 2
  %560 = and i32 %556, %559
  %561 = and i32 %560, 8738
  %562 = load i16, ptr %8, align 2, !tbaa !11
  %563 = zext i16 %562 to i32
  %564 = xor i32 %561, %563
  %565 = trunc i32 %564 to i16
  store i16 %565, ptr %8, align 2, !tbaa !11
  %566 = load i16, ptr %8, align 2, !tbaa !11
  %567 = zext i16 %566 to i32
  %568 = shl i32 %567, 1
  %569 = load i16, ptr %8, align 2, !tbaa !11
  %570 = zext i16 %569 to i32
  %571 = shl i32 %570, 2
  %572 = and i32 %568, %571
  %573 = and i32 %572, 17476
  %574 = load i16, ptr %8, align 2, !tbaa !11
  %575 = zext i16 %574 to i32
  %576 = xor i32 %573, %575
  %577 = trunc i32 %576 to i16
  store i16 %577, ptr %8, align 2, !tbaa !11
  %578 = load i16, ptr %8, align 2, !tbaa !11
  %579 = zext i16 %578 to i32
  %580 = shl i32 %579, 1
  %581 = load i16, ptr %8, align 2, !tbaa !11
  %582 = zext i16 %581 to i32
  %583 = shl i32 %582, 2
  %584 = and i32 %580, %583
  %585 = and i32 %584, 34952
  %586 = load i16, ptr %8, align 2, !tbaa !11
  %587 = zext i16 %586 to i32
  %588 = xor i32 %585, %587
  %589 = trunc i32 %588 to i16
  store i16 %589, ptr %8, align 2, !tbaa !11
  %590 = load i16, ptr %8, align 2, !tbaa !11
  %591 = zext i16 %590 to i32
  %592 = xor i32 %591, -1
  %593 = trunc i32 %592 to i16
  store i16 %593, ptr %8, align 2, !tbaa !11
  %594 = load i16, ptr %8, align 2, !tbaa !11
  %595 = zext i16 %594 to i32
  %596 = shl i32 %595, 1
  %597 = and i32 %596, 61166
  %598 = load i16, ptr %8, align 2, !tbaa !11
  %599 = zext i16 %598 to i32
  %600 = ashr i32 %599, 3
  %601 = and i32 %600, 4369
  %602 = or i32 %597, %601
  %603 = trunc i32 %602 to i16
  store i16 %603, ptr %8, align 2, !tbaa !11
  br label %604

604:                                              ; preds = %537
  br label %605

605:                                              ; preds = %604
  br label %606

606:                                              ; preds = %605
  %607 = load i16, ptr %9, align 2, !tbaa !11
  %608 = zext i16 %607 to i32
  %609 = xor i32 %608, -1
  %610 = trunc i32 %609 to i16
  store i16 %610, ptr %9, align 2, !tbaa !11
  %611 = load i16, ptr %9, align 2, !tbaa !11
  %612 = zext i16 %611 to i32
  %613 = ashr i32 %612, 3
  %614 = load i16, ptr %9, align 2, !tbaa !11
  %615 = zext i16 %614 to i32
  %616 = ashr i32 %615, 2
  %617 = and i32 %613, %616
  %618 = and i32 %617, 4369
  %619 = load i16, ptr %9, align 2, !tbaa !11
  %620 = zext i16 %619 to i32
  %621 = xor i32 %618, %620
  %622 = trunc i32 %621 to i16
  store i16 %622, ptr %9, align 2, !tbaa !11
  %623 = load i16, ptr %9, align 2, !tbaa !11
  %624 = zext i16 %623 to i32
  %625 = shl i32 %624, 1
  %626 = load i16, ptr %9, align 2, !tbaa !11
  %627 = zext i16 %626 to i32
  %628 = ashr i32 %627, 2
  %629 = and i32 %625, %628
  %630 = and i32 %629, 8738
  %631 = load i16, ptr %9, align 2, !tbaa !11
  %632 = zext i16 %631 to i32
  %633 = xor i32 %630, %632
  %634 = trunc i32 %633 to i16
  store i16 %634, ptr %9, align 2, !tbaa !11
  %635 = load i16, ptr %9, align 2, !tbaa !11
  %636 = zext i16 %635 to i32
  %637 = shl i32 %636, 1
  %638 = load i16, ptr %9, align 2, !tbaa !11
  %639 = zext i16 %638 to i32
  %640 = shl i32 %639, 2
  %641 = and i32 %637, %640
  %642 = and i32 %641, 17476
  %643 = load i16, ptr %9, align 2, !tbaa !11
  %644 = zext i16 %643 to i32
  %645 = xor i32 %642, %644
  %646 = trunc i32 %645 to i16
  store i16 %646, ptr %9, align 2, !tbaa !11
  %647 = load i16, ptr %9, align 2, !tbaa !11
  %648 = zext i16 %647 to i32
  %649 = shl i32 %648, 1
  %650 = load i16, ptr %9, align 2, !tbaa !11
  %651 = zext i16 %650 to i32
  %652 = shl i32 %651, 2
  %653 = and i32 %649, %652
  %654 = and i32 %653, 34952
  %655 = load i16, ptr %9, align 2, !tbaa !11
  %656 = zext i16 %655 to i32
  %657 = xor i32 %654, %656
  %658 = trunc i32 %657 to i16
  store i16 %658, ptr %9, align 2, !tbaa !11
  %659 = load i16, ptr %9, align 2, !tbaa !11
  %660 = zext i16 %659 to i32
  %661 = xor i32 %660, -1
  %662 = trunc i32 %661 to i16
  store i16 %662, ptr %9, align 2, !tbaa !11
  %663 = load i16, ptr %9, align 2, !tbaa !11
  %664 = zext i16 %663 to i32
  %665 = shl i32 %664, 1
  %666 = and i32 %665, 61166
  %667 = load i16, ptr %9, align 2, !tbaa !11
  %668 = zext i16 %667 to i32
  %669 = ashr i32 %668, 3
  %670 = and i32 %669, 4369
  %671 = or i32 %666, %670
  %672 = trunc i32 %671 to i16
  store i16 %672, ptr %9, align 2, !tbaa !11
  br label %673

673:                                              ; preds = %606
  br label %674

674:                                              ; preds = %673
  br label %675

675:                                              ; preds = %674
  %676 = load i16, ptr %10, align 2, !tbaa !11
  %677 = zext i16 %676 to i32
  %678 = xor i32 %677, -1
  %679 = trunc i32 %678 to i16
  store i16 %679, ptr %10, align 2, !tbaa !11
  %680 = load i16, ptr %10, align 2, !tbaa !11
  %681 = zext i16 %680 to i32
  %682 = ashr i32 %681, 3
  %683 = load i16, ptr %10, align 2, !tbaa !11
  %684 = zext i16 %683 to i32
  %685 = ashr i32 %684, 2
  %686 = and i32 %682, %685
  %687 = and i32 %686, 4369
  %688 = load i16, ptr %10, align 2, !tbaa !11
  %689 = zext i16 %688 to i32
  %690 = xor i32 %687, %689
  %691 = trunc i32 %690 to i16
  store i16 %691, ptr %10, align 2, !tbaa !11
  %692 = load i16, ptr %10, align 2, !tbaa !11
  %693 = zext i16 %692 to i32
  %694 = shl i32 %693, 1
  %695 = load i16, ptr %10, align 2, !tbaa !11
  %696 = zext i16 %695 to i32
  %697 = ashr i32 %696, 2
  %698 = and i32 %694, %697
  %699 = and i32 %698, 8738
  %700 = load i16, ptr %10, align 2, !tbaa !11
  %701 = zext i16 %700 to i32
  %702 = xor i32 %699, %701
  %703 = trunc i32 %702 to i16
  store i16 %703, ptr %10, align 2, !tbaa !11
  %704 = load i16, ptr %10, align 2, !tbaa !11
  %705 = zext i16 %704 to i32
  %706 = shl i32 %705, 1
  %707 = load i16, ptr %10, align 2, !tbaa !11
  %708 = zext i16 %707 to i32
  %709 = shl i32 %708, 2
  %710 = and i32 %706, %709
  %711 = and i32 %710, 17476
  %712 = load i16, ptr %10, align 2, !tbaa !11
  %713 = zext i16 %712 to i32
  %714 = xor i32 %711, %713
  %715 = trunc i32 %714 to i16
  store i16 %715, ptr %10, align 2, !tbaa !11
  %716 = load i16, ptr %10, align 2, !tbaa !11
  %717 = zext i16 %716 to i32
  %718 = shl i32 %717, 1
  %719 = load i16, ptr %10, align 2, !tbaa !11
  %720 = zext i16 %719 to i32
  %721 = shl i32 %720, 2
  %722 = and i32 %718, %721
  %723 = and i32 %722, 34952
  %724 = load i16, ptr %10, align 2, !tbaa !11
  %725 = zext i16 %724 to i32
  %726 = xor i32 %723, %725
  %727 = trunc i32 %726 to i16
  store i16 %727, ptr %10, align 2, !tbaa !11
  %728 = load i16, ptr %10, align 2, !tbaa !11
  %729 = zext i16 %728 to i32
  %730 = xor i32 %729, -1
  %731 = trunc i32 %730 to i16
  store i16 %731, ptr %10, align 2, !tbaa !11
  %732 = load i16, ptr %10, align 2, !tbaa !11
  %733 = zext i16 %732 to i32
  %734 = shl i32 %733, 1
  %735 = and i32 %734, 61166
  %736 = load i16, ptr %10, align 2, !tbaa !11
  %737 = zext i16 %736 to i32
  %738 = ashr i32 %737, 3
  %739 = and i32 %738, 4369
  %740 = or i32 %735, %739
  %741 = trunc i32 %740 to i16
  store i16 %741, ptr %10, align 2, !tbaa !11
  br label %742

742:                                              ; preds = %675
  br label %743

743:                                              ; preds = %742
  br label %45, !llvm.loop !14

744:                                              ; preds = %45
  %745 = load i16, ptr %7, align 2, !tbaa !11
  %746 = load ptr, ptr %4, align 8, !tbaa !5
  %747 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %746, i32 0, i32 3
  %748 = getelementptr inbounds [4 x i16], ptr %747, i64 0, i64 0
  store i16 %745, ptr %748, align 2, !tbaa !11
  %749 = load i16, ptr %8, align 2, !tbaa !11
  %750 = load ptr, ptr %4, align 8, !tbaa !5
  %751 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %750, i32 0, i32 3
  %752 = getelementptr inbounds [4 x i16], ptr %751, i64 0, i64 1
  store i16 %749, ptr %752, align 2, !tbaa !11
  %753 = load i16, ptr %9, align 2, !tbaa !11
  %754 = load ptr, ptr %4, align 8, !tbaa !5
  %755 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %754, i32 0, i32 3
  %756 = getelementptr inbounds [4 x i16], ptr %755, i64 0, i64 2
  store i16 %753, ptr %756, align 2, !tbaa !11
  %757 = load i16, ptr %10, align 2, !tbaa !11
  %758 = load ptr, ptr %4, align 8, !tbaa !5
  %759 = getelementptr inbounds %struct.forkskinny_64_192_state_t, ptr %758, i32 0, i32 3
  %760 = getelementptr inbounds [4 x i16], ptr %759, i64 0, i64 3
  store i16 %757, ptr %760, align 2, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 1, ptr %12) #2
  call void @llvm.lifetime.end.p0(i64 2, ptr %11) #2
  call void @llvm.lifetime.end.p0(i64 2, ptr %10) #2
  call void @llvm.lifetime.end.p0(i64 2, ptr %9) #2
  call void @llvm.lifetime.end.p0(i64 2, ptr %8) #2
  call void @llvm.lifetime.end.p0(i64 2, 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 = !{!12, !12, i64 0}
!12 = !{!"short", !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"

@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_64_192_inv_rounds(ptr nocapture noundef %0, i32 noundef %1, i32 noundef %2) local_unnamed_addr #0 {
  %4 = getelementptr inbounds i8, ptr %0, i64 24
  %5 = load <4 x i16>, ptr %4, align 2, !tbaa !5
  %6 = icmp ugt i32 %1, %2
  br i1 %6, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %3
  %7 = getelementptr inbounds i8, ptr %0, i64 8
  %8 = getelementptr inbounds i8, ptr %0, i64 10
  %9 = getelementptr inbounds i8, ptr %0, i64 16
  %10 = getelementptr inbounds i8, ptr %0, i64 18
  %11 = getelementptr inbounds i8, ptr %0, i64 2
  %12 = getelementptr inbounds i8, ptr %0, i64 4
  %13 = getelementptr inbounds i8, ptr %0, i64 6
  %14 = getelementptr inbounds i8, ptr %0, i64 12
  %15 = getelementptr inbounds i8, ptr %0, i64 14
  %16 = getelementptr inbounds i8, ptr %0, i64 20
  %17 = getelementptr inbounds i8, ptr %0, i64 22
  %.promoted = load i16, ptr %7, align 2, !tbaa !5
  %.promoted191 = load i16, ptr %8, align 2, !tbaa !5
  %.promoted192 = load i16, ptr %9, align 2, !tbaa !5
  %.promoted193 = load i16, ptr %10, align 2, !tbaa !5
  %.promoted194 = load i16, ptr %0, align 2, !tbaa !5
  %.promoted195 = load i16, ptr %11, align 2, !tbaa !5
  %.promoted196 = load i16, ptr %12, align 2, !tbaa !5
  %.promoted197 = load i16, ptr %13, align 2, !tbaa !5
  %.promoted198 = load i16, ptr %14, align 2, !tbaa !5
  %.promoted199 = load i16, ptr %15, align 2, !tbaa !5
  %.promoted200 = load i16, ptr %16, align 2, !tbaa !5
  %.promoted201 = load i16, ptr %17, align 2, !tbaa !5
  %18 = zext i32 %1 to i64
  %19 = zext i32 %2 to i64
  %20 = extractelement <4 x i16> %5, i64 0
  %21 = extractelement <4 x i16> %5, i64 1
  %22 = extractelement <4 x i16> %5, i64 2
  %23 = extractelement <4 x i16> %5, i64 3
  br label %24

24:                                               ; preds = %.lr.ph, %24
  %indvars.iv = phi i64 [ %18, %.lr.ph ], [ %140, %24 ]
  %25 = phi i16 [ %.promoted201, %.lr.ph ], [ %134, %24 ]
  %26 = phi i16 [ %.promoted200, %.lr.ph ], [ %123, %24 ]
  %27 = phi i16 [ %.promoted199, %.lr.ph ], [ %110, %24 ]
  %28 = phi i16 [ %.promoted198, %.lr.ph ], [ %99, %24 ]
  %29 = phi i16 [ %.promoted197, %.lr.ph ], [ %86, %24 ]
  %30 = phi i16 [ %.promoted196, %.lr.ph ], [ %75, %24 ]
  %31 = phi i16 [ %.promoted195, %.lr.ph ], [ %29, %24 ]
  %32 = phi i16 [ %.promoted194, %.lr.ph ], [ %30, %24 ]
  %33 = phi i16 [ %.promoted193, %.lr.ph ], [ %25, %24 ]
  %34 = phi i16 [ %.promoted192, %.lr.ph ], [ %26, %24 ]
  %35 = phi i16 [ %.promoted191, %.lr.ph ], [ %27, %24 ]
  %36 = phi i16 [ %.promoted, %.lr.ph ], [ %28, %24 ]
  %.0179186 = phi i16 [ %20, %.lr.ph ], [ %189, %24 ]
  %.0180185 = phi i16 [ %21, %.lr.ph ], [ %190, %24 ]
  %.0181184 = phi i16 [ %22, %.lr.ph ], [ %191, %24 ]
  %.0182183 = phi i16 [ %23, %.lr.ph ], [ %192, %24 ]
  %37 = lshr i16 %36, 1
  %38 = and i16 %37, 30583
  %39 = shl i16 %36, 3
  %40 = xor i16 %39, %36
  %41 = and i16 %40, -30584
  %42 = or disjoint i16 %41, %38
  %43 = lshr i16 %35, 1
  %44 = and i16 %43, 30583
  %45 = shl i16 %35, 3
  %46 = xor i16 %45, %35
  %47 = and i16 %46, -30584
  %48 = or disjoint i16 %47, %44
  %49 = shl i16 %34, 1
  %50 = and i16 %49, -4370
  %51 = lshr i16 %34, 3
  %52 = lshr i16 %34, 2
  %53 = xor i16 %51, %52
  %54 = and i16 %53, 4369
  %55 = or disjoint i16 %54, %50
  %56 = shl i16 %33, 1
  %57 = and i16 %56, -4370
  %58 = lshr i16 %33, 3
  %59 = lshr i16 %33, 2
  %60 = xor i16 %58, %59
  %61 = and i16 %60, 4369
  %62 = or disjoint i16 %61, %57
  store i16 %30, ptr %0, align 2, !tbaa !5
  store i16 %29, ptr %11, align 2, !tbaa !5
  %63 = zext i16 %32 to i32
  %64 = shl nuw nsw i32 %63, 8
  %65 = and i32 %64, 61440
  %66 = lshr i32 %63, 4
  %67 = and i32 %66, 3840
  %68 = or disjoint i32 %65, %67
  %69 = zext i16 %31 to i32
  %70 = lshr i32 %69, 8
  %71 = and i32 %70, 240
  %72 = and i32 %69, 15
  %73 = or disjoint i32 %68, %72
  %74 = or disjoint i32 %73, %71
  %75 = trunc nuw i32 %74 to i16
  store i16 %75, ptr %12, align 2, !tbaa !5
  %76 = shl nuw nsw i32 %69, 8
  %77 = and i32 %76, 61440
  %78 = and i32 %64, 3840
  %79 = lshr i32 %69, 4
  %80 = and i32 %79, 240
  %81 = lshr i32 %63, 8
  %82 = and i32 %81, 15
  %83 = or disjoint i32 %82, %78
  %84 = or disjoint i32 %83, %77
  %85 = or disjoint i32 %84, %80
  %86 = trunc nuw i32 %85 to i16
  store i16 %86, ptr %13, align 2, !tbaa !5
  store i16 %28, ptr %7, align 2, !tbaa !5
  store i16 %27, ptr %8, align 2, !tbaa !5
  %87 = zext i16 %42 to i32
  %88 = shl nuw nsw i32 %87, 8
  %89 = and i32 %88, 61440
  %90 = lshr i32 %87, 4
  %91 = and i32 %90, 3840
  %92 = or disjoint i32 %89, %91
  %93 = zext i16 %48 to i32
  %94 = lshr i32 %93, 8
  %95 = and i32 %94, 240
  %96 = and i32 %93, 15
  %97 = or disjoint i32 %92, %96
  %98 = or disjoint i32 %97, %95
  %99 = trunc nuw i32 %98 to i16
  store i16 %99, ptr %14, align 2, !tbaa !5
  %100 = shl nuw nsw i32 %93, 8
  %101 = and i32 %100, 61440
  %102 = and i32 %88, 3840
  %103 = lshr i32 %93, 4
  %104 = and i32 %103, 240
  %105 = lshr i32 %87, 8
  %106 = and i32 %105, 15
  %107 = or disjoint i32 %106, %102
  %108 = or disjoint i32 %107, %101
  %109 = or disjoint i32 %108, %104
  %110 = trunc nuw i32 %109 to i16
  store i16 %110, ptr %15, align 2, !tbaa !5
  store i16 %26, ptr %9, align 2, !tbaa !5
  store i16 %25, ptr %10, align 2, !tbaa !5
  %111 = zext i16 %55 to i32
  %112 = shl nuw nsw i32 %111, 8
  %113 = and i32 %112, 61440
  %114 = lshr i32 %111, 4
  %115 = and i32 %114, 3840
  %116 = or disjoint i32 %113, %115
  %117 = zext i16 %62 to i32
  %118 = lshr i32 %117, 8
  %119 = and i32 %118, 240
  %120 = and i32 %117, 15
  %121 = or disjoint i32 %116, %120
  %122 = or disjoint i32 %121, %119
  %123 = trunc nuw i32 %122 to i16
  store i16 %123, ptr %16, align 2, !tbaa !5
  %124 = shl nuw nsw i32 %117, 8
  %125 = and i32 %124, 61440
  %126 = and i32 %112, 3840
  %127 = lshr i32 %117, 4
  %128 = and i32 %127, 240
  %129 = lshr i32 %111, 8
  %130 = and i32 %129, 15
  %131 = or disjoint i32 %130, %126
  %132 = or disjoint i32 %131, %125
  %133 = or disjoint i32 %132, %128
  %134 = trunc nuw i32 %133 to i16
  store i16 %134, ptr %17, align 2, !tbaa !5
  %135 = xor i16 %.0179186, %.0182183
  %136 = xor i16 %.0180185, %.0182183
  %137 = xor i16 %136, %.0181184
  %138 = tail call i16 @llvm.fshl.i16(i16 %137, i16 %137, i16 4)
  %139 = tail call i16 @llvm.fshl.i16(i16 %135, i16 %135, i16 12)
  %140 = add nsw i64 %indvars.iv, -1
  %141 = getelementptr inbounds [87 x i8], ptr @RC, i64 0, i64 %140
  %142 = load i8, ptr %141, align 1, !tbaa !9
  %.tr = zext i8 %142 to i16
  %143 = shl i16 %.tr, 12
  %144 = and i8 %142, 112
  %145 = zext nneg i8 %144 to i16
  %146 = shl nuw nsw i16 %145, 8
  %147 = xor i16 %30, %143
  %148 = xor i16 %147, %.0180185
  %149 = xor i16 %148, %28
  %150 = xor i16 %149, %26
  %151 = xor i16 %150, -33
  %152 = xor i16 %138, %146
  %153 = xor i16 %152, %29
  %154 = xor i16 %153, %27
  %155 = xor i16 %154, %25
  %156 = xor i16 %155, -1
  %157 = xor i16 %136, -33
  %158 = tail call i16 @llvm.bswap.i16(i16 %157)
  %159 = xor i16 %139, -1
  %160 = insertelement <4 x i16> poison, i16 %151, i64 0
  %161 = insertelement <4 x i16> %160, i16 %156, i64 1
  %162 = insertelement <4 x i16> %161, i16 %158, i64 2
  %163 = insertelement <4 x i16> %162, i16 %159, i64 3
  %164 = lshr <4 x i16> %163, <i16 2, i16 2, i16 2, i16 2>
  %165 = lshr <4 x i16> %163, <i16 3, i16 3, i16 3, i16 3>
  %166 = and <4 x i16> %164, <i16 4369, i16 4369, i16 4369, i16 4369>
  %167 = and <4 x i16> %166, %165
  %168 = and <4 x i16> %164, <i16 8738, i16 8738, i16 8738, i16 8738>
  %169 = xor <4 x i16> %167, %163
  %170 = shl <4 x i16> %169, <i16 1, i16 1, i16 1, i16 1>
  %171 = and <4 x i16> %168, %170
  %172 = xor <4 x i16> %171, %169
  %173 = shl <4 x i16> %172, <i16 1, i16 1, i16 1, i16 1>
  %174 = shl <4 x i16> %169, <i16 2, i16 2, i16 2, i16 2>
  %175 = and <4 x i16> %174, <i16 17476, i16 17476, i16 17476, i16 17476>
  %176 = and <4 x i16> %175, %173
  %177 = xor <4 x i16> %176, %172
  %178 = shl <4 x i16> %177, <i16 1, i16 1, i16 1, i16 1>
  %179 = shl <4 x i16> %172, <i16 2, i16 2, i16 2, i16 2>
  %180 = and <4 x i16> %179, <i16 -30584, i16 -30584, i16 -30584, i16 -30584>
  %181 = and <4 x i16> %180, %178
  %182 = xor <4 x i16> %177, %181
  %183 = xor <4 x i16> %182, <i16 -1, i16 -1, i16 -1, i16 -1>
  %184 = shl <4 x i16> %183, <i16 1, i16 1, i16 1, i16 1>
  %185 = and <4 x i16> %184, <i16 -4370, i16 -4370, i16 -4370, i16 -4370>
  %186 = lshr <4 x i16> %183, <i16 3, i16 3, i16 3, i16 3>
  %187 = and <4 x i16> %186, <i16 4369, i16 4369, i16 4369, i16 4369>
  %188 = or disjoint <4 x i16> %185, %187
  %.wide = icmp ugt i64 %140, %19
  %189 = extractelement <4 x i16> %188, i64 0
  %190 = extractelement <4 x i16> %188, i64 1
  %191 = extractelement <4 x i16> %188, i64 2
  %192 = extractelement <4 x i16> %188, i64 3
  br i1 %.wide, label %24, label %._crit_edge, !llvm.loop !10

._crit_edge:                                      ; preds = %24, %3
  %193 = phi <4 x i16> [ %5, %3 ], [ %188, %24 ]
  store <4 x i16> %193, ptr %4, align 2, !tbaa !5
  ret void
}

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i16 @llvm.bswap.i16(i16) #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 = !{!"short", !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: DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,ReassociatePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass