; LLVM IR from cryspen/libcrux :: sys/hacl/c/src (Hacl_Bignum4096)

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

; Function Attrs: 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: inlinehint nounwind uwtable
declare hidden i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef, i64 noundef, i64 noundef, ptr noundef) #1

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #2

; Function Attrs: noinline nounwind uwtable
declare hidden i64 @FStar_UInt64_eq_mask(i64 noundef, i64 noundef) #3

; Function Attrs: noinline nounwind uwtable
declare hidden i64 @FStar_UInt64_gte_mask(i64 noundef, i64 noundef) #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden i64 @Hacl_Bignum_Lib_bn_get_top_index_u64(i32 noundef, ptr noundef) #1

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @exp_vartime(i32 noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef) #1

; Function Attrs: nounwind uwtable
define dso_local zeroext i1 @Hacl_Bignum4096_mod_inv_prime_vartime(ptr noundef %0, ptr noundef %1, ptr noundef %2) #4 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca [64 x i64], align 16
  %8 = alloca i64, align 8
  %9 = alloca i64, align 8
  %10 = alloca i64, align 8
  %11 = alloca i32, align 4
  %12 = alloca i64, align 8
  %13 = alloca i64, align 8
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca [64 x i64], align 16
  %17 = alloca i64, align 8
  %18 = alloca i32, align 4
  %19 = alloca i64, align 8
  %20 = alloca i64, align 8
  %21 = alloca i64, align 8
  %22 = alloca i64, align 8
  %23 = alloca i64, align 8
  %24 = alloca i32, align 4
  %25 = alloca i64, align 8
  %26 = alloca i64, align 8
  %27 = alloca i64, align 8
  %28 = alloca i64, align 8
  %29 = alloca i32, align 4
  %30 = alloca [64 x i64], align 16
  %31 = alloca i64, align 8
  %32 = alloca ptr, align 8
  %33 = alloca ptr, align 8
  %34 = alloca i64, align 8
  %35 = alloca i32, align 4
  %36 = alloca i64, align 8
  %37 = alloca ptr, align 8
  %38 = alloca i64, align 8
  %39 = alloca ptr, align 8
  %40 = alloca i64, align 8
  %41 = alloca ptr, align 8
  %42 = alloca i64, align 8
  %43 = alloca ptr, align 8
  %44 = alloca i64, align 8
  %45 = alloca ptr, align 8
  %46 = alloca i64, align 8
  %47 = alloca ptr, align 8
  %48 = alloca i64, align 8
  %49 = alloca ptr, align 8
  %50 = alloca i64, align 8
  %51 = alloca ptr, align 8
  %52 = alloca i64, align 8
  %53 = alloca ptr, align 8
  %54 = alloca i64, align 8
  %55 = alloca ptr, align 8
  %56 = alloca i64, align 8
  %57 = alloca ptr, align 8
  %58 = alloca i64, align 8
  %59 = alloca ptr, align 8
  %60 = alloca i64, align 8
  %61 = alloca ptr, align 8
  %62 = alloca i64, align 8
  %63 = alloca ptr, align 8
  %64 = alloca i64, align 8
  %65 = alloca ptr, align 8
  %66 = alloca i64, align 8
  %67 = alloca ptr, align 8
  %68 = alloca i64, align 8
  %69 = alloca ptr, align 8
  %70 = alloca i64, align 8
  %71 = alloca ptr, align 8
  %72 = alloca i64, align 8
  %73 = alloca ptr, align 8
  %74 = alloca i64, align 8
  %75 = alloca ptr, align 8
  %76 = alloca i64, align 8
  %77 = alloca ptr, align 8
  %78 = alloca i64, align 8
  %79 = alloca ptr, align 8
  %80 = alloca i64, align 8
  %81 = alloca ptr, align 8
  %82 = alloca i64, align 8
  %83 = alloca ptr, align 8
  %84 = alloca i64, align 8
  %85 = alloca ptr, align 8
  %86 = alloca i64, align 8
  %87 = alloca ptr, align 8
  %88 = alloca i64, align 8
  %89 = alloca ptr, align 8
  %90 = alloca i64, align 8
  %91 = alloca ptr, align 8
  %92 = alloca i64, align 8
  %93 = alloca ptr, align 8
  %94 = alloca i64, align 8
  %95 = alloca ptr, align 8
  %96 = alloca i64, align 8
  %97 = alloca ptr, align 8
  %98 = alloca i64, align 8
  %99 = alloca ptr, align 8
  %100 = alloca i64, align 8
  %101 = alloca ptr, align 8
  %102 = alloca i64, align 8
  %103 = alloca ptr, align 8
  %104 = alloca i64, align 8
  %105 = alloca ptr, align 8
  %106 = alloca i64, align 8
  %107 = alloca ptr, align 8
  %108 = alloca i64, align 8
  %109 = alloca ptr, align 8
  %110 = alloca i64, align 8
  %111 = alloca ptr, align 8
  %112 = alloca i64, align 8
  %113 = alloca ptr, align 8
  %114 = alloca i64, align 8
  %115 = alloca ptr, align 8
  %116 = alloca i64, align 8
  %117 = alloca ptr, align 8
  %118 = alloca i64, align 8
  %119 = alloca ptr, align 8
  %120 = alloca i64, align 8
  %121 = alloca ptr, align 8
  %122 = alloca i64, align 8
  %123 = alloca ptr, align 8
  %124 = alloca i64, align 8
  %125 = alloca ptr, align 8
  %126 = alloca i64, align 8
  %127 = alloca ptr, align 8
  %128 = alloca i64, align 8
  %129 = alloca ptr, align 8
  %130 = alloca i64, align 8
  %131 = alloca ptr, align 8
  %132 = alloca i64, align 8
  %133 = alloca ptr, align 8
  %134 = alloca i64, align 8
  %135 = alloca ptr, align 8
  %136 = alloca i64, align 8
  %137 = alloca ptr, align 8
  %138 = alloca i64, align 8
  %139 = alloca ptr, align 8
  %140 = alloca i64, align 8
  %141 = alloca ptr, align 8
  %142 = alloca i64, align 8
  %143 = alloca ptr, align 8
  %144 = alloca i64, align 8
  %145 = alloca ptr, align 8
  %146 = alloca i64, align 8
  %147 = alloca ptr, align 8
  %148 = alloca i64, align 8
  %149 = alloca ptr, align 8
  %150 = alloca i64, align 8
  %151 = alloca ptr, align 8
  %152 = alloca i64, align 8
  %153 = alloca ptr, align 8
  %154 = alloca i64, align 8
  %155 = alloca ptr, align 8
  %156 = alloca i32, align 4
  %157 = alloca i64, align 8
  %158 = alloca ptr, align 8
  %159 = alloca i64, align 8
  %160 = alloca ptr, align 8
  %161 = alloca i64, align 8
  %162 = alloca ptr, align 8
  %163 = alloca i64, align 8
  %164 = alloca i64, align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 512, ptr %7) #5
  call void @llvm.memset.p0.i64(ptr align 16 %7, i8 0, i64 512, i1 false)
  %165 = getelementptr inbounds [64 x i64], ptr %7, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 16 %165, i8 0, i64 512, i1 false)
  %166 = getelementptr inbounds [64 x i64], ptr %7, i64 0, i64 0
  store i64 1, ptr %166, align 16, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #5
  %167 = load ptr, ptr %4, align 8, !tbaa !5
  %168 = getelementptr inbounds i64, ptr %167, i64 0
  %169 = load i64, ptr %168, align 8, !tbaa !9
  %170 = and i64 %169, 1
  store i64 %170, ptr %8, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #5
  %171 = load i64, ptr %8, align 8, !tbaa !9
  %172 = sub i64 0, %171
  store i64 %172, ptr %9, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #5
  store i64 0, ptr %10, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #5
  store i32 0, ptr %11, align 4, !tbaa !11
  br label %173

173:                                              ; preds = %212, %3
  %174 = load i32, ptr %11, align 4, !tbaa !11
  %175 = icmp ult i32 %174, 64
  br i1 %175, label %177, label %176

176:                                              ; preds = %173
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #5
  br label %215

177:                                              ; preds = %173
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #5
  %178 = load i32, ptr %11, align 4, !tbaa !11
  %179 = zext i32 %178 to i64
  %180 = getelementptr inbounds [64 x i64], ptr %7, i64 0, i64 %179
  %181 = load i64, ptr %180, align 8, !tbaa !9
  %182 = load ptr, ptr %4, align 8, !tbaa !5
  %183 = load i32, ptr %11, align 4, !tbaa !11
  %184 = zext i32 %183 to i64
  %185 = getelementptr inbounds i64, ptr %182, i64 %184
  %186 = load i64, ptr %185, align 8, !tbaa !9
  %187 = call i64 @FStar_UInt64_eq_mask(i64 noundef %181, i64 noundef %186)
  store i64 %187, ptr %12, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #5
  %188 = load i32, ptr %11, align 4, !tbaa !11
  %189 = zext i32 %188 to i64
  %190 = getelementptr inbounds [64 x i64], ptr %7, i64 0, i64 %189
  %191 = load i64, ptr %190, align 8, !tbaa !9
  %192 = load ptr, ptr %4, align 8, !tbaa !5
  %193 = load i32, ptr %11, align 4, !tbaa !11
  %194 = zext i32 %193 to i64
  %195 = getelementptr inbounds i64, ptr %192, i64 %194
  %196 = load i64, ptr %195, align 8, !tbaa !9
  %197 = call i64 @FStar_UInt64_gte_mask(i64 noundef %191, i64 noundef %196)
  %198 = xor i64 %197, -1
  store i64 %198, ptr %13, align 8, !tbaa !9
  %199 = load i64, ptr %12, align 8, !tbaa !9
  %200 = load i64, ptr %10, align 8, !tbaa !9
  %201 = and i64 %199, %200
  %202 = load i64, ptr %12, align 8, !tbaa !9
  %203 = xor i64 %202, -1
  %204 = load i64, ptr %13, align 8, !tbaa !9
  %205 = and i64 %204, -1
  %206 = load i64, ptr %13, align 8, !tbaa !9
  %207 = xor i64 %206, -1
  %208 = and i64 %207, 0
  %209 = or i64 %205, %208
  %210 = and i64 %203, %209
  %211 = or i64 %201, %210
  store i64 %211, ptr %10, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #5
  br label %212

212:                                              ; preds = %177
  %213 = load i32, ptr %11, align 4, !tbaa !11
  %214 = add i32 %213, 1
  store i32 %214, ptr %11, align 4, !tbaa !11
  br label %173, !llvm.loop !13

215:                                              ; preds = %176
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #5
  %216 = load i64, ptr %10, align 8, !tbaa !9
  store i64 %216, ptr %14, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #5
  %217 = load i64, ptr %9, align 8, !tbaa !9
  %218 = load i64, ptr %14, align 8, !tbaa !9
  %219 = and i64 %217, %218
  store i64 %219, ptr %15, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 512, ptr %16) #5
  call void @llvm.memset.p0.i64(ptr align 16 %16, i8 0, i64 512, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #5
  store i64 -1, ptr %17, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #5
  store i32 0, ptr %18, align 4, !tbaa !11
  br label %220

220:                                              ; preds = %238, %215
  %221 = load i32, ptr %18, align 4, !tbaa !11
  %222 = icmp ult i32 %221, 64
  br i1 %222, label %224, label %223

223:                                              ; preds = %220
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #5
  br label %241

224:                                              ; preds = %220
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #5
  %225 = load ptr, ptr %5, align 8, !tbaa !5
  %226 = load i32, ptr %18, align 4, !tbaa !11
  %227 = zext i32 %226 to i64
  %228 = getelementptr inbounds i64, ptr %225, i64 %227
  %229 = load i64, ptr %228, align 8, !tbaa !9
  %230 = load i32, ptr %18, align 4, !tbaa !11
  %231 = zext i32 %230 to i64
  %232 = getelementptr inbounds [64 x i64], ptr %16, i64 0, i64 %231
  %233 = load i64, ptr %232, align 8, !tbaa !9
  %234 = call i64 @FStar_UInt64_eq_mask(i64 noundef %229, i64 noundef %233)
  store i64 %234, ptr %19, align 8, !tbaa !9
  %235 = load i64, ptr %19, align 8, !tbaa !9
  %236 = load i64, ptr %17, align 8, !tbaa !9
  %237 = and i64 %235, %236
  store i64 %237, ptr %17, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  br label %238

238:                                              ; preds = %224
  %239 = load i32, ptr %18, align 4, !tbaa !11
  %240 = add i32 %239, 1
  store i32 %240, ptr %18, align 4, !tbaa !11
  br label %220, !llvm.loop !15

241:                                              ; preds = %223
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #5
  %242 = load i64, ptr %17, align 8, !tbaa !9
  store i64 %242, ptr %20, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #5
  %243 = load i64, ptr %20, align 8, !tbaa !9
  store i64 %243, ptr %21, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #5
  %244 = load i64, ptr %21, align 8, !tbaa !9
  store i64 %244, ptr %22, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #5
  store i64 0, ptr %23, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #5
  store i32 0, ptr %24, align 4, !tbaa !11
  br label %245

245:                                              ; preds = %286, %241
  %246 = load i32, ptr %24, align 4, !tbaa !11
  %247 = icmp ult i32 %246, 64
  br i1 %247, label %249, label %248

248:                                              ; preds = %245
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #5
  br label %289

249:                                              ; preds = %245
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #5
  %250 = load ptr, ptr %5, align 8, !tbaa !5
  %251 = load i32, ptr %24, align 4, !tbaa !11
  %252 = zext i32 %251 to i64
  %253 = getelementptr inbounds i64, ptr %250, i64 %252
  %254 = load i64, ptr %253, align 8, !tbaa !9
  %255 = load ptr, ptr %4, align 8, !tbaa !5
  %256 = load i32, ptr %24, align 4, !tbaa !11
  %257 = zext i32 %256 to i64
  %258 = getelementptr inbounds i64, ptr %255, i64 %257
  %259 = load i64, ptr %258, align 8, !tbaa !9
  %260 = call i64 @FStar_UInt64_eq_mask(i64 noundef %254, i64 noundef %259)
  store i64 %260, ptr %25, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #5
  %261 = load ptr, ptr %5, align 8, !tbaa !5
  %262 = load i32, ptr %24, align 4, !tbaa !11
  %263 = zext i32 %262 to i64
  %264 = getelementptr inbounds i64, ptr %261, i64 %263
  %265 = load i64, ptr %264, align 8, !tbaa !9
  %266 = load ptr, ptr %4, align 8, !tbaa !5
  %267 = load i32, ptr %24, align 4, !tbaa !11
  %268 = zext i32 %267 to i64
  %269 = getelementptr inbounds i64, ptr %266, i64 %268
  %270 = load i64, ptr %269, align 8, !tbaa !9
  %271 = call i64 @FStar_UInt64_gte_mask(i64 noundef %265, i64 noundef %270)
  %272 = xor i64 %271, -1
  store i64 %272, ptr %26, align 8, !tbaa !9
  %273 = load i64, ptr %25, align 8, !tbaa !9
  %274 = load i64, ptr %23, align 8, !tbaa !9
  %275 = and i64 %273, %274
  %276 = load i64, ptr %25, align 8, !tbaa !9
  %277 = xor i64 %276, -1
  %278 = load i64, ptr %26, align 8, !tbaa !9
  %279 = and i64 %278, -1
  %280 = load i64, ptr %26, align 8, !tbaa !9
  %281 = xor i64 %280, -1
  %282 = and i64 %281, 0
  %283 = or i64 %279, %282
  %284 = and i64 %277, %283
  %285 = or i64 %275, %284
  store i64 %285, ptr %23, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  br label %286

286:                                              ; preds = %249
  %287 = load i32, ptr %24, align 4, !tbaa !11
  %288 = add i32 %287, 1
  store i32 %288, ptr %24, align 4, !tbaa !11
  br label %245, !llvm.loop !16

289:                                              ; preds = %248
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #5
  %290 = load i64, ptr %23, align 8, !tbaa !9
  store i64 %290, ptr %27, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #5
  %291 = load i64, ptr %15, align 8, !tbaa !9
  %292 = load i64, ptr %22, align 8, !tbaa !9
  %293 = xor i64 %292, -1
  %294 = and i64 %291, %293
  %295 = load i64, ptr %27, align 8, !tbaa !9
  %296 = and i64 %294, %295
  store i64 %296, ptr %28, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #5
  %297 = load ptr, ptr %4, align 8, !tbaa !5
  %298 = call i64 @Hacl_Bignum_Lib_bn_get_top_index_u64(i32 noundef 64, ptr noundef %297)
  %299 = trunc i64 %298 to i32
  %300 = mul i32 64, %299
  store i32 %300, ptr %29, align 4, !tbaa !11
  %301 = load i64, ptr %28, align 8, !tbaa !9
  %302 = icmp eq i64 %301, -1
  br i1 %302, label %303, label %1411

303:                                              ; preds = %289
  call void @llvm.lifetime.start.p0(i64 512, ptr %30) #5
  call void @llvm.memset.p0.i64(ptr align 16 %30, i8 0, i64 512, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #5
  %304 = load ptr, ptr %4, align 8, !tbaa !5
  %305 = getelementptr inbounds i64, ptr %304, i64 0
  %306 = load i64, ptr %305, align 8, !tbaa !9
  %307 = getelementptr inbounds [64 x i64], ptr %30, i64 0, i64 0
  %308 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef 0, i64 noundef %306, i64 noundef 2, ptr noundef %307)
  store i64 %308, ptr %31, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #5
  %309 = load ptr, ptr %4, align 8, !tbaa !5
  %310 = getelementptr inbounds i64, ptr %309, i64 1
  store ptr %310, ptr %32, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #5
  %311 = getelementptr inbounds [64 x i64], ptr %30, i64 0, i64 0
  %312 = getelementptr inbounds i64, ptr %311, i64 1
  store ptr %312, ptr %33, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #5
  %313 = load i64, ptr %31, align 8, !tbaa !9
  store i64 %313, ptr %34, align 8, !tbaa !9
  br label %314

314:                                              ; preds = %303
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #5
  store i32 0, ptr %35, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #5
  %315 = load ptr, ptr %32, align 8, !tbaa !5
  %316 = load i32, ptr %35, align 4, !tbaa !11
  %317 = mul i32 4, %316
  %318 = zext i32 %317 to i64
  %319 = getelementptr inbounds i64, ptr %315, i64 %318
  %320 = load i64, ptr %319, align 8, !tbaa !9
  store i64 %320, ptr %36, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #5
  %321 = load ptr, ptr %33, align 8, !tbaa !5
  %322 = load i32, ptr %35, align 4, !tbaa !11
  %323 = mul i32 4, %322
  %324 = zext i32 %323 to i64
  %325 = getelementptr inbounds i64, ptr %321, i64 %324
  store ptr %325, ptr %37, align 8, !tbaa !5
  %326 = load i64, ptr %34, align 8, !tbaa !9
  %327 = load i64, ptr %36, align 8, !tbaa !9
  %328 = load ptr, ptr %37, align 8, !tbaa !5
  %329 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %326, i64 noundef %327, i64 noundef 0, ptr noundef %328)
  store i64 %329, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #5
  %330 = load ptr, ptr %32, align 8, !tbaa !5
  %331 = load i32, ptr %35, align 4, !tbaa !11
  %332 = mul i32 4, %331
  %333 = add i32 %332, 1
  %334 = zext i32 %333 to i64
  %335 = getelementptr inbounds i64, ptr %330, i64 %334
  %336 = load i64, ptr %335, align 8, !tbaa !9
  store i64 %336, ptr %38, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #5
  %337 = load ptr, ptr %33, align 8, !tbaa !5
  %338 = load i32, ptr %35, align 4, !tbaa !11
  %339 = mul i32 4, %338
  %340 = zext i32 %339 to i64
  %341 = getelementptr inbounds i64, ptr %337, i64 %340
  %342 = getelementptr inbounds i64, ptr %341, i64 1
  store ptr %342, ptr %39, align 8, !tbaa !5
  %343 = load i64, ptr %34, align 8, !tbaa !9
  %344 = load i64, ptr %38, align 8, !tbaa !9
  %345 = load ptr, ptr %39, align 8, !tbaa !5
  %346 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %343, i64 noundef %344, i64 noundef 0, ptr noundef %345)
  store i64 %346, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #5
  %347 = load ptr, ptr %32, align 8, !tbaa !5
  %348 = load i32, ptr %35, align 4, !tbaa !11
  %349 = mul i32 4, %348
  %350 = add i32 %349, 2
  %351 = zext i32 %350 to i64
  %352 = getelementptr inbounds i64, ptr %347, i64 %351
  %353 = load i64, ptr %352, align 8, !tbaa !9
  store i64 %353, ptr %40, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #5
  %354 = load ptr, ptr %33, align 8, !tbaa !5
  %355 = load i32, ptr %35, align 4, !tbaa !11
  %356 = mul i32 4, %355
  %357 = zext i32 %356 to i64
  %358 = getelementptr inbounds i64, ptr %354, i64 %357
  %359 = getelementptr inbounds i64, ptr %358, i64 2
  store ptr %359, ptr %41, align 8, !tbaa !5
  %360 = load i64, ptr %34, align 8, !tbaa !9
  %361 = load i64, ptr %40, align 8, !tbaa !9
  %362 = load ptr, ptr %41, align 8, !tbaa !5
  %363 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %360, i64 noundef %361, i64 noundef 0, ptr noundef %362)
  store i64 %363, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #5
  %364 = load ptr, ptr %32, align 8, !tbaa !5
  %365 = load i32, ptr %35, align 4, !tbaa !11
  %366 = mul i32 4, %365
  %367 = add i32 %366, 3
  %368 = zext i32 %367 to i64
  %369 = getelementptr inbounds i64, ptr %364, i64 %368
  %370 = load i64, ptr %369, align 8, !tbaa !9
  store i64 %370, ptr %42, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #5
  %371 = load ptr, ptr %33, align 8, !tbaa !5
  %372 = load i32, ptr %35, align 4, !tbaa !11
  %373 = mul i32 4, %372
  %374 = zext i32 %373 to i64
  %375 = getelementptr inbounds i64, ptr %371, i64 %374
  %376 = getelementptr inbounds i64, ptr %375, i64 3
  store ptr %376, ptr %43, align 8, !tbaa !5
  %377 = load i64, ptr %34, align 8, !tbaa !9
  %378 = load i64, ptr %42, align 8, !tbaa !9
  %379 = load ptr, ptr %43, align 8, !tbaa !5
  %380 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %377, i64 noundef %378, i64 noundef 0, ptr noundef %379)
  store i64 %380, ptr %34, align 8, !tbaa !9
  %381 = load i32, ptr %35, align 4, !tbaa !11
  %382 = add i32 %381, 1
  store i32 %382, ptr %35, align 4, !tbaa !11
  %383 = load i32, ptr %35, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #5
  %384 = load ptr, ptr %32, align 8, !tbaa !5
  %385 = load i32, ptr %35, align 4, !tbaa !11
  %386 = mul i32 4, %385
  %387 = zext i32 %386 to i64
  %388 = getelementptr inbounds i64, ptr %384, i64 %387
  %389 = load i64, ptr %388, align 8, !tbaa !9
  store i64 %389, ptr %44, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #5
  %390 = load ptr, ptr %33, align 8, !tbaa !5
  %391 = load i32, ptr %35, align 4, !tbaa !11
  %392 = mul i32 4, %391
  %393 = zext i32 %392 to i64
  %394 = getelementptr inbounds i64, ptr %390, i64 %393
  store ptr %394, ptr %45, align 8, !tbaa !5
  %395 = load i64, ptr %34, align 8, !tbaa !9
  %396 = load i64, ptr %44, align 8, !tbaa !9
  %397 = load ptr, ptr %45, align 8, !tbaa !5
  %398 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %395, i64 noundef %396, i64 noundef 0, ptr noundef %397)
  store i64 %398, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #5
  %399 = load ptr, ptr %32, align 8, !tbaa !5
  %400 = load i32, ptr %35, align 4, !tbaa !11
  %401 = mul i32 4, %400
  %402 = add i32 %401, 1
  %403 = zext i32 %402 to i64
  %404 = getelementptr inbounds i64, ptr %399, i64 %403
  %405 = load i64, ptr %404, align 8, !tbaa !9
  store i64 %405, ptr %46, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #5
  %406 = load ptr, ptr %33, align 8, !tbaa !5
  %407 = load i32, ptr %35, align 4, !tbaa !11
  %408 = mul i32 4, %407
  %409 = zext i32 %408 to i64
  %410 = getelementptr inbounds i64, ptr %406, i64 %409
  %411 = getelementptr inbounds i64, ptr %410, i64 1
  store ptr %411, ptr %47, align 8, !tbaa !5
  %412 = load i64, ptr %34, align 8, !tbaa !9
  %413 = load i64, ptr %46, align 8, !tbaa !9
  %414 = load ptr, ptr %47, align 8, !tbaa !5
  %415 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %412, i64 noundef %413, i64 noundef 0, ptr noundef %414)
  store i64 %415, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #5
  %416 = load ptr, ptr %32, align 8, !tbaa !5
  %417 = load i32, ptr %35, align 4, !tbaa !11
  %418 = mul i32 4, %417
  %419 = add i32 %418, 2
  %420 = zext i32 %419 to i64
  %421 = getelementptr inbounds i64, ptr %416, i64 %420
  %422 = load i64, ptr %421, align 8, !tbaa !9
  store i64 %422, ptr %48, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #5
  %423 = load ptr, ptr %33, align 8, !tbaa !5
  %424 = load i32, ptr %35, align 4, !tbaa !11
  %425 = mul i32 4, %424
  %426 = zext i32 %425 to i64
  %427 = getelementptr inbounds i64, ptr %423, i64 %426
  %428 = getelementptr inbounds i64, ptr %427, i64 2
  store ptr %428, ptr %49, align 8, !tbaa !5
  %429 = load i64, ptr %34, align 8, !tbaa !9
  %430 = load i64, ptr %48, align 8, !tbaa !9
  %431 = load ptr, ptr %49, align 8, !tbaa !5
  %432 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %429, i64 noundef %430, i64 noundef 0, ptr noundef %431)
  store i64 %432, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #5
  %433 = load ptr, ptr %32, align 8, !tbaa !5
  %434 = load i32, ptr %35, align 4, !tbaa !11
  %435 = mul i32 4, %434
  %436 = add i32 %435, 3
  %437 = zext i32 %436 to i64
  %438 = getelementptr inbounds i64, ptr %433, i64 %437
  %439 = load i64, ptr %438, align 8, !tbaa !9
  store i64 %439, ptr %50, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #5
  %440 = load ptr, ptr %33, align 8, !tbaa !5
  %441 = load i32, ptr %35, align 4, !tbaa !11
  %442 = mul i32 4, %441
  %443 = zext i32 %442 to i64
  %444 = getelementptr inbounds i64, ptr %440, i64 %443
  %445 = getelementptr inbounds i64, ptr %444, i64 3
  store ptr %445, ptr %51, align 8, !tbaa !5
  %446 = load i64, ptr %34, align 8, !tbaa !9
  %447 = load i64, ptr %50, align 8, !tbaa !9
  %448 = load ptr, ptr %51, align 8, !tbaa !5
  %449 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %446, i64 noundef %447, i64 noundef 0, ptr noundef %448)
  store i64 %449, ptr %34, align 8, !tbaa !9
  %450 = load i32, ptr %35, align 4, !tbaa !11
  %451 = add i32 %450, 1
  store i32 %451, ptr %35, align 4, !tbaa !11
  %452 = load i32, ptr %35, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #5
  %453 = load ptr, ptr %32, align 8, !tbaa !5
  %454 = load i32, ptr %35, align 4, !tbaa !11
  %455 = mul i32 4, %454
  %456 = zext i32 %455 to i64
  %457 = getelementptr inbounds i64, ptr %453, i64 %456
  %458 = load i64, ptr %457, align 8, !tbaa !9
  store i64 %458, ptr %52, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #5
  %459 = load ptr, ptr %33, align 8, !tbaa !5
  %460 = load i32, ptr %35, align 4, !tbaa !11
  %461 = mul i32 4, %460
  %462 = zext i32 %461 to i64
  %463 = getelementptr inbounds i64, ptr %459, i64 %462
  store ptr %463, ptr %53, align 8, !tbaa !5
  %464 = load i64, ptr %34, align 8, !tbaa !9
  %465 = load i64, ptr %52, align 8, !tbaa !9
  %466 = load ptr, ptr %53, align 8, !tbaa !5
  %467 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %464, i64 noundef %465, i64 noundef 0, ptr noundef %466)
  store i64 %467, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #5
  %468 = load ptr, ptr %32, align 8, !tbaa !5
  %469 = load i32, ptr %35, align 4, !tbaa !11
  %470 = mul i32 4, %469
  %471 = add i32 %470, 1
  %472 = zext i32 %471 to i64
  %473 = getelementptr inbounds i64, ptr %468, i64 %472
  %474 = load i64, ptr %473, align 8, !tbaa !9
  store i64 %474, ptr %54, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #5
  %475 = load ptr, ptr %33, align 8, !tbaa !5
  %476 = load i32, ptr %35, align 4, !tbaa !11
  %477 = mul i32 4, %476
  %478 = zext i32 %477 to i64
  %479 = getelementptr inbounds i64, ptr %475, i64 %478
  %480 = getelementptr inbounds i64, ptr %479, i64 1
  store ptr %480, ptr %55, align 8, !tbaa !5
  %481 = load i64, ptr %34, align 8, !tbaa !9
  %482 = load i64, ptr %54, align 8, !tbaa !9
  %483 = load ptr, ptr %55, align 8, !tbaa !5
  %484 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %481, i64 noundef %482, i64 noundef 0, ptr noundef %483)
  store i64 %484, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #5
  %485 = load ptr, ptr %32, align 8, !tbaa !5
  %486 = load i32, ptr %35, align 4, !tbaa !11
  %487 = mul i32 4, %486
  %488 = add i32 %487, 2
  %489 = zext i32 %488 to i64
  %490 = getelementptr inbounds i64, ptr %485, i64 %489
  %491 = load i64, ptr %490, align 8, !tbaa !9
  store i64 %491, ptr %56, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #5
  %492 = load ptr, ptr %33, align 8, !tbaa !5
  %493 = load i32, ptr %35, align 4, !tbaa !11
  %494 = mul i32 4, %493
  %495 = zext i32 %494 to i64
  %496 = getelementptr inbounds i64, ptr %492, i64 %495
  %497 = getelementptr inbounds i64, ptr %496, i64 2
  store ptr %497, ptr %57, align 8, !tbaa !5
  %498 = load i64, ptr %34, align 8, !tbaa !9
  %499 = load i64, ptr %56, align 8, !tbaa !9
  %500 = load ptr, ptr %57, align 8, !tbaa !5
  %501 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %498, i64 noundef %499, i64 noundef 0, ptr noundef %500)
  store i64 %501, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #5
  %502 = load ptr, ptr %32, align 8, !tbaa !5
  %503 = load i32, ptr %35, align 4, !tbaa !11
  %504 = mul i32 4, %503
  %505 = add i32 %504, 3
  %506 = zext i32 %505 to i64
  %507 = getelementptr inbounds i64, ptr %502, i64 %506
  %508 = load i64, ptr %507, align 8, !tbaa !9
  store i64 %508, ptr %58, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #5
  %509 = load ptr, ptr %33, align 8, !tbaa !5
  %510 = load i32, ptr %35, align 4, !tbaa !11
  %511 = mul i32 4, %510
  %512 = zext i32 %511 to i64
  %513 = getelementptr inbounds i64, ptr %509, i64 %512
  %514 = getelementptr inbounds i64, ptr %513, i64 3
  store ptr %514, ptr %59, align 8, !tbaa !5
  %515 = load i64, ptr %34, align 8, !tbaa !9
  %516 = load i64, ptr %58, align 8, !tbaa !9
  %517 = load ptr, ptr %59, align 8, !tbaa !5
  %518 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %515, i64 noundef %516, i64 noundef 0, ptr noundef %517)
  store i64 %518, ptr %34, align 8, !tbaa !9
  %519 = load i32, ptr %35, align 4, !tbaa !11
  %520 = add i32 %519, 1
  store i32 %520, ptr %35, align 4, !tbaa !11
  %521 = load i32, ptr %35, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #5
  %522 = load ptr, ptr %32, align 8, !tbaa !5
  %523 = load i32, ptr %35, align 4, !tbaa !11
  %524 = mul i32 4, %523
  %525 = zext i32 %524 to i64
  %526 = getelementptr inbounds i64, ptr %522, i64 %525
  %527 = load i64, ptr %526, align 8, !tbaa !9
  store i64 %527, ptr %60, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #5
  %528 = load ptr, ptr %33, align 8, !tbaa !5
  %529 = load i32, ptr %35, align 4, !tbaa !11
  %530 = mul i32 4, %529
  %531 = zext i32 %530 to i64
  %532 = getelementptr inbounds i64, ptr %528, i64 %531
  store ptr %532, ptr %61, align 8, !tbaa !5
  %533 = load i64, ptr %34, align 8, !tbaa !9
  %534 = load i64, ptr %60, align 8, !tbaa !9
  %535 = load ptr, ptr %61, align 8, !tbaa !5
  %536 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %533, i64 noundef %534, i64 noundef 0, ptr noundef %535)
  store i64 %536, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #5
  %537 = load ptr, ptr %32, align 8, !tbaa !5
  %538 = load i32, ptr %35, align 4, !tbaa !11
  %539 = mul i32 4, %538
  %540 = add i32 %539, 1
  %541 = zext i32 %540 to i64
  %542 = getelementptr inbounds i64, ptr %537, i64 %541
  %543 = load i64, ptr %542, align 8, !tbaa !9
  store i64 %543, ptr %62, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #5
  %544 = load ptr, ptr %33, align 8, !tbaa !5
  %545 = load i32, ptr %35, align 4, !tbaa !11
  %546 = mul i32 4, %545
  %547 = zext i32 %546 to i64
  %548 = getelementptr inbounds i64, ptr %544, i64 %547
  %549 = getelementptr inbounds i64, ptr %548, i64 1
  store ptr %549, ptr %63, align 8, !tbaa !5
  %550 = load i64, ptr %34, align 8, !tbaa !9
  %551 = load i64, ptr %62, align 8, !tbaa !9
  %552 = load ptr, ptr %63, align 8, !tbaa !5
  %553 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %550, i64 noundef %551, i64 noundef 0, ptr noundef %552)
  store i64 %553, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #5
  %554 = load ptr, ptr %32, align 8, !tbaa !5
  %555 = load i32, ptr %35, align 4, !tbaa !11
  %556 = mul i32 4, %555
  %557 = add i32 %556, 2
  %558 = zext i32 %557 to i64
  %559 = getelementptr inbounds i64, ptr %554, i64 %558
  %560 = load i64, ptr %559, align 8, !tbaa !9
  store i64 %560, ptr %64, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #5
  %561 = load ptr, ptr %33, align 8, !tbaa !5
  %562 = load i32, ptr %35, align 4, !tbaa !11
  %563 = mul i32 4, %562
  %564 = zext i32 %563 to i64
  %565 = getelementptr inbounds i64, ptr %561, i64 %564
  %566 = getelementptr inbounds i64, ptr %565, i64 2
  store ptr %566, ptr %65, align 8, !tbaa !5
  %567 = load i64, ptr %34, align 8, !tbaa !9
  %568 = load i64, ptr %64, align 8, !tbaa !9
  %569 = load ptr, ptr %65, align 8, !tbaa !5
  %570 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %567, i64 noundef %568, i64 noundef 0, ptr noundef %569)
  store i64 %570, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #5
  %571 = load ptr, ptr %32, align 8, !tbaa !5
  %572 = load i32, ptr %35, align 4, !tbaa !11
  %573 = mul i32 4, %572
  %574 = add i32 %573, 3
  %575 = zext i32 %574 to i64
  %576 = getelementptr inbounds i64, ptr %571, i64 %575
  %577 = load i64, ptr %576, align 8, !tbaa !9
  store i64 %577, ptr %66, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #5
  %578 = load ptr, ptr %33, align 8, !tbaa !5
  %579 = load i32, ptr %35, align 4, !tbaa !11
  %580 = mul i32 4, %579
  %581 = zext i32 %580 to i64
  %582 = getelementptr inbounds i64, ptr %578, i64 %581
  %583 = getelementptr inbounds i64, ptr %582, i64 3
  store ptr %583, ptr %67, align 8, !tbaa !5
  %584 = load i64, ptr %34, align 8, !tbaa !9
  %585 = load i64, ptr %66, align 8, !tbaa !9
  %586 = load ptr, ptr %67, align 8, !tbaa !5
  %587 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %584, i64 noundef %585, i64 noundef 0, ptr noundef %586)
  store i64 %587, ptr %34, align 8, !tbaa !9
  %588 = load i32, ptr %35, align 4, !tbaa !11
  %589 = add i32 %588, 1
  store i32 %589, ptr %35, align 4, !tbaa !11
  %590 = load i32, ptr %35, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #5
  %591 = load ptr, ptr %32, align 8, !tbaa !5
  %592 = load i32, ptr %35, align 4, !tbaa !11
  %593 = mul i32 4, %592
  %594 = zext i32 %593 to i64
  %595 = getelementptr inbounds i64, ptr %591, i64 %594
  %596 = load i64, ptr %595, align 8, !tbaa !9
  store i64 %596, ptr %68, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #5
  %597 = load ptr, ptr %33, align 8, !tbaa !5
  %598 = load i32, ptr %35, align 4, !tbaa !11
  %599 = mul i32 4, %598
  %600 = zext i32 %599 to i64
  %601 = getelementptr inbounds i64, ptr %597, i64 %600
  store ptr %601, ptr %69, align 8, !tbaa !5
  %602 = load i64, ptr %34, align 8, !tbaa !9
  %603 = load i64, ptr %68, align 8, !tbaa !9
  %604 = load ptr, ptr %69, align 8, !tbaa !5
  %605 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %602, i64 noundef %603, i64 noundef 0, ptr noundef %604)
  store i64 %605, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #5
  %606 = load ptr, ptr %32, align 8, !tbaa !5
  %607 = load i32, ptr %35, align 4, !tbaa !11
  %608 = mul i32 4, %607
  %609 = add i32 %608, 1
  %610 = zext i32 %609 to i64
  %611 = getelementptr inbounds i64, ptr %606, i64 %610
  %612 = load i64, ptr %611, align 8, !tbaa !9
  store i64 %612, ptr %70, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #5
  %613 = load ptr, ptr %33, align 8, !tbaa !5
  %614 = load i32, ptr %35, align 4, !tbaa !11
  %615 = mul i32 4, %614
  %616 = zext i32 %615 to i64
  %617 = getelementptr inbounds i64, ptr %613, i64 %616
  %618 = getelementptr inbounds i64, ptr %617, i64 1
  store ptr %618, ptr %71, align 8, !tbaa !5
  %619 = load i64, ptr %34, align 8, !tbaa !9
  %620 = load i64, ptr %70, align 8, !tbaa !9
  %621 = load ptr, ptr %71, align 8, !tbaa !5
  %622 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %619, i64 noundef %620, i64 noundef 0, ptr noundef %621)
  store i64 %622, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #5
  %623 = load ptr, ptr %32, align 8, !tbaa !5
  %624 = load i32, ptr %35, align 4, !tbaa !11
  %625 = mul i32 4, %624
  %626 = add i32 %625, 2
  %627 = zext i32 %626 to i64
  %628 = getelementptr inbounds i64, ptr %623, i64 %627
  %629 = load i64, ptr %628, align 8, !tbaa !9
  store i64 %629, ptr %72, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #5
  %630 = load ptr, ptr %33, align 8, !tbaa !5
  %631 = load i32, ptr %35, align 4, !tbaa !11
  %632 = mul i32 4, %631
  %633 = zext i32 %632 to i64
  %634 = getelementptr inbounds i64, ptr %630, i64 %633
  %635 = getelementptr inbounds i64, ptr %634, i64 2
  store ptr %635, ptr %73, align 8, !tbaa !5
  %636 = load i64, ptr %34, align 8, !tbaa !9
  %637 = load i64, ptr %72, align 8, !tbaa !9
  %638 = load ptr, ptr %73, align 8, !tbaa !5
  %639 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %636, i64 noundef %637, i64 noundef 0, ptr noundef %638)
  store i64 %639, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #5
  %640 = load ptr, ptr %32, align 8, !tbaa !5
  %641 = load i32, ptr %35, align 4, !tbaa !11
  %642 = mul i32 4, %641
  %643 = add i32 %642, 3
  %644 = zext i32 %643 to i64
  %645 = getelementptr inbounds i64, ptr %640, i64 %644
  %646 = load i64, ptr %645, align 8, !tbaa !9
  store i64 %646, ptr %74, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #5
  %647 = load ptr, ptr %33, align 8, !tbaa !5
  %648 = load i32, ptr %35, align 4, !tbaa !11
  %649 = mul i32 4, %648
  %650 = zext i32 %649 to i64
  %651 = getelementptr inbounds i64, ptr %647, i64 %650
  %652 = getelementptr inbounds i64, ptr %651, i64 3
  store ptr %652, ptr %75, align 8, !tbaa !5
  %653 = load i64, ptr %34, align 8, !tbaa !9
  %654 = load i64, ptr %74, align 8, !tbaa !9
  %655 = load ptr, ptr %75, align 8, !tbaa !5
  %656 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %653, i64 noundef %654, i64 noundef 0, ptr noundef %655)
  store i64 %656, ptr %34, align 8, !tbaa !9
  %657 = load i32, ptr %35, align 4, !tbaa !11
  %658 = add i32 %657, 1
  store i32 %658, ptr %35, align 4, !tbaa !11
  %659 = load i32, ptr %35, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %76) #5
  %660 = load ptr, ptr %32, align 8, !tbaa !5
  %661 = load i32, ptr %35, align 4, !tbaa !11
  %662 = mul i32 4, %661
  %663 = zext i32 %662 to i64
  %664 = getelementptr inbounds i64, ptr %660, i64 %663
  %665 = load i64, ptr %664, align 8, !tbaa !9
  store i64 %665, ptr %76, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #5
  %666 = load ptr, ptr %33, align 8, !tbaa !5
  %667 = load i32, ptr %35, align 4, !tbaa !11
  %668 = mul i32 4, %667
  %669 = zext i32 %668 to i64
  %670 = getelementptr inbounds i64, ptr %666, i64 %669
  store ptr %670, ptr %77, align 8, !tbaa !5
  %671 = load i64, ptr %34, align 8, !tbaa !9
  %672 = load i64, ptr %76, align 8, !tbaa !9
  %673 = load ptr, ptr %77, align 8, !tbaa !5
  %674 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %671, i64 noundef %672, i64 noundef 0, ptr noundef %673)
  store i64 %674, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #5
  %675 = load ptr, ptr %32, align 8, !tbaa !5
  %676 = load i32, ptr %35, align 4, !tbaa !11
  %677 = mul i32 4, %676
  %678 = add i32 %677, 1
  %679 = zext i32 %678 to i64
  %680 = getelementptr inbounds i64, ptr %675, i64 %679
  %681 = load i64, ptr %680, align 8, !tbaa !9
  store i64 %681, ptr %78, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %79) #5
  %682 = load ptr, ptr %33, align 8, !tbaa !5
  %683 = load i32, ptr %35, align 4, !tbaa !11
  %684 = mul i32 4, %683
  %685 = zext i32 %684 to i64
  %686 = getelementptr inbounds i64, ptr %682, i64 %685
  %687 = getelementptr inbounds i64, ptr %686, i64 1
  store ptr %687, ptr %79, align 8, !tbaa !5
  %688 = load i64, ptr %34, align 8, !tbaa !9
  %689 = load i64, ptr %78, align 8, !tbaa !9
  %690 = load ptr, ptr %79, align 8, !tbaa !5
  %691 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %688, i64 noundef %689, i64 noundef 0, ptr noundef %690)
  store i64 %691, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %80) #5
  %692 = load ptr, ptr %32, align 8, !tbaa !5
  %693 = load i32, ptr %35, align 4, !tbaa !11
  %694 = mul i32 4, %693
  %695 = add i32 %694, 2
  %696 = zext i32 %695 to i64
  %697 = getelementptr inbounds i64, ptr %692, i64 %696
  %698 = load i64, ptr %697, align 8, !tbaa !9
  store i64 %698, ptr %80, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %81) #5
  %699 = load ptr, ptr %33, align 8, !tbaa !5
  %700 = load i32, ptr %35, align 4, !tbaa !11
  %701 = mul i32 4, %700
  %702 = zext i32 %701 to i64
  %703 = getelementptr inbounds i64, ptr %699, i64 %702
  %704 = getelementptr inbounds i64, ptr %703, i64 2
  store ptr %704, ptr %81, align 8, !tbaa !5
  %705 = load i64, ptr %34, align 8, !tbaa !9
  %706 = load i64, ptr %80, align 8, !tbaa !9
  %707 = load ptr, ptr %81, align 8, !tbaa !5
  %708 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %705, i64 noundef %706, i64 noundef 0, ptr noundef %707)
  store i64 %708, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %82) #5
  %709 = load ptr, ptr %32, align 8, !tbaa !5
  %710 = load i32, ptr %35, align 4, !tbaa !11
  %711 = mul i32 4, %710
  %712 = add i32 %711, 3
  %713 = zext i32 %712 to i64
  %714 = getelementptr inbounds i64, ptr %709, i64 %713
  %715 = load i64, ptr %714, align 8, !tbaa !9
  store i64 %715, ptr %82, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %83) #5
  %716 = load ptr, ptr %33, align 8, !tbaa !5
  %717 = load i32, ptr %35, align 4, !tbaa !11
  %718 = mul i32 4, %717
  %719 = zext i32 %718 to i64
  %720 = getelementptr inbounds i64, ptr %716, i64 %719
  %721 = getelementptr inbounds i64, ptr %720, i64 3
  store ptr %721, ptr %83, align 8, !tbaa !5
  %722 = load i64, ptr %34, align 8, !tbaa !9
  %723 = load i64, ptr %82, align 8, !tbaa !9
  %724 = load ptr, ptr %83, align 8, !tbaa !5
  %725 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %722, i64 noundef %723, i64 noundef 0, ptr noundef %724)
  store i64 %725, ptr %34, align 8, !tbaa !9
  %726 = load i32, ptr %35, align 4, !tbaa !11
  %727 = add i32 %726, 1
  store i32 %727, ptr %35, align 4, !tbaa !11
  %728 = load i32, ptr %35, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %84) #5
  %729 = load ptr, ptr %32, align 8, !tbaa !5
  %730 = load i32, ptr %35, align 4, !tbaa !11
  %731 = mul i32 4, %730
  %732 = zext i32 %731 to i64
  %733 = getelementptr inbounds i64, ptr %729, i64 %732
  %734 = load i64, ptr %733, align 8, !tbaa !9
  store i64 %734, ptr %84, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %85) #5
  %735 = load ptr, ptr %33, align 8, !tbaa !5
  %736 = load i32, ptr %35, align 4, !tbaa !11
  %737 = mul i32 4, %736
  %738 = zext i32 %737 to i64
  %739 = getelementptr inbounds i64, ptr %735, i64 %738
  store ptr %739, ptr %85, align 8, !tbaa !5
  %740 = load i64, ptr %34, align 8, !tbaa !9
  %741 = load i64, ptr %84, align 8, !tbaa !9
  %742 = load ptr, ptr %85, align 8, !tbaa !5
  %743 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %740, i64 noundef %741, i64 noundef 0, ptr noundef %742)
  store i64 %743, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %86) #5
  %744 = load ptr, ptr %32, align 8, !tbaa !5
  %745 = load i32, ptr %35, align 4, !tbaa !11
  %746 = mul i32 4, %745
  %747 = add i32 %746, 1
  %748 = zext i32 %747 to i64
  %749 = getelementptr inbounds i64, ptr %744, i64 %748
  %750 = load i64, ptr %749, align 8, !tbaa !9
  store i64 %750, ptr %86, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %87) #5
  %751 = load ptr, ptr %33, align 8, !tbaa !5
  %752 = load i32, ptr %35, align 4, !tbaa !11
  %753 = mul i32 4, %752
  %754 = zext i32 %753 to i64
  %755 = getelementptr inbounds i64, ptr %751, i64 %754
  %756 = getelementptr inbounds i64, ptr %755, i64 1
  store ptr %756, ptr %87, align 8, !tbaa !5
  %757 = load i64, ptr %34, align 8, !tbaa !9
  %758 = load i64, ptr %86, align 8, !tbaa !9
  %759 = load ptr, ptr %87, align 8, !tbaa !5
  %760 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %757, i64 noundef %758, i64 noundef 0, ptr noundef %759)
  store i64 %760, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %88) #5
  %761 = load ptr, ptr %32, align 8, !tbaa !5
  %762 = load i32, ptr %35, align 4, !tbaa !11
  %763 = mul i32 4, %762
  %764 = add i32 %763, 2
  %765 = zext i32 %764 to i64
  %766 = getelementptr inbounds i64, ptr %761, i64 %765
  %767 = load i64, ptr %766, align 8, !tbaa !9
  store i64 %767, ptr %88, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %89) #5
  %768 = load ptr, ptr %33, align 8, !tbaa !5
  %769 = load i32, ptr %35, align 4, !tbaa !11
  %770 = mul i32 4, %769
  %771 = zext i32 %770 to i64
  %772 = getelementptr inbounds i64, ptr %768, i64 %771
  %773 = getelementptr inbounds i64, ptr %772, i64 2
  store ptr %773, ptr %89, align 8, !tbaa !5
  %774 = load i64, ptr %34, align 8, !tbaa !9
  %775 = load i64, ptr %88, align 8, !tbaa !9
  %776 = load ptr, ptr %89, align 8, !tbaa !5
  %777 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %774, i64 noundef %775, i64 noundef 0, ptr noundef %776)
  store i64 %777, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %90) #5
  %778 = load ptr, ptr %32, align 8, !tbaa !5
  %779 = load i32, ptr %35, align 4, !tbaa !11
  %780 = mul i32 4, %779
  %781 = add i32 %780, 3
  %782 = zext i32 %781 to i64
  %783 = getelementptr inbounds i64, ptr %778, i64 %782
  %784 = load i64, ptr %783, align 8, !tbaa !9
  store i64 %784, ptr %90, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %91) #5
  %785 = load ptr, ptr %33, align 8, !tbaa !5
  %786 = load i32, ptr %35, align 4, !tbaa !11
  %787 = mul i32 4, %786
  %788 = zext i32 %787 to i64
  %789 = getelementptr inbounds i64, ptr %785, i64 %788
  %790 = getelementptr inbounds i64, ptr %789, i64 3
  store ptr %790, ptr %91, align 8, !tbaa !5
  %791 = load i64, ptr %34, align 8, !tbaa !9
  %792 = load i64, ptr %90, align 8, !tbaa !9
  %793 = load ptr, ptr %91, align 8, !tbaa !5
  %794 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %791, i64 noundef %792, i64 noundef 0, ptr noundef %793)
  store i64 %794, ptr %34, align 8, !tbaa !9
  %795 = load i32, ptr %35, align 4, !tbaa !11
  %796 = add i32 %795, 1
  store i32 %796, ptr %35, align 4, !tbaa !11
  %797 = load i32, ptr %35, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %90) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %89) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %92) #5
  %798 = load ptr, ptr %32, align 8, !tbaa !5
  %799 = load i32, ptr %35, align 4, !tbaa !11
  %800 = mul i32 4, %799
  %801 = zext i32 %800 to i64
  %802 = getelementptr inbounds i64, ptr %798, i64 %801
  %803 = load i64, ptr %802, align 8, !tbaa !9
  store i64 %803, ptr %92, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %93) #5
  %804 = load ptr, ptr %33, align 8, !tbaa !5
  %805 = load i32, ptr %35, align 4, !tbaa !11
  %806 = mul i32 4, %805
  %807 = zext i32 %806 to i64
  %808 = getelementptr inbounds i64, ptr %804, i64 %807
  store ptr %808, ptr %93, align 8, !tbaa !5
  %809 = load i64, ptr %34, align 8, !tbaa !9
  %810 = load i64, ptr %92, align 8, !tbaa !9
  %811 = load ptr, ptr %93, align 8, !tbaa !5
  %812 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %809, i64 noundef %810, i64 noundef 0, ptr noundef %811)
  store i64 %812, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %94) #5
  %813 = load ptr, ptr %32, align 8, !tbaa !5
  %814 = load i32, ptr %35, align 4, !tbaa !11
  %815 = mul i32 4, %814
  %816 = add i32 %815, 1
  %817 = zext i32 %816 to i64
  %818 = getelementptr inbounds i64, ptr %813, i64 %817
  %819 = load i64, ptr %818, align 8, !tbaa !9
  store i64 %819, ptr %94, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %95) #5
  %820 = load ptr, ptr %33, align 8, !tbaa !5
  %821 = load i32, ptr %35, align 4, !tbaa !11
  %822 = mul i32 4, %821
  %823 = zext i32 %822 to i64
  %824 = getelementptr inbounds i64, ptr %820, i64 %823
  %825 = getelementptr inbounds i64, ptr %824, i64 1
  store ptr %825, ptr %95, align 8, !tbaa !5
  %826 = load i64, ptr %34, align 8, !tbaa !9
  %827 = load i64, ptr %94, align 8, !tbaa !9
  %828 = load ptr, ptr %95, align 8, !tbaa !5
  %829 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %826, i64 noundef %827, i64 noundef 0, ptr noundef %828)
  store i64 %829, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %96) #5
  %830 = load ptr, ptr %32, align 8, !tbaa !5
  %831 = load i32, ptr %35, align 4, !tbaa !11
  %832 = mul i32 4, %831
  %833 = add i32 %832, 2
  %834 = zext i32 %833 to i64
  %835 = getelementptr inbounds i64, ptr %830, i64 %834
  %836 = load i64, ptr %835, align 8, !tbaa !9
  store i64 %836, ptr %96, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %97) #5
  %837 = load ptr, ptr %33, align 8, !tbaa !5
  %838 = load i32, ptr %35, align 4, !tbaa !11
  %839 = mul i32 4, %838
  %840 = zext i32 %839 to i64
  %841 = getelementptr inbounds i64, ptr %837, i64 %840
  %842 = getelementptr inbounds i64, ptr %841, i64 2
  store ptr %842, ptr %97, align 8, !tbaa !5
  %843 = load i64, ptr %34, align 8, !tbaa !9
  %844 = load i64, ptr %96, align 8, !tbaa !9
  %845 = load ptr, ptr %97, align 8, !tbaa !5
  %846 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %843, i64 noundef %844, i64 noundef 0, ptr noundef %845)
  store i64 %846, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %98) #5
  %847 = load ptr, ptr %32, align 8, !tbaa !5
  %848 = load i32, ptr %35, align 4, !tbaa !11
  %849 = mul i32 4, %848
  %850 = add i32 %849, 3
  %851 = zext i32 %850 to i64
  %852 = getelementptr inbounds i64, ptr %847, i64 %851
  %853 = load i64, ptr %852, align 8, !tbaa !9
  store i64 %853, ptr %98, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %99) #5
  %854 = load ptr, ptr %33, align 8, !tbaa !5
  %855 = load i32, ptr %35, align 4, !tbaa !11
  %856 = mul i32 4, %855
  %857 = zext i32 %856 to i64
  %858 = getelementptr inbounds i64, ptr %854, i64 %857
  %859 = getelementptr inbounds i64, ptr %858, i64 3
  store ptr %859, ptr %99, align 8, !tbaa !5
  %860 = load i64, ptr %34, align 8, !tbaa !9
  %861 = load i64, ptr %98, align 8, !tbaa !9
  %862 = load ptr, ptr %99, align 8, !tbaa !5
  %863 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %860, i64 noundef %861, i64 noundef 0, ptr noundef %862)
  store i64 %863, ptr %34, align 8, !tbaa !9
  %864 = load i32, ptr %35, align 4, !tbaa !11
  %865 = add i32 %864, 1
  store i32 %865, ptr %35, align 4, !tbaa !11
  %866 = load i32, ptr %35, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %99) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %97) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %96) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %95) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %100) #5
  %867 = load ptr, ptr %32, align 8, !tbaa !5
  %868 = load i32, ptr %35, align 4, !tbaa !11
  %869 = mul i32 4, %868
  %870 = zext i32 %869 to i64
  %871 = getelementptr inbounds i64, ptr %867, i64 %870
  %872 = load i64, ptr %871, align 8, !tbaa !9
  store i64 %872, ptr %100, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %101) #5
  %873 = load ptr, ptr %33, align 8, !tbaa !5
  %874 = load i32, ptr %35, align 4, !tbaa !11
  %875 = mul i32 4, %874
  %876 = zext i32 %875 to i64
  %877 = getelementptr inbounds i64, ptr %873, i64 %876
  store ptr %877, ptr %101, align 8, !tbaa !5
  %878 = load i64, ptr %34, align 8, !tbaa !9
  %879 = load i64, ptr %100, align 8, !tbaa !9
  %880 = load ptr, ptr %101, align 8, !tbaa !5
  %881 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %878, i64 noundef %879, i64 noundef 0, ptr noundef %880)
  store i64 %881, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %102) #5
  %882 = load ptr, ptr %32, align 8, !tbaa !5
  %883 = load i32, ptr %35, align 4, !tbaa !11
  %884 = mul i32 4, %883
  %885 = add i32 %884, 1
  %886 = zext i32 %885 to i64
  %887 = getelementptr inbounds i64, ptr %882, i64 %886
  %888 = load i64, ptr %887, align 8, !tbaa !9
  store i64 %888, ptr %102, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %103) #5
  %889 = load ptr, ptr %33, align 8, !tbaa !5
  %890 = load i32, ptr %35, align 4, !tbaa !11
  %891 = mul i32 4, %890
  %892 = zext i32 %891 to i64
  %893 = getelementptr inbounds i64, ptr %889, i64 %892
  %894 = getelementptr inbounds i64, ptr %893, i64 1
  store ptr %894, ptr %103, align 8, !tbaa !5
  %895 = load i64, ptr %34, align 8, !tbaa !9
  %896 = load i64, ptr %102, align 8, !tbaa !9
  %897 = load ptr, ptr %103, align 8, !tbaa !5
  %898 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %895, i64 noundef %896, i64 noundef 0, ptr noundef %897)
  store i64 %898, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %104) #5
  %899 = load ptr, ptr %32, align 8, !tbaa !5
  %900 = load i32, ptr %35, align 4, !tbaa !11
  %901 = mul i32 4, %900
  %902 = add i32 %901, 2
  %903 = zext i32 %902 to i64
  %904 = getelementptr inbounds i64, ptr %899, i64 %903
  %905 = load i64, ptr %904, align 8, !tbaa !9
  store i64 %905, ptr %104, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %105) #5
  %906 = load ptr, ptr %33, align 8, !tbaa !5
  %907 = load i32, ptr %35, align 4, !tbaa !11
  %908 = mul i32 4, %907
  %909 = zext i32 %908 to i64
  %910 = getelementptr inbounds i64, ptr %906, i64 %909
  %911 = getelementptr inbounds i64, ptr %910, i64 2
  store ptr %911, ptr %105, align 8, !tbaa !5
  %912 = load i64, ptr %34, align 8, !tbaa !9
  %913 = load i64, ptr %104, align 8, !tbaa !9
  %914 = load ptr, ptr %105, align 8, !tbaa !5
  %915 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %912, i64 noundef %913, i64 noundef 0, ptr noundef %914)
  store i64 %915, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %106) #5
  %916 = load ptr, ptr %32, align 8, !tbaa !5
  %917 = load i32, ptr %35, align 4, !tbaa !11
  %918 = mul i32 4, %917
  %919 = add i32 %918, 3
  %920 = zext i32 %919 to i64
  %921 = getelementptr inbounds i64, ptr %916, i64 %920
  %922 = load i64, ptr %921, align 8, !tbaa !9
  store i64 %922, ptr %106, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %107) #5
  %923 = load ptr, ptr %33, align 8, !tbaa !5
  %924 = load i32, ptr %35, align 4, !tbaa !11
  %925 = mul i32 4, %924
  %926 = zext i32 %925 to i64
  %927 = getelementptr inbounds i64, ptr %923, i64 %926
  %928 = getelementptr inbounds i64, ptr %927, i64 3
  store ptr %928, ptr %107, align 8, !tbaa !5
  %929 = load i64, ptr %34, align 8, !tbaa !9
  %930 = load i64, ptr %106, align 8, !tbaa !9
  %931 = load ptr, ptr %107, align 8, !tbaa !5
  %932 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %929, i64 noundef %930, i64 noundef 0, ptr noundef %931)
  store i64 %932, ptr %34, align 8, !tbaa !9
  %933 = load i32, ptr %35, align 4, !tbaa !11
  %934 = add i32 %933, 1
  store i32 %934, ptr %35, align 4, !tbaa !11
  %935 = load i32, ptr %35, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %107) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %106) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %105) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %103) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %102) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %100) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %108) #5
  %936 = load ptr, ptr %32, align 8, !tbaa !5
  %937 = load i32, ptr %35, align 4, !tbaa !11
  %938 = mul i32 4, %937
  %939 = zext i32 %938 to i64
  %940 = getelementptr inbounds i64, ptr %936, i64 %939
  %941 = load i64, ptr %940, align 8, !tbaa !9
  store i64 %941, ptr %108, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %109) #5
  %942 = load ptr, ptr %33, align 8, !tbaa !5
  %943 = load i32, ptr %35, align 4, !tbaa !11
  %944 = mul i32 4, %943
  %945 = zext i32 %944 to i64
  %946 = getelementptr inbounds i64, ptr %942, i64 %945
  store ptr %946, ptr %109, align 8, !tbaa !5
  %947 = load i64, ptr %34, align 8, !tbaa !9
  %948 = load i64, ptr %108, align 8, !tbaa !9
  %949 = load ptr, ptr %109, align 8, !tbaa !5
  %950 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %947, i64 noundef %948, i64 noundef 0, ptr noundef %949)
  store i64 %950, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %110) #5
  %951 = load ptr, ptr %32, align 8, !tbaa !5
  %952 = load i32, ptr %35, align 4, !tbaa !11
  %953 = mul i32 4, %952
  %954 = add i32 %953, 1
  %955 = zext i32 %954 to i64
  %956 = getelementptr inbounds i64, ptr %951, i64 %955
  %957 = load i64, ptr %956, align 8, !tbaa !9
  store i64 %957, ptr %110, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %111) #5
  %958 = load ptr, ptr %33, align 8, !tbaa !5
  %959 = load i32, ptr %35, align 4, !tbaa !11
  %960 = mul i32 4, %959
  %961 = zext i32 %960 to i64
  %962 = getelementptr inbounds i64, ptr %958, i64 %961
  %963 = getelementptr inbounds i64, ptr %962, i64 1
  store ptr %963, ptr %111, align 8, !tbaa !5
  %964 = load i64, ptr %34, align 8, !tbaa !9
  %965 = load i64, ptr %110, align 8, !tbaa !9
  %966 = load ptr, ptr %111, align 8, !tbaa !5
  %967 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %964, i64 noundef %965, i64 noundef 0, ptr noundef %966)
  store i64 %967, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %112) #5
  %968 = load ptr, ptr %32, align 8, !tbaa !5
  %969 = load i32, ptr %35, align 4, !tbaa !11
  %970 = mul i32 4, %969
  %971 = add i32 %970, 2
  %972 = zext i32 %971 to i64
  %973 = getelementptr inbounds i64, ptr %968, i64 %972
  %974 = load i64, ptr %973, align 8, !tbaa !9
  store i64 %974, ptr %112, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %113) #5
  %975 = load ptr, ptr %33, align 8, !tbaa !5
  %976 = load i32, ptr %35, align 4, !tbaa !11
  %977 = mul i32 4, %976
  %978 = zext i32 %977 to i64
  %979 = getelementptr inbounds i64, ptr %975, i64 %978
  %980 = getelementptr inbounds i64, ptr %979, i64 2
  store ptr %980, ptr %113, align 8, !tbaa !5
  %981 = load i64, ptr %34, align 8, !tbaa !9
  %982 = load i64, ptr %112, align 8, !tbaa !9
  %983 = load ptr, ptr %113, align 8, !tbaa !5
  %984 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %981, i64 noundef %982, i64 noundef 0, ptr noundef %983)
  store i64 %984, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %114) #5
  %985 = load ptr, ptr %32, align 8, !tbaa !5
  %986 = load i32, ptr %35, align 4, !tbaa !11
  %987 = mul i32 4, %986
  %988 = add i32 %987, 3
  %989 = zext i32 %988 to i64
  %990 = getelementptr inbounds i64, ptr %985, i64 %989
  %991 = load i64, ptr %990, align 8, !tbaa !9
  store i64 %991, ptr %114, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %115) #5
  %992 = load ptr, ptr %33, align 8, !tbaa !5
  %993 = load i32, ptr %35, align 4, !tbaa !11
  %994 = mul i32 4, %993
  %995 = zext i32 %994 to i64
  %996 = getelementptr inbounds i64, ptr %992, i64 %995
  %997 = getelementptr inbounds i64, ptr %996, i64 3
  store ptr %997, ptr %115, align 8, !tbaa !5
  %998 = load i64, ptr %34, align 8, !tbaa !9
  %999 = load i64, ptr %114, align 8, !tbaa !9
  %1000 = load ptr, ptr %115, align 8, !tbaa !5
  %1001 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %998, i64 noundef %999, i64 noundef 0, ptr noundef %1000)
  store i64 %1001, ptr %34, align 8, !tbaa !9
  %1002 = load i32, ptr %35, align 4, !tbaa !11
  %1003 = add i32 %1002, 1
  store i32 %1003, ptr %35, align 4, !tbaa !11
  %1004 = load i32, ptr %35, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %115) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %114) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %113) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %112) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %110) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %109) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %116) #5
  %1005 = load ptr, ptr %32, align 8, !tbaa !5
  %1006 = load i32, ptr %35, align 4, !tbaa !11
  %1007 = mul i32 4, %1006
  %1008 = zext i32 %1007 to i64
  %1009 = getelementptr inbounds i64, ptr %1005, i64 %1008
  %1010 = load i64, ptr %1009, align 8, !tbaa !9
  store i64 %1010, ptr %116, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %117) #5
  %1011 = load ptr, ptr %33, align 8, !tbaa !5
  %1012 = load i32, ptr %35, align 4, !tbaa !11
  %1013 = mul i32 4, %1012
  %1014 = zext i32 %1013 to i64
  %1015 = getelementptr inbounds i64, ptr %1011, i64 %1014
  store ptr %1015, ptr %117, align 8, !tbaa !5
  %1016 = load i64, ptr %34, align 8, !tbaa !9
  %1017 = load i64, ptr %116, align 8, !tbaa !9
  %1018 = load ptr, ptr %117, align 8, !tbaa !5
  %1019 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %1016, i64 noundef %1017, i64 noundef 0, ptr noundef %1018)
  store i64 %1019, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %118) #5
  %1020 = load ptr, ptr %32, align 8, !tbaa !5
  %1021 = load i32, ptr %35, align 4, !tbaa !11
  %1022 = mul i32 4, %1021
  %1023 = add i32 %1022, 1
  %1024 = zext i32 %1023 to i64
  %1025 = getelementptr inbounds i64, ptr %1020, i64 %1024
  %1026 = load i64, ptr %1025, align 8, !tbaa !9
  store i64 %1026, ptr %118, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %119) #5
  %1027 = load ptr, ptr %33, align 8, !tbaa !5
  %1028 = load i32, ptr %35, align 4, !tbaa !11
  %1029 = mul i32 4, %1028
  %1030 = zext i32 %1029 to i64
  %1031 = getelementptr inbounds i64, ptr %1027, i64 %1030
  %1032 = getelementptr inbounds i64, ptr %1031, i64 1
  store ptr %1032, ptr %119, align 8, !tbaa !5
  %1033 = load i64, ptr %34, align 8, !tbaa !9
  %1034 = load i64, ptr %118, align 8, !tbaa !9
  %1035 = load ptr, ptr %119, align 8, !tbaa !5
  %1036 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %1033, i64 noundef %1034, i64 noundef 0, ptr noundef %1035)
  store i64 %1036, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %120) #5
  %1037 = load ptr, ptr %32, align 8, !tbaa !5
  %1038 = load i32, ptr %35, align 4, !tbaa !11
  %1039 = mul i32 4, %1038
  %1040 = add i32 %1039, 2
  %1041 = zext i32 %1040 to i64
  %1042 = getelementptr inbounds i64, ptr %1037, i64 %1041
  %1043 = load i64, ptr %1042, align 8, !tbaa !9
  store i64 %1043, ptr %120, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %121) #5
  %1044 = load ptr, ptr %33, align 8, !tbaa !5
  %1045 = load i32, ptr %35, align 4, !tbaa !11
  %1046 = mul i32 4, %1045
  %1047 = zext i32 %1046 to i64
  %1048 = getelementptr inbounds i64, ptr %1044, i64 %1047
  %1049 = getelementptr inbounds i64, ptr %1048, i64 2
  store ptr %1049, ptr %121, align 8, !tbaa !5
  %1050 = load i64, ptr %34, align 8, !tbaa !9
  %1051 = load i64, ptr %120, align 8, !tbaa !9
  %1052 = load ptr, ptr %121, align 8, !tbaa !5
  %1053 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %1050, i64 noundef %1051, i64 noundef 0, ptr noundef %1052)
  store i64 %1053, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %122) #5
  %1054 = load ptr, ptr %32, align 8, !tbaa !5
  %1055 = load i32, ptr %35, align 4, !tbaa !11
  %1056 = mul i32 4, %1055
  %1057 = add i32 %1056, 3
  %1058 = zext i32 %1057 to i64
  %1059 = getelementptr inbounds i64, ptr %1054, i64 %1058
  %1060 = load i64, ptr %1059, align 8, !tbaa !9
  store i64 %1060, ptr %122, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %123) #5
  %1061 = load ptr, ptr %33, align 8, !tbaa !5
  %1062 = load i32, ptr %35, align 4, !tbaa !11
  %1063 = mul i32 4, %1062
  %1064 = zext i32 %1063 to i64
  %1065 = getelementptr inbounds i64, ptr %1061, i64 %1064
  %1066 = getelementptr inbounds i64, ptr %1065, i64 3
  store ptr %1066, ptr %123, align 8, !tbaa !5
  %1067 = load i64, ptr %34, align 8, !tbaa !9
  %1068 = load i64, ptr %122, align 8, !tbaa !9
  %1069 = load ptr, ptr %123, align 8, !tbaa !5
  %1070 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %1067, i64 noundef %1068, i64 noundef 0, ptr noundef %1069)
  store i64 %1070, ptr %34, align 8, !tbaa !9
  %1071 = load i32, ptr %35, align 4, !tbaa !11
  %1072 = add i32 %1071, 1
  store i32 %1072, ptr %35, align 4, !tbaa !11
  %1073 = load i32, ptr %35, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %123) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %122) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %121) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %120) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %119) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %118) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %117) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %116) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %124) #5
  %1074 = load ptr, ptr %32, align 8, !tbaa !5
  %1075 = load i32, ptr %35, align 4, !tbaa !11
  %1076 = mul i32 4, %1075
  %1077 = zext i32 %1076 to i64
  %1078 = getelementptr inbounds i64, ptr %1074, i64 %1077
  %1079 = load i64, ptr %1078, align 8, !tbaa !9
  store i64 %1079, ptr %124, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %125) #5
  %1080 = load ptr, ptr %33, align 8, !tbaa !5
  %1081 = load i32, ptr %35, align 4, !tbaa !11
  %1082 = mul i32 4, %1081
  %1083 = zext i32 %1082 to i64
  %1084 = getelementptr inbounds i64, ptr %1080, i64 %1083
  store ptr %1084, ptr %125, align 8, !tbaa !5
  %1085 = load i64, ptr %34, align 8, !tbaa !9
  %1086 = load i64, ptr %124, align 8, !tbaa !9
  %1087 = load ptr, ptr %125, align 8, !tbaa !5
  %1088 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %1085, i64 noundef %1086, i64 noundef 0, ptr noundef %1087)
  store i64 %1088, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %126) #5
  %1089 = load ptr, ptr %32, align 8, !tbaa !5
  %1090 = load i32, ptr %35, align 4, !tbaa !11
  %1091 = mul i32 4, %1090
  %1092 = add i32 %1091, 1
  %1093 = zext i32 %1092 to i64
  %1094 = getelementptr inbounds i64, ptr %1089, i64 %1093
  %1095 = load i64, ptr %1094, align 8, !tbaa !9
  store i64 %1095, ptr %126, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %127) #5
  %1096 = load ptr, ptr %33, align 8, !tbaa !5
  %1097 = load i32, ptr %35, align 4, !tbaa !11
  %1098 = mul i32 4, %1097
  %1099 = zext i32 %1098 to i64
  %1100 = getelementptr inbounds i64, ptr %1096, i64 %1099
  %1101 = getelementptr inbounds i64, ptr %1100, i64 1
  store ptr %1101, ptr %127, align 8, !tbaa !5
  %1102 = load i64, ptr %34, align 8, !tbaa !9
  %1103 = load i64, ptr %126, align 8, !tbaa !9
  %1104 = load ptr, ptr %127, align 8, !tbaa !5
  %1105 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %1102, i64 noundef %1103, i64 noundef 0, ptr noundef %1104)
  store i64 %1105, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %128) #5
  %1106 = load ptr, ptr %32, align 8, !tbaa !5
  %1107 = load i32, ptr %35, align 4, !tbaa !11
  %1108 = mul i32 4, %1107
  %1109 = add i32 %1108, 2
  %1110 = zext i32 %1109 to i64
  %1111 = getelementptr inbounds i64, ptr %1106, i64 %1110
  %1112 = load i64, ptr %1111, align 8, !tbaa !9
  store i64 %1112, ptr %128, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %129) #5
  %1113 = load ptr, ptr %33, align 8, !tbaa !5
  %1114 = load i32, ptr %35, align 4, !tbaa !11
  %1115 = mul i32 4, %1114
  %1116 = zext i32 %1115 to i64
  %1117 = getelementptr inbounds i64, ptr %1113, i64 %1116
  %1118 = getelementptr inbounds i64, ptr %1117, i64 2
  store ptr %1118, ptr %129, align 8, !tbaa !5
  %1119 = load i64, ptr %34, align 8, !tbaa !9
  %1120 = load i64, ptr %128, align 8, !tbaa !9
  %1121 = load ptr, ptr %129, align 8, !tbaa !5
  %1122 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %1119, i64 noundef %1120, i64 noundef 0, ptr noundef %1121)
  store i64 %1122, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %130) #5
  %1123 = load ptr, ptr %32, align 8, !tbaa !5
  %1124 = load i32, ptr %35, align 4, !tbaa !11
  %1125 = mul i32 4, %1124
  %1126 = add i32 %1125, 3
  %1127 = zext i32 %1126 to i64
  %1128 = getelementptr inbounds i64, ptr %1123, i64 %1127
  %1129 = load i64, ptr %1128, align 8, !tbaa !9
  store i64 %1129, ptr %130, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %131) #5
  %1130 = load ptr, ptr %33, align 8, !tbaa !5
  %1131 = load i32, ptr %35, align 4, !tbaa !11
  %1132 = mul i32 4, %1131
  %1133 = zext i32 %1132 to i64
  %1134 = getelementptr inbounds i64, ptr %1130, i64 %1133
  %1135 = getelementptr inbounds i64, ptr %1134, i64 3
  store ptr %1135, ptr %131, align 8, !tbaa !5
  %1136 = load i64, ptr %34, align 8, !tbaa !9
  %1137 = load i64, ptr %130, align 8, !tbaa !9
  %1138 = load ptr, ptr %131, align 8, !tbaa !5
  %1139 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %1136, i64 noundef %1137, i64 noundef 0, ptr noundef %1138)
  store i64 %1139, ptr %34, align 8, !tbaa !9
  %1140 = load i32, ptr %35, align 4, !tbaa !11
  %1141 = add i32 %1140, 1
  store i32 %1141, ptr %35, align 4, !tbaa !11
  %1142 = load i32, ptr %35, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %131) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %130) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %129) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %128) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %127) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %126) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %125) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %124) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %132) #5
  %1143 = load ptr, ptr %32, align 8, !tbaa !5
  %1144 = load i32, ptr %35, align 4, !tbaa !11
  %1145 = mul i32 4, %1144
  %1146 = zext i32 %1145 to i64
  %1147 = getelementptr inbounds i64, ptr %1143, i64 %1146
  %1148 = load i64, ptr %1147, align 8, !tbaa !9
  store i64 %1148, ptr %132, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %133) #5
  %1149 = load ptr, ptr %33, align 8, !tbaa !5
  %1150 = load i32, ptr %35, align 4, !tbaa !11
  %1151 = mul i32 4, %1150
  %1152 = zext i32 %1151 to i64
  %1153 = getelementptr inbounds i64, ptr %1149, i64 %1152
  store ptr %1153, ptr %133, align 8, !tbaa !5
  %1154 = load i64, ptr %34, align 8, !tbaa !9
  %1155 = load i64, ptr %132, align 8, !tbaa !9
  %1156 = load ptr, ptr %133, align 8, !tbaa !5
  %1157 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %1154, i64 noundef %1155, i64 noundef 0, ptr noundef %1156)
  store i64 %1157, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %134) #5
  %1158 = load ptr, ptr %32, align 8, !tbaa !5
  %1159 = load i32, ptr %35, align 4, !tbaa !11
  %1160 = mul i32 4, %1159
  %1161 = add i32 %1160, 1
  %1162 = zext i32 %1161 to i64
  %1163 = getelementptr inbounds i64, ptr %1158, i64 %1162
  %1164 = load i64, ptr %1163, align 8, !tbaa !9
  store i64 %1164, ptr %134, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %135) #5
  %1165 = load ptr, ptr %33, align 8, !tbaa !5
  %1166 = load i32, ptr %35, align 4, !tbaa !11
  %1167 = mul i32 4, %1166
  %1168 = zext i32 %1167 to i64
  %1169 = getelementptr inbounds i64, ptr %1165, i64 %1168
  %1170 = getelementptr inbounds i64, ptr %1169, i64 1
  store ptr %1170, ptr %135, align 8, !tbaa !5
  %1171 = load i64, ptr %34, align 8, !tbaa !9
  %1172 = load i64, ptr %134, align 8, !tbaa !9
  %1173 = load ptr, ptr %135, align 8, !tbaa !5
  %1174 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %1171, i64 noundef %1172, i64 noundef 0, ptr noundef %1173)
  store i64 %1174, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %136) #5
  %1175 = load ptr, ptr %32, align 8, !tbaa !5
  %1176 = load i32, ptr %35, align 4, !tbaa !11
  %1177 = mul i32 4, %1176
  %1178 = add i32 %1177, 2
  %1179 = zext i32 %1178 to i64
  %1180 = getelementptr inbounds i64, ptr %1175, i64 %1179
  %1181 = load i64, ptr %1180, align 8, !tbaa !9
  store i64 %1181, ptr %136, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %137) #5
  %1182 = load ptr, ptr %33, align 8, !tbaa !5
  %1183 = load i32, ptr %35, align 4, !tbaa !11
  %1184 = mul i32 4, %1183
  %1185 = zext i32 %1184 to i64
  %1186 = getelementptr inbounds i64, ptr %1182, i64 %1185
  %1187 = getelementptr inbounds i64, ptr %1186, i64 2
  store ptr %1187, ptr %137, align 8, !tbaa !5
  %1188 = load i64, ptr %34, align 8, !tbaa !9
  %1189 = load i64, ptr %136, align 8, !tbaa !9
  %1190 = load ptr, ptr %137, align 8, !tbaa !5
  %1191 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %1188, i64 noundef %1189, i64 noundef 0, ptr noundef %1190)
  store i64 %1191, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %138) #5
  %1192 = load ptr, ptr %32, align 8, !tbaa !5
  %1193 = load i32, ptr %35, align 4, !tbaa !11
  %1194 = mul i32 4, %1193
  %1195 = add i32 %1194, 3
  %1196 = zext i32 %1195 to i64
  %1197 = getelementptr inbounds i64, ptr %1192, i64 %1196
  %1198 = load i64, ptr %1197, align 8, !tbaa !9
  store i64 %1198, ptr %138, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %139) #5
  %1199 = load ptr, ptr %33, align 8, !tbaa !5
  %1200 = load i32, ptr %35, align 4, !tbaa !11
  %1201 = mul i32 4, %1200
  %1202 = zext i32 %1201 to i64
  %1203 = getelementptr inbounds i64, ptr %1199, i64 %1202
  %1204 = getelementptr inbounds i64, ptr %1203, i64 3
  store ptr %1204, ptr %139, align 8, !tbaa !5
  %1205 = load i64, ptr %34, align 8, !tbaa !9
  %1206 = load i64, ptr %138, align 8, !tbaa !9
  %1207 = load ptr, ptr %139, align 8, !tbaa !5
  %1208 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %1205, i64 noundef %1206, i64 noundef 0, ptr noundef %1207)
  store i64 %1208, ptr %34, align 8, !tbaa !9
  %1209 = load i32, ptr %35, align 4, !tbaa !11
  %1210 = add i32 %1209, 1
  store i32 %1210, ptr %35, align 4, !tbaa !11
  %1211 = load i32, ptr %35, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %139) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %138) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %137) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %136) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %135) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %134) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %133) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %132) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %140) #5
  %1212 = load ptr, ptr %32, align 8, !tbaa !5
  %1213 = load i32, ptr %35, align 4, !tbaa !11
  %1214 = mul i32 4, %1213
  %1215 = zext i32 %1214 to i64
  %1216 = getelementptr inbounds i64, ptr %1212, i64 %1215
  %1217 = load i64, ptr %1216, align 8, !tbaa !9
  store i64 %1217, ptr %140, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %141) #5
  %1218 = load ptr, ptr %33, align 8, !tbaa !5
  %1219 = load i32, ptr %35, align 4, !tbaa !11
  %1220 = mul i32 4, %1219
  %1221 = zext i32 %1220 to i64
  %1222 = getelementptr inbounds i64, ptr %1218, i64 %1221
  store ptr %1222, ptr %141, align 8, !tbaa !5
  %1223 = load i64, ptr %34, align 8, !tbaa !9
  %1224 = load i64, ptr %140, align 8, !tbaa !9
  %1225 = load ptr, ptr %141, align 8, !tbaa !5
  %1226 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %1223, i64 noundef %1224, i64 noundef 0, ptr noundef %1225)
  store i64 %1226, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %142) #5
  %1227 = load ptr, ptr %32, align 8, !tbaa !5
  %1228 = load i32, ptr %35, align 4, !tbaa !11
  %1229 = mul i32 4, %1228
  %1230 = add i32 %1229, 1
  %1231 = zext i32 %1230 to i64
  %1232 = getelementptr inbounds i64, ptr %1227, i64 %1231
  %1233 = load i64, ptr %1232, align 8, !tbaa !9
  store i64 %1233, ptr %142, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %143) #5
  %1234 = load ptr, ptr %33, align 8, !tbaa !5
  %1235 = load i32, ptr %35, align 4, !tbaa !11
  %1236 = mul i32 4, %1235
  %1237 = zext i32 %1236 to i64
  %1238 = getelementptr inbounds i64, ptr %1234, i64 %1237
  %1239 = getelementptr inbounds i64, ptr %1238, i64 1
  store ptr %1239, ptr %143, align 8, !tbaa !5
  %1240 = load i64, ptr %34, align 8, !tbaa !9
  %1241 = load i64, ptr %142, align 8, !tbaa !9
  %1242 = load ptr, ptr %143, align 8, !tbaa !5
  %1243 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %1240, i64 noundef %1241, i64 noundef 0, ptr noundef %1242)
  store i64 %1243, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %144) #5
  %1244 = load ptr, ptr %32, align 8, !tbaa !5
  %1245 = load i32, ptr %35, align 4, !tbaa !11
  %1246 = mul i32 4, %1245
  %1247 = add i32 %1246, 2
  %1248 = zext i32 %1247 to i64
  %1249 = getelementptr inbounds i64, ptr %1244, i64 %1248
  %1250 = load i64, ptr %1249, align 8, !tbaa !9
  store i64 %1250, ptr %144, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %145) #5
  %1251 = load ptr, ptr %33, align 8, !tbaa !5
  %1252 = load i32, ptr %35, align 4, !tbaa !11
  %1253 = mul i32 4, %1252
  %1254 = zext i32 %1253 to i64
  %1255 = getelementptr inbounds i64, ptr %1251, i64 %1254
  %1256 = getelementptr inbounds i64, ptr %1255, i64 2
  store ptr %1256, ptr %145, align 8, !tbaa !5
  %1257 = load i64, ptr %34, align 8, !tbaa !9
  %1258 = load i64, ptr %144, align 8, !tbaa !9
  %1259 = load ptr, ptr %145, align 8, !tbaa !5
  %1260 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %1257, i64 noundef %1258, i64 noundef 0, ptr noundef %1259)
  store i64 %1260, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %146) #5
  %1261 = load ptr, ptr %32, align 8, !tbaa !5
  %1262 = load i32, ptr %35, align 4, !tbaa !11
  %1263 = mul i32 4, %1262
  %1264 = add i32 %1263, 3
  %1265 = zext i32 %1264 to i64
  %1266 = getelementptr inbounds i64, ptr %1261, i64 %1265
  %1267 = load i64, ptr %1266, align 8, !tbaa !9
  store i64 %1267, ptr %146, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %147) #5
  %1268 = load ptr, ptr %33, align 8, !tbaa !5
  %1269 = load i32, ptr %35, align 4, !tbaa !11
  %1270 = mul i32 4, %1269
  %1271 = zext i32 %1270 to i64
  %1272 = getelementptr inbounds i64, ptr %1268, i64 %1271
  %1273 = getelementptr inbounds i64, ptr %1272, i64 3
  store ptr %1273, ptr %147, align 8, !tbaa !5
  %1274 = load i64, ptr %34, align 8, !tbaa !9
  %1275 = load i64, ptr %146, align 8, !tbaa !9
  %1276 = load ptr, ptr %147, align 8, !tbaa !5
  %1277 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %1274, i64 noundef %1275, i64 noundef 0, ptr noundef %1276)
  store i64 %1277, ptr %34, align 8, !tbaa !9
  %1278 = load i32, ptr %35, align 4, !tbaa !11
  %1279 = add i32 %1278, 1
  store i32 %1279, ptr %35, align 4, !tbaa !11
  %1280 = load i32, ptr %35, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %147) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %146) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %145) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %144) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %143) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %142) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %141) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %140) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %148) #5
  %1281 = load ptr, ptr %32, align 8, !tbaa !5
  %1282 = load i32, ptr %35, align 4, !tbaa !11
  %1283 = mul i32 4, %1282
  %1284 = zext i32 %1283 to i64
  %1285 = getelementptr inbounds i64, ptr %1281, i64 %1284
  %1286 = load i64, ptr %1285, align 8, !tbaa !9
  store i64 %1286, ptr %148, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %149) #5
  %1287 = load ptr, ptr %33, align 8, !tbaa !5
  %1288 = load i32, ptr %35, align 4, !tbaa !11
  %1289 = mul i32 4, %1288
  %1290 = zext i32 %1289 to i64
  %1291 = getelementptr inbounds i64, ptr %1287, i64 %1290
  store ptr %1291, ptr %149, align 8, !tbaa !5
  %1292 = load i64, ptr %34, align 8, !tbaa !9
  %1293 = load i64, ptr %148, align 8, !tbaa !9
  %1294 = load ptr, ptr %149, align 8, !tbaa !5
  %1295 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %1292, i64 noundef %1293, i64 noundef 0, ptr noundef %1294)
  store i64 %1295, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %150) #5
  %1296 = load ptr, ptr %32, align 8, !tbaa !5
  %1297 = load i32, ptr %35, align 4, !tbaa !11
  %1298 = mul i32 4, %1297
  %1299 = add i32 %1298, 1
  %1300 = zext i32 %1299 to i64
  %1301 = getelementptr inbounds i64, ptr %1296, i64 %1300
  %1302 = load i64, ptr %1301, align 8, !tbaa !9
  store i64 %1302, ptr %150, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %151) #5
  %1303 = load ptr, ptr %33, align 8, !tbaa !5
  %1304 = load i32, ptr %35, align 4, !tbaa !11
  %1305 = mul i32 4, %1304
  %1306 = zext i32 %1305 to i64
  %1307 = getelementptr inbounds i64, ptr %1303, i64 %1306
  %1308 = getelementptr inbounds i64, ptr %1307, i64 1
  store ptr %1308, ptr %151, align 8, !tbaa !5
  %1309 = load i64, ptr %34, align 8, !tbaa !9
  %1310 = load i64, ptr %150, align 8, !tbaa !9
  %1311 = load ptr, ptr %151, align 8, !tbaa !5
  %1312 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %1309, i64 noundef %1310, i64 noundef 0, ptr noundef %1311)
  store i64 %1312, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %152) #5
  %1313 = load ptr, ptr %32, align 8, !tbaa !5
  %1314 = load i32, ptr %35, align 4, !tbaa !11
  %1315 = mul i32 4, %1314
  %1316 = add i32 %1315, 2
  %1317 = zext i32 %1316 to i64
  %1318 = getelementptr inbounds i64, ptr %1313, i64 %1317
  %1319 = load i64, ptr %1318, align 8, !tbaa !9
  store i64 %1319, ptr %152, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %153) #5
  %1320 = load ptr, ptr %33, align 8, !tbaa !5
  %1321 = load i32, ptr %35, align 4, !tbaa !11
  %1322 = mul i32 4, %1321
  %1323 = zext i32 %1322 to i64
  %1324 = getelementptr inbounds i64, ptr %1320, i64 %1323
  %1325 = getelementptr inbounds i64, ptr %1324, i64 2
  store ptr %1325, ptr %153, align 8, !tbaa !5
  %1326 = load i64, ptr %34, align 8, !tbaa !9
  %1327 = load i64, ptr %152, align 8, !tbaa !9
  %1328 = load ptr, ptr %153, align 8, !tbaa !5
  %1329 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %1326, i64 noundef %1327, i64 noundef 0, ptr noundef %1328)
  store i64 %1329, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %154) #5
  %1330 = load ptr, ptr %32, align 8, !tbaa !5
  %1331 = load i32, ptr %35, align 4, !tbaa !11
  %1332 = mul i32 4, %1331
  %1333 = add i32 %1332, 3
  %1334 = zext i32 %1333 to i64
  %1335 = getelementptr inbounds i64, ptr %1330, i64 %1334
  %1336 = load i64, ptr %1335, align 8, !tbaa !9
  store i64 %1336, ptr %154, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %155) #5
  %1337 = load ptr, ptr %33, align 8, !tbaa !5
  %1338 = load i32, ptr %35, align 4, !tbaa !11
  %1339 = mul i32 4, %1338
  %1340 = zext i32 %1339 to i64
  %1341 = getelementptr inbounds i64, ptr %1337, i64 %1340
  %1342 = getelementptr inbounds i64, ptr %1341, i64 3
  store ptr %1342, ptr %155, align 8, !tbaa !5
  %1343 = load i64, ptr %34, align 8, !tbaa !9
  %1344 = load i64, ptr %154, align 8, !tbaa !9
  %1345 = load ptr, ptr %155, align 8, !tbaa !5
  %1346 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %1343, i64 noundef %1344, i64 noundef 0, ptr noundef %1345)
  store i64 %1346, ptr %34, align 8, !tbaa !9
  %1347 = load i32, ptr %35, align 4, !tbaa !11
  %1348 = add i32 %1347, 1
  store i32 %1348, ptr %35, align 4, !tbaa !11
  %1349 = load i32, ptr %35, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %155) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %154) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %153) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %152) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %151) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %150) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %149) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %148) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #5
  br label %1350

1350:                                             ; preds = %314
  br label %1351

1351:                                             ; preds = %1350
  br label %1352

1352:                                             ; preds = %1351
  call void @llvm.lifetime.start.p0(i64 4, ptr %156) #5
  store i32 60, ptr %156, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %157) #5
  %1353 = load ptr, ptr %32, align 8, !tbaa !5
  %1354 = load i32, ptr %156, align 4, !tbaa !11
  %1355 = zext i32 %1354 to i64
  %1356 = getelementptr inbounds i64, ptr %1353, i64 %1355
  %1357 = load i64, ptr %1356, align 8, !tbaa !9
  store i64 %1357, ptr %157, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %158) #5
  %1358 = load ptr, ptr %33, align 8, !tbaa !5
  %1359 = load i32, ptr %156, align 4, !tbaa !11
  %1360 = zext i32 %1359 to i64
  %1361 = getelementptr inbounds i64, ptr %1358, i64 %1360
  store ptr %1361, ptr %158, align 8, !tbaa !5
  %1362 = load i64, ptr %34, align 8, !tbaa !9
  %1363 = load i64, ptr %157, align 8, !tbaa !9
  %1364 = load ptr, ptr %158, align 8, !tbaa !5
  %1365 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %1362, i64 noundef %1363, i64 noundef 0, ptr noundef %1364)
  store i64 %1365, ptr %34, align 8, !tbaa !9
  %1366 = load i32, ptr %156, align 4, !tbaa !11
  %1367 = add i32 %1366, 1
  store i32 %1367, ptr %156, align 4, !tbaa !11
  %1368 = load i32, ptr %156, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %158) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %157) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %159) #5
  %1369 = load ptr, ptr %32, align 8, !tbaa !5
  %1370 = load i32, ptr %156, align 4, !tbaa !11
  %1371 = zext i32 %1370 to i64
  %1372 = getelementptr inbounds i64, ptr %1369, i64 %1371
  %1373 = load i64, ptr %1372, align 8, !tbaa !9
  store i64 %1373, ptr %159, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %160) #5
  %1374 = load ptr, ptr %33, align 8, !tbaa !5
  %1375 = load i32, ptr %156, align 4, !tbaa !11
  %1376 = zext i32 %1375 to i64
  %1377 = getelementptr inbounds i64, ptr %1374, i64 %1376
  store ptr %1377, ptr %160, align 8, !tbaa !5
  %1378 = load i64, ptr %34, align 8, !tbaa !9
  %1379 = load i64, ptr %159, align 8, !tbaa !9
  %1380 = load ptr, ptr %160, align 8, !tbaa !5
  %1381 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %1378, i64 noundef %1379, i64 noundef 0, ptr noundef %1380)
  store i64 %1381, ptr %34, align 8, !tbaa !9
  %1382 = load i32, ptr %156, align 4, !tbaa !11
  %1383 = add i32 %1382, 1
  store i32 %1383, ptr %156, align 4, !tbaa !11
  %1384 = load i32, ptr %156, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %160) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %159) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %161) #5
  %1385 = load ptr, ptr %32, align 8, !tbaa !5
  %1386 = load i32, ptr %156, align 4, !tbaa !11
  %1387 = zext i32 %1386 to i64
  %1388 = getelementptr inbounds i64, ptr %1385, i64 %1387
  %1389 = load i64, ptr %1388, align 8, !tbaa !9
  store i64 %1389, ptr %161, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %162) #5
  %1390 = load ptr, ptr %33, align 8, !tbaa !5
  %1391 = load i32, ptr %156, align 4, !tbaa !11
  %1392 = zext i32 %1391 to i64
  %1393 = getelementptr inbounds i64, ptr %1390, i64 %1392
  store ptr %1393, ptr %162, align 8, !tbaa !5
  %1394 = load i64, ptr %34, align 8, !tbaa !9
  %1395 = load i64, ptr %161, align 8, !tbaa !9
  %1396 = load ptr, ptr %162, align 8, !tbaa !5
  %1397 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %1394, i64 noundef %1395, i64 noundef 0, ptr noundef %1396)
  store i64 %1397, ptr %34, align 8, !tbaa !9
  %1398 = load i32, ptr %156, align 4, !tbaa !11
  %1399 = add i32 %1398, 1
  store i32 %1399, ptr %156, align 4, !tbaa !11
  %1400 = load i32, ptr %156, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %162) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %161) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %156) #5
  br label %1401

1401:                                             ; preds = %1352
  br label %1402

1402:                                             ; preds = %1401
  call void @llvm.lifetime.start.p0(i64 8, ptr %163) #5
  %1403 = load i64, ptr %34, align 8, !tbaa !9
  store i64 %1403, ptr %163, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %164) #5
  %1404 = load i64, ptr %163, align 8, !tbaa !9
  store i64 %1404, ptr %164, align 8, !tbaa !9
  %1405 = load i64, ptr %164, align 8, !tbaa !9
  %1406 = load i32, ptr %29, align 4, !tbaa !11
  %1407 = load ptr, ptr %4, align 8, !tbaa !5
  %1408 = load ptr, ptr %5, align 8, !tbaa !5
  %1409 = getelementptr inbounds [64 x i64], ptr %30, i64 0, i64 0
  %1410 = load ptr, ptr %6, align 8, !tbaa !5
  call void @exp_vartime(i32 noundef %1406, ptr noundef %1407, ptr noundef %1408, i32 noundef 4096, ptr noundef %1409, ptr noundef %1410)
  call void @llvm.lifetime.end.p0(i64 8, ptr %164) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %163) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 512, ptr %30) #5
  br label %1413

1411:                                             ; preds = %289
  %1412 = load ptr, ptr %6, align 8, !tbaa !5
  call void @llvm.memset.p0.i64(ptr align 8 %1412, i8 0, i64 512, i1 false)
  br label %1413

1413:                                             ; preds = %1411, %1402
  %1414 = load i64, ptr %28, align 8, !tbaa !9
  %1415 = icmp eq i64 %1414, -1
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 512, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #5
  call void @llvm.lifetime.end.p0(i64 512, ptr %7) #5
  ret i1 %1415
}

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

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

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


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef, i64 noundef, i64 noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #2

; Function Attrs: noinline nounwind uwtable
declare hidden i64 @FStar_UInt64_eq_mask(i64 noundef, i64 noundef) local_unnamed_addr #3

; Function Attrs: noinline nounwind uwtable
declare hidden i64 @FStar_UInt64_gte_mask(i64 noundef, i64 noundef) local_unnamed_addr #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden i64 @Hacl_Bignum_Lib_bn_get_top_index_u64(i32 noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @exp_vartime(i32 noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
define dso_local noundef zeroext i1 @Hacl_Bignum4096_mod_inv_prime_vartime(ptr noundef %0, ptr noundef %1, ptr noundef %2) local_unnamed_addr #4 {
  %4 = alloca [64 x i64], align 16
  %5 = alloca [64 x i64], align 16
  %6 = alloca [64 x i64], align 16
  call void @llvm.lifetime.start.p0(i64 512, ptr nonnull %4) #5
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(512) %4, i8 0, i64 512, i1 false)
  store i64 1, ptr %4, align 16, !tbaa !5
  %7 = load i64, ptr %0, align 8, !tbaa !5
  br label %11

8:                                                ; preds = %11
  %9 = and i64 %7, 1
  %10 = icmp eq i64 %9, 0
  call void @llvm.lifetime.start.p0(i64 512, ptr nonnull %5) #5
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(512) %5, i8 0, i64 512, i1 false)
  br label %22

11:                                               ; preds = %3, %11
  %indvars.iv = phi i64 [ 0, %3 ], [ %indvars.iv.next, %11 ]
  %.0544 = phi i64 [ 0, %3 ], [ %21, %11 ]
  %12 = getelementptr inbounds [64 x i64], ptr %4, i64 0, i64 %indvars.iv
  %13 = load i64, ptr %12, align 8, !tbaa !5
  %14 = getelementptr inbounds i64, ptr %0, i64 %indvars.iv
  %15 = load i64, ptr %14, align 8, !tbaa !5
  %16 = tail call i64 @FStar_UInt64_eq_mask(i64 noundef %13, i64 noundef %15)
  %17 = load i64, ptr %14, align 8, !tbaa !5
  %18 = tail call i64 @FStar_UInt64_gte_mask(i64 noundef %13, i64 noundef %17)
  %19 = and i64 %16, %.0544
  %.demorgan542 = or i64 %18, %16
  %20 = xor i64 %.demorgan542, -1
  %21 = or i64 %19, %20
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, 64
  br i1 %exitcond.not, label %8, label %11, !llvm.loop !9

22:                                               ; preds = %8, %22
  %indvars.iv552 = phi i64 [ 0, %8 ], [ %indvars.iv.next553, %22 ]
  %.0538546 = phi i64 [ -1, %8 ], [ %28, %22 ]
  %23 = getelementptr inbounds i64, ptr %1, i64 %indvars.iv552
  %24 = load i64, ptr %23, align 8, !tbaa !5
  %25 = getelementptr inbounds [64 x i64], ptr %5, i64 0, i64 %indvars.iv552
  %26 = load i64, ptr %25, align 8, !tbaa !5
  %27 = tail call i64 @FStar_UInt64_eq_mask(i64 noundef %24, i64 noundef %26)
  %28 = and i64 %27, %.0538546
  %indvars.iv.next553 = add nuw nsw i64 %indvars.iv552, 1
  %exitcond555.not = icmp eq i64 %indvars.iv.next553, 64
  br i1 %exitcond555.not, label %.preheader, label %22, !llvm.loop !11

29:                                               ; preds = %.preheader
  %30 = select i1 %10, i64 0, i64 %21
  %31 = xor i64 %28, -1
  %32 = and i64 %30, %31
  %33 = and i64 %32, %46
  %34 = tail call i64 @Hacl_Bignum_Lib_bn_get_top_index_u64(i32 noundef 64, ptr noundef nonnull %0)
  %35 = icmp eq i64 %33, -1
  br i1 %35, label %47, label %304

.preheader:                                       ; preds = %22, %.preheader
  %indvars.iv556 = phi i64 [ %indvars.iv.next557, %.preheader ], [ 0, %22 ]
  %.0540548 = phi i64 [ %46, %.preheader ], [ 0, %22 ]
  %36 = getelementptr inbounds i64, ptr %1, i64 %indvars.iv556
  %37 = load i64, ptr %36, align 8, !tbaa !5
  %38 = getelementptr inbounds i64, ptr %0, i64 %indvars.iv556
  %39 = load i64, ptr %38, align 8, !tbaa !5
  %40 = tail call i64 @FStar_UInt64_eq_mask(i64 noundef %37, i64 noundef %39)
  %41 = load i64, ptr %36, align 8, !tbaa !5
  %42 = load i64, ptr %38, align 8, !tbaa !5
  %43 = tail call i64 @FStar_UInt64_gte_mask(i64 noundef %41, i64 noundef %42)
  %44 = and i64 %40, %.0540548
  %.demorgan = or i64 %43, %40
  %45 = xor i64 %.demorgan, -1
  %46 = or i64 %44, %45
  %indvars.iv.next557 = add nuw nsw i64 %indvars.iv556, 1
  %exitcond559.not = icmp eq i64 %indvars.iv.next557, 64
  br i1 %exitcond559.not, label %29, label %.preheader, !llvm.loop !12

47:                                               ; preds = %29
  %48 = trunc i64 %34 to i32
  %49 = shl i32 %48, 6
  call void @llvm.lifetime.start.p0(i64 512, ptr nonnull %6) #5
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(512) %6, i8 0, i64 512, i1 false)
  %50 = load i64, ptr %0, align 8, !tbaa !5
  %51 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef 0, i64 noundef %50, i64 noundef 2, ptr noundef nonnull %6)
  %52 = getelementptr inbounds i8, ptr %0, i64 8
  %53 = getelementptr inbounds i8, ptr %6, i64 8
  %54 = load i64, ptr %52, align 8, !tbaa !5
  %55 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %51, i64 noundef %54, i64 noundef 0, ptr noundef nonnull %53)
  %56 = getelementptr inbounds i8, ptr %0, i64 16
  %57 = load i64, ptr %56, align 8, !tbaa !5
  %58 = getelementptr inbounds i8, ptr %6, i64 16
  %59 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %55, i64 noundef %57, i64 noundef 0, ptr noundef nonnull %58)
  %60 = getelementptr inbounds i8, ptr %0, i64 24
  %61 = load i64, ptr %60, align 8, !tbaa !5
  %62 = getelementptr inbounds i8, ptr %6, i64 24
  %63 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %59, i64 noundef %61, i64 noundef 0, ptr noundef nonnull %62)
  %64 = getelementptr inbounds i8, ptr %0, i64 32
  %65 = load i64, ptr %64, align 8, !tbaa !5
  %66 = getelementptr inbounds i8, ptr %6, i64 32
  %67 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %63, i64 noundef %65, i64 noundef 0, ptr noundef nonnull %66)
  %68 = getelementptr inbounds i8, ptr %0, i64 40
  %69 = load i64, ptr %68, align 8, !tbaa !5
  %70 = getelementptr inbounds i8, ptr %6, i64 40
  %71 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %67, i64 noundef %69, i64 noundef 0, ptr noundef nonnull %70)
  %72 = getelementptr inbounds i8, ptr %0, i64 48
  %73 = load i64, ptr %72, align 8, !tbaa !5
  %74 = getelementptr inbounds i8, ptr %6, i64 48
  %75 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %71, i64 noundef %73, i64 noundef 0, ptr noundef nonnull %74)
  %76 = getelementptr inbounds i8, ptr %0, i64 56
  %77 = load i64, ptr %76, align 8, !tbaa !5
  %78 = getelementptr inbounds i8, ptr %6, i64 56
  %79 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %75, i64 noundef %77, i64 noundef 0, ptr noundef nonnull %78)
  %80 = getelementptr inbounds i8, ptr %0, i64 64
  %81 = load i64, ptr %80, align 8, !tbaa !5
  %82 = getelementptr inbounds i8, ptr %6, i64 64
  %83 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %79, i64 noundef %81, i64 noundef 0, ptr noundef nonnull %82)
  %84 = getelementptr inbounds i8, ptr %0, i64 72
  %85 = load i64, ptr %84, align 8, !tbaa !5
  %86 = getelementptr inbounds i8, ptr %6, i64 72
  %87 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %83, i64 noundef %85, i64 noundef 0, ptr noundef nonnull %86)
  %88 = getelementptr inbounds i8, ptr %0, i64 80
  %89 = load i64, ptr %88, align 8, !tbaa !5
  %90 = getelementptr inbounds i8, ptr %6, i64 80
  %91 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %87, i64 noundef %89, i64 noundef 0, ptr noundef nonnull %90)
  %92 = getelementptr inbounds i8, ptr %0, i64 88
  %93 = load i64, ptr %92, align 8, !tbaa !5
  %94 = getelementptr inbounds i8, ptr %6, i64 88
  %95 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %91, i64 noundef %93, i64 noundef 0, ptr noundef nonnull %94)
  %96 = getelementptr inbounds i8, ptr %0, i64 96
  %97 = load i64, ptr %96, align 8, !tbaa !5
  %98 = getelementptr inbounds i8, ptr %6, i64 96
  %99 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %95, i64 noundef %97, i64 noundef 0, ptr noundef nonnull %98)
  %100 = getelementptr inbounds i8, ptr %0, i64 104
  %101 = load i64, ptr %100, align 8, !tbaa !5
  %102 = getelementptr inbounds i8, ptr %6, i64 104
  %103 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %99, i64 noundef %101, i64 noundef 0, ptr noundef nonnull %102)
  %104 = getelementptr inbounds i8, ptr %0, i64 112
  %105 = load i64, ptr %104, align 8, !tbaa !5
  %106 = getelementptr inbounds i8, ptr %6, i64 112
  %107 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %103, i64 noundef %105, i64 noundef 0, ptr noundef nonnull %106)
  %108 = getelementptr inbounds i8, ptr %0, i64 120
  %109 = load i64, ptr %108, align 8, !tbaa !5
  %110 = getelementptr inbounds i8, ptr %6, i64 120
  %111 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %107, i64 noundef %109, i64 noundef 0, ptr noundef nonnull %110)
  %112 = getelementptr inbounds i8, ptr %0, i64 128
  %113 = load i64, ptr %112, align 8, !tbaa !5
  %114 = getelementptr inbounds i8, ptr %6, i64 128
  %115 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %111, i64 noundef %113, i64 noundef 0, ptr noundef nonnull %114)
  %116 = getelementptr inbounds i8, ptr %0, i64 136
  %117 = load i64, ptr %116, align 8, !tbaa !5
  %118 = getelementptr inbounds i8, ptr %6, i64 136
  %119 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %115, i64 noundef %117, i64 noundef 0, ptr noundef nonnull %118)
  %120 = getelementptr inbounds i8, ptr %0, i64 144
  %121 = load i64, ptr %120, align 8, !tbaa !5
  %122 = getelementptr inbounds i8, ptr %6, i64 144
  %123 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %119, i64 noundef %121, i64 noundef 0, ptr noundef nonnull %122)
  %124 = getelementptr inbounds i8, ptr %0, i64 152
  %125 = load i64, ptr %124, align 8, !tbaa !5
  %126 = getelementptr inbounds i8, ptr %6, i64 152
  %127 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %123, i64 noundef %125, i64 noundef 0, ptr noundef nonnull %126)
  %128 = getelementptr inbounds i8, ptr %0, i64 160
  %129 = load i64, ptr %128, align 8, !tbaa !5
  %130 = getelementptr inbounds i8, ptr %6, i64 160
  %131 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %127, i64 noundef %129, i64 noundef 0, ptr noundef nonnull %130)
  %132 = getelementptr inbounds i8, ptr %0, i64 168
  %133 = load i64, ptr %132, align 8, !tbaa !5
  %134 = getelementptr inbounds i8, ptr %6, i64 168
  %135 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %131, i64 noundef %133, i64 noundef 0, ptr noundef nonnull %134)
  %136 = getelementptr inbounds i8, ptr %0, i64 176
  %137 = load i64, ptr %136, align 8, !tbaa !5
  %138 = getelementptr inbounds i8, ptr %6, i64 176
  %139 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %135, i64 noundef %137, i64 noundef 0, ptr noundef nonnull %138)
  %140 = getelementptr inbounds i8, ptr %0, i64 184
  %141 = load i64, ptr %140, align 8, !tbaa !5
  %142 = getelementptr inbounds i8, ptr %6, i64 184
  %143 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %139, i64 noundef %141, i64 noundef 0, ptr noundef nonnull %142)
  %144 = getelementptr inbounds i8, ptr %0, i64 192
  %145 = load i64, ptr %144, align 8, !tbaa !5
  %146 = getelementptr inbounds i8, ptr %6, i64 192
  %147 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %143, i64 noundef %145, i64 noundef 0, ptr noundef nonnull %146)
  %148 = getelementptr inbounds i8, ptr %0, i64 200
  %149 = load i64, ptr %148, align 8, !tbaa !5
  %150 = getelementptr inbounds i8, ptr %6, i64 200
  %151 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %147, i64 noundef %149, i64 noundef 0, ptr noundef nonnull %150)
  %152 = getelementptr inbounds i8, ptr %0, i64 208
  %153 = load i64, ptr %152, align 8, !tbaa !5
  %154 = getelementptr inbounds i8, ptr %6, i64 208
  %155 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %151, i64 noundef %153, i64 noundef 0, ptr noundef nonnull %154)
  %156 = getelementptr inbounds i8, ptr %0, i64 216
  %157 = load i64, ptr %156, align 8, !tbaa !5
  %158 = getelementptr inbounds i8, ptr %6, i64 216
  %159 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %155, i64 noundef %157, i64 noundef 0, ptr noundef nonnull %158)
  %160 = getelementptr inbounds i8, ptr %0, i64 224
  %161 = load i64, ptr %160, align 8, !tbaa !5
  %162 = getelementptr inbounds i8, ptr %6, i64 224
  %163 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %159, i64 noundef %161, i64 noundef 0, ptr noundef nonnull %162)
  %164 = getelementptr inbounds i8, ptr %0, i64 232
  %165 = load i64, ptr %164, align 8, !tbaa !5
  %166 = getelementptr inbounds i8, ptr %6, i64 232
  %167 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %163, i64 noundef %165, i64 noundef 0, ptr noundef nonnull %166)
  %168 = getelementptr inbounds i8, ptr %0, i64 240
  %169 = load i64, ptr %168, align 8, !tbaa !5
  %170 = getelementptr inbounds i8, ptr %6, i64 240
  %171 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %167, i64 noundef %169, i64 noundef 0, ptr noundef nonnull %170)
  %172 = getelementptr inbounds i8, ptr %0, i64 248
  %173 = load i64, ptr %172, align 8, !tbaa !5
  %174 = getelementptr inbounds i8, ptr %6, i64 248
  %175 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %171, i64 noundef %173, i64 noundef 0, ptr noundef nonnull %174)
  %176 = getelementptr inbounds i8, ptr %0, i64 256
  %177 = load i64, ptr %176, align 8, !tbaa !5
  %178 = getelementptr inbounds i8, ptr %6, i64 256
  %179 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %175, i64 noundef %177, i64 noundef 0, ptr noundef nonnull %178)
  %180 = getelementptr inbounds i8, ptr %0, i64 264
  %181 = load i64, ptr %180, align 8, !tbaa !5
  %182 = getelementptr inbounds i8, ptr %6, i64 264
  %183 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %179, i64 noundef %181, i64 noundef 0, ptr noundef nonnull %182)
  %184 = getelementptr inbounds i8, ptr %0, i64 272
  %185 = load i64, ptr %184, align 8, !tbaa !5
  %186 = getelementptr inbounds i8, ptr %6, i64 272
  %187 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %183, i64 noundef %185, i64 noundef 0, ptr noundef nonnull %186)
  %188 = getelementptr inbounds i8, ptr %0, i64 280
  %189 = load i64, ptr %188, align 8, !tbaa !5
  %190 = getelementptr inbounds i8, ptr %6, i64 280
  %191 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %187, i64 noundef %189, i64 noundef 0, ptr noundef nonnull %190)
  %192 = getelementptr inbounds i8, ptr %0, i64 288
  %193 = load i64, ptr %192, align 8, !tbaa !5
  %194 = getelementptr inbounds i8, ptr %6, i64 288
  %195 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %191, i64 noundef %193, i64 noundef 0, ptr noundef nonnull %194)
  %196 = getelementptr inbounds i8, ptr %0, i64 296
  %197 = load i64, ptr %196, align 8, !tbaa !5
  %198 = getelementptr inbounds i8, ptr %6, i64 296
  %199 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %195, i64 noundef %197, i64 noundef 0, ptr noundef nonnull %198)
  %200 = getelementptr inbounds i8, ptr %0, i64 304
  %201 = load i64, ptr %200, align 8, !tbaa !5
  %202 = getelementptr inbounds i8, ptr %6, i64 304
  %203 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %199, i64 noundef %201, i64 noundef 0, ptr noundef nonnull %202)
  %204 = getelementptr inbounds i8, ptr %0, i64 312
  %205 = load i64, ptr %204, align 8, !tbaa !5
  %206 = getelementptr inbounds i8, ptr %6, i64 312
  %207 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %203, i64 noundef %205, i64 noundef 0, ptr noundef nonnull %206)
  %208 = getelementptr inbounds i8, ptr %0, i64 320
  %209 = load i64, ptr %208, align 8, !tbaa !5
  %210 = getelementptr inbounds i8, ptr %6, i64 320
  %211 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %207, i64 noundef %209, i64 noundef 0, ptr noundef nonnull %210)
  %212 = getelementptr inbounds i8, ptr %0, i64 328
  %213 = load i64, ptr %212, align 8, !tbaa !5
  %214 = getelementptr inbounds i8, ptr %6, i64 328
  %215 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %211, i64 noundef %213, i64 noundef 0, ptr noundef nonnull %214)
  %216 = getelementptr inbounds i8, ptr %0, i64 336
  %217 = load i64, ptr %216, align 8, !tbaa !5
  %218 = getelementptr inbounds i8, ptr %6, i64 336
  %219 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %215, i64 noundef %217, i64 noundef 0, ptr noundef nonnull %218)
  %220 = getelementptr inbounds i8, ptr %0, i64 344
  %221 = load i64, ptr %220, align 8, !tbaa !5
  %222 = getelementptr inbounds i8, ptr %6, i64 344
  %223 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %219, i64 noundef %221, i64 noundef 0, ptr noundef nonnull %222)
  %224 = getelementptr inbounds i8, ptr %0, i64 352
  %225 = load i64, ptr %224, align 8, !tbaa !5
  %226 = getelementptr inbounds i8, ptr %6, i64 352
  %227 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %223, i64 noundef %225, i64 noundef 0, ptr noundef nonnull %226)
  %228 = getelementptr inbounds i8, ptr %0, i64 360
  %229 = load i64, ptr %228, align 8, !tbaa !5
  %230 = getelementptr inbounds i8, ptr %6, i64 360
  %231 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %227, i64 noundef %229, i64 noundef 0, ptr noundef nonnull %230)
  %232 = getelementptr inbounds i8, ptr %0, i64 368
  %233 = load i64, ptr %232, align 8, !tbaa !5
  %234 = getelementptr inbounds i8, ptr %6, i64 368
  %235 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %231, i64 noundef %233, i64 noundef 0, ptr noundef nonnull %234)
  %236 = getelementptr inbounds i8, ptr %0, i64 376
  %237 = load i64, ptr %236, align 8, !tbaa !5
  %238 = getelementptr inbounds i8, ptr %6, i64 376
  %239 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %235, i64 noundef %237, i64 noundef 0, ptr noundef nonnull %238)
  %240 = getelementptr inbounds i8, ptr %0, i64 384
  %241 = load i64, ptr %240, align 8, !tbaa !5
  %242 = getelementptr inbounds i8, ptr %6, i64 384
  %243 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %239, i64 noundef %241, i64 noundef 0, ptr noundef nonnull %242)
  %244 = getelementptr inbounds i8, ptr %0, i64 392
  %245 = load i64, ptr %244, align 8, !tbaa !5
  %246 = getelementptr inbounds i8, ptr %6, i64 392
  %247 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %243, i64 noundef %245, i64 noundef 0, ptr noundef nonnull %246)
  %248 = getelementptr inbounds i8, ptr %0, i64 400
  %249 = load i64, ptr %248, align 8, !tbaa !5
  %250 = getelementptr inbounds i8, ptr %6, i64 400
  %251 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %247, i64 noundef %249, i64 noundef 0, ptr noundef nonnull %250)
  %252 = getelementptr inbounds i8, ptr %0, i64 408
  %253 = load i64, ptr %252, align 8, !tbaa !5
  %254 = getelementptr inbounds i8, ptr %6, i64 408
  %255 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %251, i64 noundef %253, i64 noundef 0, ptr noundef nonnull %254)
  %256 = getelementptr inbounds i8, ptr %0, i64 416
  %257 = load i64, ptr %256, align 8, !tbaa !5
  %258 = getelementptr inbounds i8, ptr %6, i64 416
  %259 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %255, i64 noundef %257, i64 noundef 0, ptr noundef nonnull %258)
  %260 = getelementptr inbounds i8, ptr %0, i64 424
  %261 = load i64, ptr %260, align 8, !tbaa !5
  %262 = getelementptr inbounds i8, ptr %6, i64 424
  %263 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %259, i64 noundef %261, i64 noundef 0, ptr noundef nonnull %262)
  %264 = getelementptr inbounds i8, ptr %0, i64 432
  %265 = load i64, ptr %264, align 8, !tbaa !5
  %266 = getelementptr inbounds i8, ptr %6, i64 432
  %267 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %263, i64 noundef %265, i64 noundef 0, ptr noundef nonnull %266)
  %268 = getelementptr inbounds i8, ptr %0, i64 440
  %269 = load i64, ptr %268, align 8, !tbaa !5
  %270 = getelementptr inbounds i8, ptr %6, i64 440
  %271 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %267, i64 noundef %269, i64 noundef 0, ptr noundef nonnull %270)
  %272 = getelementptr inbounds i8, ptr %0, i64 448
  %273 = load i64, ptr %272, align 8, !tbaa !5
  %274 = getelementptr inbounds i8, ptr %6, i64 448
  %275 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %271, i64 noundef %273, i64 noundef 0, ptr noundef nonnull %274)
  %276 = getelementptr inbounds i8, ptr %0, i64 456
  %277 = load i64, ptr %276, align 8, !tbaa !5
  %278 = getelementptr inbounds i8, ptr %6, i64 456
  %279 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %275, i64 noundef %277, i64 noundef 0, ptr noundef nonnull %278)
  %280 = getelementptr inbounds i8, ptr %0, i64 464
  %281 = load i64, ptr %280, align 8, !tbaa !5
  %282 = getelementptr inbounds i8, ptr %6, i64 464
  %283 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %279, i64 noundef %281, i64 noundef 0, ptr noundef nonnull %282)
  %284 = getelementptr inbounds i8, ptr %0, i64 472
  %285 = load i64, ptr %284, align 8, !tbaa !5
  %286 = getelementptr inbounds i8, ptr %6, i64 472
  %287 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %283, i64 noundef %285, i64 noundef 0, ptr noundef nonnull %286)
  %288 = getelementptr inbounds i8, ptr %0, i64 480
  %289 = load i64, ptr %288, align 8, !tbaa !5
  %290 = getelementptr inbounds i8, ptr %6, i64 480
  %291 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %287, i64 noundef %289, i64 noundef 0, ptr noundef nonnull %290)
  %292 = getelementptr inbounds i8, ptr %0, i64 488
  %293 = load i64, ptr %292, align 8, !tbaa !5
  %294 = getelementptr inbounds i8, ptr %6, i64 488
  %295 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %291, i64 noundef %293, i64 noundef 0, ptr noundef nonnull %294)
  %296 = getelementptr inbounds i8, ptr %0, i64 496
  %297 = load i64, ptr %296, align 8, !tbaa !5
  %298 = getelementptr inbounds i8, ptr %6, i64 496
  %299 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %295, i64 noundef %297, i64 noundef 0, ptr noundef nonnull %298)
  %300 = getelementptr inbounds i8, ptr %0, i64 504
  %301 = load i64, ptr %300, align 8, !tbaa !5
  %302 = getelementptr inbounds i8, ptr %6, i64 504
  %303 = call i64 @Hacl_IntTypes_Intrinsics_sub_borrow_u64(i64 noundef %299, i64 noundef %301, i64 noundef 0, ptr noundef nonnull %302)
  call void @exp_vartime(i32 noundef %49, ptr noundef nonnull %0, ptr noundef nonnull %1, i32 noundef 4096, ptr noundef nonnull %6, ptr noundef %2)
  call void @llvm.lifetime.end.p0(i64 512, ptr nonnull %6) #5
  br label %305

304:                                              ; preds = %29
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(512) %2, i8 0, i64 512, i1 false)
  br label %305

305:                                              ; preds = %304, %47
  call void @llvm.lifetime.end.p0(i64 512, ptr nonnull %5) #5
  call void @llvm.lifetime.end.p0(i64 512, ptr nonnull %4) #5
  ret i1 %35
}

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

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

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


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