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

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

%struct.Hacl_HMAC_DRBG_state_s = type { ptr, ptr, ptr }

@Hacl_HMAC_DRBG_reseed_interval = external dso_local global i32, align 4
@stderr = external global ptr, align 8
@.str = external hidden unnamed_addr constant [35 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [81 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [70 x i8], align 1

; Function Attrs: nounwind
declare i32 @fprintf(ptr noundef, ptr noundef, ...) #0

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) #1

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

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

declare i32 @printf(ptr noundef, ...) #3

; Function Attrs: nocallback nofree nosync nounwind willreturn
declare ptr @llvm.stacksave.p0() #4

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #6

declare void @Hacl_HMAC_compute_sha1(ptr noundef, ptr noundef, i32 noundef, ptr noundef, i32 noundef) #3

; Function Attrs: nocallback nofree nosync nounwind willreturn
declare void @llvm.stackrestore.p0(ptr) #4

declare void @Hacl_HMAC_compute_sha2_256(ptr noundef, ptr noundef, i32 noundef, ptr noundef, i32 noundef) #3

declare void @Hacl_HMAC_compute_sha2_384(ptr noundef, ptr noundef, i32 noundef, ptr noundef, i32 noundef) #3

declare void @Hacl_HMAC_compute_sha2_512(ptr noundef, ptr noundef, i32 noundef, ptr noundef, i32 noundef) #3

; Function Attrs: nounwind uwtable
define dso_local zeroext i1 @Hacl_HMAC_DRBG_generate(i8 noundef zeroext %0, ptr noundef %1, ptr noundef byval(%struct.Hacl_HMAC_DRBG_state_s) align 8 %2, i32 noundef %3, i32 noundef %4, ptr noundef %5) #7 {
  %7 = alloca i1, align 1
  %8 = alloca i8, align 1
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca i32, align 4
  %17 = alloca ptr, align 8
  %18 = alloca i64, align 8
  %19 = alloca ptr, align 8
  %20 = alloca i32, align 4
  %21 = alloca ptr, align 8
  %22 = alloca i64, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca i32, align 4
  %26 = alloca ptr, align 8
  %27 = alloca i32, align 4
  %28 = alloca ptr, align 8
  %29 = alloca i32, align 4
  %30 = alloca ptr, align 8
  %31 = alloca i64, align 8
  %32 = alloca ptr, align 8
  %33 = alloca i32, align 4
  %34 = alloca ptr, align 8
  %35 = alloca i64, align 8
  %36 = alloca ptr, align 8
  %37 = alloca i32, align 4
  %38 = alloca ptr, align 8
  %39 = alloca ptr, align 8
  %40 = alloca ptr, align 8
  %41 = alloca i32, align 4
  %42 = alloca ptr, align 8
  %43 = alloca i64, align 8
  %44 = alloca ptr, align 8
  %45 = alloca i32, align 4
  %46 = alloca ptr, align 8
  %47 = alloca i64, align 8
  %48 = alloca ptr, align 8
  %49 = alloca ptr, align 8
  %50 = alloca i32, align 4
  %51 = alloca ptr, align 8
  %52 = alloca i32, align 4
  %53 = alloca ptr, align 8
  %54 = alloca i32, align 4
  %55 = alloca ptr, align 8
  %56 = alloca i64, align 8
  %57 = alloca ptr, align 8
  %58 = alloca i32, align 4
  %59 = alloca ptr, align 8
  %60 = alloca i64, align 8
  %61 = alloca ptr, align 8
  %62 = alloca i32, align 4
  %63 = alloca ptr, align 8
  %64 = alloca ptr, align 8
  %65 = alloca ptr, align 8
  %66 = alloca i32, align 4
  %67 = alloca ptr, align 8
  %68 = alloca i64, align 8
  %69 = alloca ptr, align 8
  %70 = alloca i32, align 4
  %71 = alloca ptr, align 8
  %72 = alloca i64, align 8
  %73 = alloca ptr, align 8
  %74 = alloca ptr, align 8
  %75 = alloca i32, align 4
  %76 = alloca ptr, align 8
  %77 = alloca i32, align 4
  %78 = alloca ptr, align 8
  %79 = alloca i32, align 4
  %80 = alloca ptr, align 8
  %81 = alloca i64, align 8
  %82 = alloca ptr, align 8
  %83 = alloca i32, align 4
  %84 = alloca ptr, align 8
  %85 = alloca i64, align 8
  %86 = alloca ptr, align 8
  %87 = alloca i32, align 4
  %88 = alloca ptr, align 8
  %89 = alloca ptr, align 8
  %90 = alloca ptr, align 8
  %91 = alloca i32, align 4
  %92 = alloca ptr, align 8
  %93 = alloca i64, align 8
  %94 = alloca ptr, align 8
  %95 = alloca i32, align 4
  %96 = alloca ptr, align 8
  %97 = alloca i64, align 8
  %98 = alloca ptr, align 8
  %99 = alloca ptr, align 8
  %100 = alloca i32, align 4
  %101 = alloca ptr, align 8
  %102 = alloca i32, align 4
  %103 = alloca ptr, align 8
  %104 = alloca i32, align 4
  %105 = alloca ptr, align 8
  %106 = alloca i64, align 8
  %107 = alloca ptr, align 8
  %108 = alloca i32, align 4
  %109 = alloca ptr, align 8
  %110 = alloca i64, align 8
  %111 = alloca ptr, align 8
  %112 = alloca i32, align 4
  store i8 %0, ptr %8, align 1, !tbaa !5
  store ptr %1, ptr %9, align 8, !tbaa !8
  store i32 %3, ptr %10, align 4, !tbaa !10
  store i32 %4, ptr %11, align 4, !tbaa !10
  store ptr %5, ptr %12, align 8, !tbaa !8
  %113 = load i8, ptr %8, align 1, !tbaa !5
  %114 = zext i8 %113 to i32
  switch i32 %114, label %1055 [
    i32 4, label %115
    i32 1, label %350
    i32 2, label %585
    i32 3, label %820
  ]

115:                                              ; preds = %6
  %116 = getelementptr inbounds %struct.Hacl_HMAC_DRBG_state_s, ptr %2, i32 0, i32 2
  %117 = load ptr, ptr %116, align 8, !tbaa !12
  %118 = getelementptr inbounds i32, ptr %117, i64 0
  %119 = load i32, ptr %118, align 4, !tbaa !10
  %120 = load i32, ptr @Hacl_HMAC_DRBG_reseed_interval, align 4, !tbaa !10
  %121 = icmp ugt i32 %119, %120
  br i1 %121, label %122, label %123

122:                                              ; preds = %115
  store i1 false, ptr %7, align 1
  br label %1058

123:                                              ; preds = %115
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #8
  %124 = getelementptr inbounds %struct.Hacl_HMAC_DRBG_state_s, ptr %2, i32 0, i32 0
  %125 = load ptr, ptr %124, align 8, !tbaa !14
  store ptr %125, ptr %13, align 8, !tbaa !8
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #8
  %126 = getelementptr inbounds %struct.Hacl_HMAC_DRBG_state_s, ptr %2, i32 0, i32 1
  %127 = load ptr, ptr %126, align 8, !tbaa !15
  store ptr %127, ptr %14, align 8, !tbaa !8
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #8
  %128 = getelementptr inbounds %struct.Hacl_HMAC_DRBG_state_s, ptr %2, i32 0, i32 2
  %129 = load ptr, ptr %128, align 8, !tbaa !12
  store ptr %129, ptr %15, align 8, !tbaa !8
  %130 = load i32, ptr %11, align 4, !tbaa !10
  %131 = icmp ugt i32 %130, 0
  br i1 %131, label %132, label %215

132:                                              ; preds = %123
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #8
  %133 = load i32, ptr %11, align 4, !tbaa !10
  %134 = add i32 21, %133
  store i32 %134, ptr %16, align 4, !tbaa !10
  br label %135

135:                                              ; preds = %132
  %136 = load i32, ptr %16, align 4, !tbaa !10
  %137 = zext i32 %136 to i64
  %138 = icmp ugt i64 %137, -1
  br i1 %138, label %139, label %141

139:                                              ; preds = %135
  %140 = call i32 (ptr, ...) @printf(ptr noundef @.str.2, ptr noundef @.str.1, i32 noundef 691)
  call void @exit(i32 noundef 253) #9
  unreachable

141:                                              ; preds = %135
  br label %142

142:                                              ; preds = %141
  br label %143

143:                                              ; preds = %142
  %144 = load i32, ptr %16, align 4, !tbaa !10
  %145 = zext i32 %144 to i64
  %146 = call ptr @llvm.stacksave.p0()
  store ptr %146, ptr %17, align 8
  %147 = alloca i8, i64 %145, align 16
  store i64 %145, ptr %18, align 8
  %148 = load i32, ptr %16, align 4, !tbaa !10
  %149 = zext i32 %148 to i64
  %150 = mul i64 %149, 1
  call void @llvm.memset.p0.i64(ptr align 16 %147, i8 0, i64 %150, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #8
  store ptr %147, ptr %19, align 8, !tbaa !8
  %151 = load ptr, ptr %19, align 8, !tbaa !8
  %152 = load ptr, ptr %14, align 8, !tbaa !8
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %151, ptr align 1 %152, i64 20, i1 false)
  %153 = load i32, ptr %11, align 4, !tbaa !10
  %154 = icmp ne i32 %153, 0
  br i1 %154, label %155, label %161

155:                                              ; preds = %143
  %156 = getelementptr inbounds i8, ptr %147, i64 21
  %157 = load ptr, ptr %12, align 8, !tbaa !8
  %158 = load i32, ptr %11, align 4, !tbaa !10
  %159 = zext i32 %158 to i64
  %160 = mul i64 %159, 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %156, ptr align 1 %157, i64 %160, i1 false)
  br label %161

161:                                              ; preds = %155, %143
  %162 = getelementptr inbounds i8, ptr %147, i64 20
  store i8 0, ptr %162, align 4, !tbaa !5
  %163 = load ptr, ptr %19, align 8, !tbaa !8
  %164 = load ptr, ptr %13, align 8, !tbaa !8
  %165 = load i32, ptr %16, align 4, !tbaa !10
  call void @Hacl_HMAC_compute_sha1(ptr noundef %163, ptr noundef %164, i32 noundef 20, ptr noundef %147, i32 noundef %165)
  %166 = load ptr, ptr %14, align 8, !tbaa !8
  %167 = load ptr, ptr %19, align 8, !tbaa !8
  %168 = load ptr, ptr %14, align 8, !tbaa !8
  call void @Hacl_HMAC_compute_sha1(ptr noundef %166, ptr noundef %167, i32 noundef 20, ptr noundef %168, i32 noundef 20)
  %169 = load ptr, ptr %13, align 8, !tbaa !8
  %170 = load ptr, ptr %19, align 8, !tbaa !8
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %169, ptr align 1 %170, i64 20, i1 false)
  %171 = load i32, ptr %11, align 4, !tbaa !10
  %172 = icmp ne i32 %171, 0
  br i1 %172, label %173, label %213

173:                                              ; preds = %161
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #8
  %174 = load i32, ptr %11, align 4, !tbaa !10
  %175 = add i32 21, %174
  store i32 %175, ptr %20, align 4, !tbaa !10
  br label %176

176:                                              ; preds = %173
  %177 = load i32, ptr %20, align 4, !tbaa !10
  %178 = zext i32 %177 to i64
  %179 = icmp ugt i64 %178, -1
  br i1 %179, label %180, label %182

180:                                              ; preds = %176
  %181 = call i32 (ptr, ...) @printf(ptr noundef @.str.2, ptr noundef @.str.1, i32 noundef 707)
  call void @exit(i32 noundef 253) #9
  unreachable

182:                                              ; preds = %176
  br label %183

183:                                              ; preds = %182
  br label %184

184:                                              ; preds = %183
  %185 = load i32, ptr %20, align 4, !tbaa !10
  %186 = zext i32 %185 to i64
  %187 = call ptr @llvm.stacksave.p0()
  store ptr %187, ptr %21, align 8
  %188 = alloca i8, i64 %186, align 16
  store i64 %186, ptr %22, align 8
  %189 = load i32, ptr %20, align 4, !tbaa !10
  %190 = zext i32 %189 to i64
  %191 = mul i64 %190, 1
  call void @llvm.memset.p0.i64(ptr align 16 %188, i8 0, i64 %191, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #8
  store ptr %188, ptr %23, align 8, !tbaa !8
  %192 = load ptr, ptr %23, align 8, !tbaa !8
  %193 = load ptr, ptr %14, align 8, !tbaa !8
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %192, ptr align 1 %193, i64 20, i1 false)
  %194 = load i32, ptr %11, align 4, !tbaa !10
  %195 = icmp ne i32 %194, 0
  br i1 %195, label %196, label %202

196:                                              ; preds = %184
  %197 = getelementptr inbounds i8, ptr %188, i64 21
  %198 = load ptr, ptr %12, align 8, !tbaa !8
  %199 = load i32, ptr %11, align 4, !tbaa !10
  %200 = zext i32 %199 to i64
  %201 = mul i64 %200, 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %197, ptr align 1 %198, i64 %201, i1 false)
  br label %202

202:                                              ; preds = %196, %184
  %203 = getelementptr inbounds i8, ptr %188, i64 20
  store i8 1, ptr %203, align 4, !tbaa !5
  %204 = load ptr, ptr %23, align 8, !tbaa !8
  %205 = load ptr, ptr %13, align 8, !tbaa !8
  %206 = load i32, ptr %20, align 4, !tbaa !10
  call void @Hacl_HMAC_compute_sha1(ptr noundef %204, ptr noundef %205, i32 noundef 20, ptr noundef %188, i32 noundef %206)
  %207 = load ptr, ptr %14, align 8, !tbaa !8
  %208 = load ptr, ptr %23, align 8, !tbaa !8
  %209 = load ptr, ptr %14, align 8, !tbaa !8
  call void @Hacl_HMAC_compute_sha1(ptr noundef %207, ptr noundef %208, i32 noundef 20, ptr noundef %209, i32 noundef 20)
  %210 = load ptr, ptr %13, align 8, !tbaa !8
  %211 = load ptr, ptr %23, align 8, !tbaa !8
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %210, ptr align 1 %211, i64 20, i1 false)
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  %212 = load ptr, ptr %21, align 8
  call void @llvm.stackrestore.p0(ptr %212)
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #8
  br label %213

213:                                              ; preds = %202, %161
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  %214 = load ptr, ptr %17, align 8
  call void @llvm.stackrestore.p0(ptr %214)
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #8
  br label %215

215:                                              ; preds = %213, %123
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #8
  %216 = load ptr, ptr %9, align 8, !tbaa !8
  store ptr %216, ptr %24, align 8, !tbaa !8
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #8
  %217 = load i32, ptr %10, align 4, !tbaa !10
  %218 = udiv i32 %217, 20
  store i32 %218, ptr %25, align 4, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #8
  %219 = load ptr, ptr %24, align 8, !tbaa !8
  store ptr %219, ptr %26, align 8, !tbaa !8
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #8
  store i32 0, ptr %27, align 4, !tbaa !10
  br label %220

220:                                              ; preds = %235, %215
  %221 = load i32, ptr %27, align 4, !tbaa !10
  %222 = load i32, ptr %25, align 4, !tbaa !10
  %223 = icmp ult i32 %221, %222
  br i1 %223, label %225, label %224

224:                                              ; preds = %220
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #8
  br label %238

225:                                              ; preds = %220
  %226 = load ptr, ptr %14, align 8, !tbaa !8
  %227 = load ptr, ptr %13, align 8, !tbaa !8
  %228 = load ptr, ptr %14, align 8, !tbaa !8
  call void @Hacl_HMAC_compute_sha1(ptr noundef %226, ptr noundef %227, i32 noundef 20, ptr noundef %228, i32 noundef 20)
  %229 = load ptr, ptr %26, align 8, !tbaa !8
  %230 = load i32, ptr %27, align 4, !tbaa !10
  %231 = mul i32 %230, 20
  %232 = zext i32 %231 to i64
  %233 = getelementptr inbounds i8, ptr %229, i64 %232
  %234 = load ptr, ptr %14, align 8, !tbaa !8
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %233, ptr align 1 %234, i64 20, i1 false)
  br label %235

235:                                              ; preds = %225
  %236 = load i32, ptr %27, align 4, !tbaa !10
  %237 = add i32 %236, 1
  store i32 %237, ptr %27, align 4, !tbaa !10
  br label %220, !llvm.loop !16

238:                                              ; preds = %224
  %239 = load i32, ptr %25, align 4, !tbaa !10
  %240 = mul i32 %239, 20
  %241 = load i32, ptr %10, align 4, !tbaa !10
  %242 = icmp ult i32 %240, %241
  br i1 %242, label %243, label %260

243:                                              ; preds = %238
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #8
  %244 = load ptr, ptr %24, align 8, !tbaa !8
  %245 = load i32, ptr %25, align 4, !tbaa !10
  %246 = mul i32 %245, 20
  %247 = zext i32 %246 to i64
  %248 = getelementptr inbounds i8, ptr %244, i64 %247
  store ptr %248, ptr %28, align 8, !tbaa !8
  %249 = load ptr, ptr %14, align 8, !tbaa !8
  %250 = load ptr, ptr %13, align 8, !tbaa !8
  %251 = load ptr, ptr %14, align 8, !tbaa !8
  call void @Hacl_HMAC_compute_sha1(ptr noundef %249, ptr noundef %250, i32 noundef 20, ptr noundef %251, i32 noundef 20)
  %252 = load ptr, ptr %28, align 8, !tbaa !8
  %253 = load ptr, ptr %14, align 8, !tbaa !8
  %254 = load i32, ptr %10, align 4, !tbaa !10
  %255 = load i32, ptr %25, align 4, !tbaa !10
  %256 = mul i32 %255, 20
  %257 = sub i32 %254, %256
  %258 = zext i32 %257 to i64
  %259 = mul i64 %258, 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %252, ptr align 1 %253, i64 %259, i1 false)
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  br label %260

260:                                              ; preds = %243, %238
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #8
  %261 = load i32, ptr %11, align 4, !tbaa !10
  %262 = add i32 21, %261
  store i32 %262, ptr %29, align 4, !tbaa !10
  br label %263

263:                                              ; preds = %260
  %264 = load i32, ptr %29, align 4, !tbaa !10
  %265 = zext i32 %264 to i64
  %266 = icmp ugt i64 %265, -1
  br i1 %266, label %267, label %269

267:                                              ; preds = %263
  %268 = call i32 (ptr, ...) @printf(ptr noundef @.str.2, ptr noundef @.str.1, i32 noundef 737)
  call void @exit(i32 noundef 253) #9
  unreachable

269:                                              ; preds = %263
  br label %270

270:                                              ; preds = %269
  br label %271

271:                                              ; preds = %270
  %272 = load i32, ptr %29, align 4, !tbaa !10
  %273 = zext i32 %272 to i64
  %274 = call ptr @llvm.stacksave.p0()
  store ptr %274, ptr %30, align 8
  %275 = alloca i8, i64 %273, align 16
  store i64 %273, ptr %31, align 8
  %276 = load i32, ptr %29, align 4, !tbaa !10
  %277 = zext i32 %276 to i64
  %278 = mul i64 %277, 1
  call void @llvm.memset.p0.i64(ptr align 16 %275, i8 0, i64 %278, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #8
  store ptr %275, ptr %32, align 8, !tbaa !8
  %279 = load ptr, ptr %32, align 8, !tbaa !8
  %280 = load ptr, ptr %14, align 8, !tbaa !8
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %279, ptr align 1 %280, i64 20, i1 false)
  %281 = load i32, ptr %11, align 4, !tbaa !10
  %282 = icmp ne i32 %281, 0
  br i1 %282, label %283, label %289

283:                                              ; preds = %271
  %284 = getelementptr inbounds i8, ptr %275, i64 21
  %285 = load ptr, ptr %12, align 8, !tbaa !8
  %286 = load i32, ptr %11, align 4, !tbaa !10
  %287 = zext i32 %286 to i64
  %288 = mul i64 %287, 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %284, ptr align 1 %285, i64 %288, i1 false)
  br label %289

289:                                              ; preds = %283, %271
  %290 = getelementptr inbounds i8, ptr %275, i64 20
  store i8 0, ptr %290, align 4, !tbaa !5
  %291 = load ptr, ptr %32, align 8, !tbaa !8
  %292 = load ptr, ptr %13, align 8, !tbaa !8
  %293 = load i32, ptr %29, align 4, !tbaa !10
  call void @Hacl_HMAC_compute_sha1(ptr noundef %291, ptr noundef %292, i32 noundef 20, ptr noundef %275, i32 noundef %293)
  %294 = load ptr, ptr %14, align 8, !tbaa !8
  %295 = load ptr, ptr %32, align 8, !tbaa !8
  %296 = load ptr, ptr %14, align 8, !tbaa !8
  call void @Hacl_HMAC_compute_sha1(ptr noundef %294, ptr noundef %295, i32 noundef 20, ptr noundef %296, i32 noundef 20)
  %297 = load ptr, ptr %13, align 8, !tbaa !8
  %298 = load ptr, ptr %32, align 8, !tbaa !8
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %297, ptr align 1 %298, i64 20, i1 false)
  %299 = load i32, ptr %11, align 4, !tbaa !10
  %300 = icmp ne i32 %299, 0
  br i1 %300, label %301, label %341

301:                                              ; preds = %289
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #8
  %302 = load i32, ptr %11, align 4, !tbaa !10
  %303 = add i32 21, %302
  store i32 %303, ptr %33, align 4, !tbaa !10
  br label %304

304:                                              ; preds = %301
  %305 = load i32, ptr %33, align 4, !tbaa !10
  %306 = zext i32 %305 to i64
  %307 = icmp ugt i64 %306, -1
  br i1 %307, label %308, label %310

308:                                              ; preds = %304
  %309 = call i32 (ptr, ...) @printf(ptr noundef @.str.2, ptr noundef @.str.1, i32 noundef 753)
  call void @exit(i32 noundef 253) #9
  unreachable

310:                                              ; preds = %304
  br label %311

311:                                              ; preds = %310
  br label %312

312:                                              ; preds = %311
  %313 = load i32, ptr %33, align 4, !tbaa !10
  %314 = zext i32 %313 to i64
  %315 = call ptr @llvm.stacksave.p0()
  store ptr %315, ptr %34, align 8
  %316 = alloca i8, i64 %314, align 16
  store i64 %314, ptr %35, align 8
  %317 = load i32, ptr %33, align 4, !tbaa !10
  %318 = zext i32 %317 to i64
  %319 = mul i64 %318, 1
  call void @llvm.memset.p0.i64(ptr align 16 %316, i8 0, i64 %319, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #8
  store ptr %316, ptr %36, align 8, !tbaa !8
  %320 = load ptr, ptr %36, align 8, !tbaa !8
  %321 = load ptr, ptr %14, align 8, !tbaa !8
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %320, ptr align 1 %321, i64 20, i1 false)
  %322 = load i32, ptr %11, align 4, !tbaa !10
  %323 = icmp ne i32 %322, 0
  br i1 %323, label %324, label %330

324:                                              ; preds = %312
  %325 = getelementptr inbounds i8, ptr %316, i64 21
  %326 = load ptr, ptr %12, align 8, !tbaa !8
  %327 = load i32, ptr %11, align 4, !tbaa !10
  %328 = zext i32 %327 to i64
  %329 = mul i64 %328, 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %325, ptr align 1 %326, i64 %329, i1 false)
  br label %330

330:                                              ; preds = %324, %312
  %331 = getelementptr inbounds i8, ptr %316, i64 20
  store i8 1, ptr %331, align 4, !tbaa !5
  %332 = load ptr, ptr %36, align 8, !tbaa !8
  %333 = load ptr, ptr %13, align 8, !tbaa !8
  %334 = load i32, ptr %33, align 4, !tbaa !10
  call void @Hacl_HMAC_compute_sha1(ptr noundef %332, ptr noundef %333, i32 noundef 20, ptr noundef %316, i32 noundef %334)
  %335 = load ptr, ptr %14, align 8, !tbaa !8
  %336 = load ptr, ptr %36, align 8, !tbaa !8
  %337 = load ptr, ptr %14, align 8, !tbaa !8
  call void @Hacl_HMAC_compute_sha1(ptr noundef %335, ptr noundef %336, i32 noundef 20, ptr noundef %337, i32 noundef 20)
  %338 = load ptr, ptr %13, align 8, !tbaa !8
  %339 = load ptr, ptr %36, align 8, !tbaa !8
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %338, ptr align 1 %339, i64 20, i1 false)
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #8
  %340 = load ptr, ptr %34, align 8
  call void @llvm.stackrestore.p0(ptr %340)
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #8
  br label %341

341:                                              ; preds = %330, %289
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #8
  %342 = load ptr, ptr %15, align 8, !tbaa !8
  %343 = getelementptr inbounds i32, ptr %342, i64 0
  %344 = load i32, ptr %343, align 4, !tbaa !10
  store i32 %344, ptr %37, align 4, !tbaa !10
  %345 = load i32, ptr %37, align 4, !tbaa !10
  %346 = add i32 %345, 1
  %347 = load ptr, ptr %15, align 8, !tbaa !8
  %348 = getelementptr inbounds i32, ptr %347, i64 0
  store i32 %346, ptr %348, align 4, !tbaa !10
  store i1 true, ptr %7, align 1
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #8
  %349 = load ptr, ptr %30, align 8
  call void @llvm.stackrestore.p0(ptr %349)
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #8
  br label %1058

350:                                              ; preds = %6
  %351 = getelementptr inbounds %struct.Hacl_HMAC_DRBG_state_s, ptr %2, i32 0, i32 2
  %352 = load ptr, ptr %351, align 8, !tbaa !12
  %353 = getelementptr inbounds i32, ptr %352, i64 0
  %354 = load i32, ptr %353, align 4, !tbaa !10
  %355 = load i32, ptr @Hacl_HMAC_DRBG_reseed_interval, align 4, !tbaa !10
  %356 = icmp ugt i32 %354, %355
  br i1 %356, label %357, label %358

357:                                              ; preds = %350
  store i1 false, ptr %7, align 1
  br label %1058

358:                                              ; preds = %350
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #8
  %359 = getelementptr inbounds %struct.Hacl_HMAC_DRBG_state_s, ptr %2, i32 0, i32 0
  %360 = load ptr, ptr %359, align 8, !tbaa !14
  store ptr %360, ptr %38, align 8, !tbaa !8
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #8
  %361 = getelementptr inbounds %struct.Hacl_HMAC_DRBG_state_s, ptr %2, i32 0, i32 1
  %362 = load ptr, ptr %361, align 8, !tbaa !15
  store ptr %362, ptr %39, align 8, !tbaa !8
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #8
  %363 = getelementptr inbounds %struct.Hacl_HMAC_DRBG_state_s, ptr %2, i32 0, i32 2
  %364 = load ptr, ptr %363, align 8, !tbaa !12
  store ptr %364, ptr %40, align 8, !tbaa !8
  %365 = load i32, ptr %11, align 4, !tbaa !10
  %366 = icmp ugt i32 %365, 0
  br i1 %366, label %367, label %450

367:                                              ; preds = %358
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #8
  %368 = load i32, ptr %11, align 4, !tbaa !10
  %369 = add i32 33, %368
  store i32 %369, ptr %41, align 4, !tbaa !10
  br label %370

370:                                              ; preds = %367
  %371 = load i32, ptr %41, align 4, !tbaa !10
  %372 = zext i32 %371 to i64
  %373 = icmp ugt i64 %372, -1
  br i1 %373, label %374, label %376

374:                                              ; preds = %370
  %375 = call i32 (ptr, ...) @printf(ptr noundef @.str.2, ptr noundef @.str.1, i32 noundef 783)
  call void @exit(i32 noundef 253) #9
  unreachable

376:                                              ; preds = %370
  br label %377

377:                                              ; preds = %376
  br label %378

378:                                              ; preds = %377
  %379 = load i32, ptr %41, align 4, !tbaa !10
  %380 = zext i32 %379 to i64
  %381 = call ptr @llvm.stacksave.p0()
  store ptr %381, ptr %42, align 8
  %382 = alloca i8, i64 %380, align 16
  store i64 %380, ptr %43, align 8
  %383 = load i32, ptr %41, align 4, !tbaa !10
  %384 = zext i32 %383 to i64
  %385 = mul i64 %384, 1
  call void @llvm.memset.p0.i64(ptr align 16 %382, i8 0, i64 %385, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #8
  store ptr %382, ptr %44, align 8, !tbaa !8
  %386 = load ptr, ptr %44, align 8, !tbaa !8
  %387 = load ptr, ptr %39, align 8, !tbaa !8
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %386, ptr align 1 %387, i64 32, i1 false)
  %388 = load i32, ptr %11, align 4, !tbaa !10
  %389 = icmp ne i32 %388, 0
  br i1 %389, label %390, label %396

390:                                              ; preds = %378
  %391 = getelementptr inbounds i8, ptr %382, i64 33
  %392 = load ptr, ptr %12, align 8, !tbaa !8
  %393 = load i32, ptr %11, align 4, !tbaa !10
  %394 = zext i32 %393 to i64
  %395 = mul i64 %394, 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %391, ptr align 1 %392, i64 %395, i1 false)
  br label %396

396:                                              ; preds = %390, %378
  %397 = getelementptr inbounds i8, ptr %382, i64 32
  store i8 0, ptr %397, align 16, !tbaa !5
  %398 = load ptr, ptr %44, align 8, !tbaa !8
  %399 = load ptr, ptr %38, align 8, !tbaa !8
  %400 = load i32, ptr %41, align 4, !tbaa !10
  call void @Hacl_HMAC_compute_sha2_256(ptr noundef %398, ptr noundef %399, i32 noundef 32, ptr noundef %382, i32 noundef %400)
  %401 = load ptr, ptr %39, align 8, !tbaa !8
  %402 = load ptr, ptr %44, align 8, !tbaa !8
  %403 = load ptr, ptr %39, align 8, !tbaa !8
  call void @Hacl_HMAC_compute_sha2_256(ptr noundef %401, ptr noundef %402, i32 noundef 32, ptr noundef %403, i32 noundef 32)
  %404 = load ptr, ptr %38, align 8, !tbaa !8
  %405 = load ptr, ptr %44, align 8, !tbaa !8
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %404, ptr align 1 %405, i64 32, i1 false)
  %406 = load i32, ptr %11, align 4, !tbaa !10
  %407 = icmp ne i32 %406, 0
  br i1 %407, label %408, label %448

408:                                              ; preds = %396
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #8
  %409 = load i32, ptr %11, align 4, !tbaa !10
  %410 = add i32 33, %409
  store i32 %410, ptr %45, align 4, !tbaa !10
  br label %411

411:                                              ; preds = %408
  %412 = load i32, ptr %45, align 4, !tbaa !10
  %413 = zext i32 %412 to i64
  %414 = icmp ugt i64 %413, -1
  br i1 %414, label %415, label %417

415:                                              ; preds = %411
  %416 = call i32 (ptr, ...) @printf(ptr noundef @.str.2, ptr noundef @.str.1, i32 noundef 799)
  call void @exit(i32 noundef 253) #9
  unreachable

417:                                              ; preds = %411
  br label %418

418:                                              ; preds = %417
  br label %419

419:                                              ; preds = %418
  %420 = load i32, ptr %45, align 4, !tbaa !10
  %421 = zext i32 %420 to i64
  %422 = call ptr @llvm.stacksave.p0()
  store ptr %422, ptr %46, align 8
  %423 = alloca i8, i64 %421, align 16
  store i64 %421, ptr %47, align 8
  %424 = load i32, ptr %45, align 4, !tbaa !10
  %425 = zext i32 %424 to i64
  %426 = mul i64 %425, 1
  call void @llvm.memset.p0.i64(ptr align 16 %423, i8 0, i64 %426, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #8
  store ptr %423, ptr %48, align 8, !tbaa !8
  %427 = load ptr, ptr %48, align 8, !tbaa !8
  %428 = load ptr, ptr %39, align 8, !tbaa !8
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %427, ptr align 1 %428, i64 32, i1 false)
  %429 = load i32, ptr %11, align 4, !tbaa !10
  %430 = icmp ne i32 %429, 0
  br i1 %430, label %431, label %437

431:                                              ; preds = %419
  %432 = getelementptr inbounds i8, ptr %423, i64 33
  %433 = load ptr, ptr %12, align 8, !tbaa !8
  %434 = load i32, ptr %11, align 4, !tbaa !10
  %435 = zext i32 %434 to i64
  %436 = mul i64 %435, 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %432, ptr align 1 %433, i64 %436, i1 false)
  br label %437

437:                                              ; preds = %431, %419
  %438 = getelementptr inbounds i8, ptr %423, i64 32
  store i8 1, ptr %438, align 16, !tbaa !5
  %439 = load ptr, ptr %48, align 8, !tbaa !8
  %440 = load ptr, ptr %38, align 8, !tbaa !8
  %441 = load i32, ptr %45, align 4, !tbaa !10
  call void @Hacl_HMAC_compute_sha2_256(ptr noundef %439, ptr noundef %440, i32 noundef 32, ptr noundef %423, i32 noundef %441)
  %442 = load ptr, ptr %39, align 8, !tbaa !8
  %443 = load ptr, ptr %48, align 8, !tbaa !8
  %444 = load ptr, ptr %39, align 8, !tbaa !8
  call void @Hacl_HMAC_compute_sha2_256(ptr noundef %442, ptr noundef %443, i32 noundef 32, ptr noundef %444, i32 noundef 32)
  %445 = load ptr, ptr %38, align 8, !tbaa !8
  %446 = load ptr, ptr %48, align 8, !tbaa !8
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %445, ptr align 1 %446, i64 32, i1 false)
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #8
  %447 = load ptr, ptr %46, align 8
  call void @llvm.stackrestore.p0(ptr %447)
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #8
  br label %448

448:                                              ; preds = %437, %396
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #8
  %449 = load ptr, ptr %42, align 8
  call void @llvm.stackrestore.p0(ptr %449)
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #8
  br label %450

450:                                              ; preds = %448, %358
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #8
  %451 = load ptr, ptr %9, align 8, !tbaa !8
  store ptr %451, ptr %49, align 8, !tbaa !8
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #8
  %452 = load i32, ptr %10, align 4, !tbaa !10
  %453 = udiv i32 %452, 32
  store i32 %453, ptr %50, align 4, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #8
  %454 = load ptr, ptr %49, align 8, !tbaa !8
  store ptr %454, ptr %51, align 8, !tbaa !8
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #8
  store i32 0, ptr %52, align 4, !tbaa !10
  br label %455

455:                                              ; preds = %470, %450
  %456 = load i32, ptr %52, align 4, !tbaa !10
  %457 = load i32, ptr %50, align 4, !tbaa !10
  %458 = icmp ult i32 %456, %457
  br i1 %458, label %460, label %459

459:                                              ; preds = %455
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #8
  br label %473

460:                                              ; preds = %455
  %461 = load ptr, ptr %39, align 8, !tbaa !8
  %462 = load ptr, ptr %38, align 8, !tbaa !8
  %463 = load ptr, ptr %39, align 8, !tbaa !8
  call void @Hacl_HMAC_compute_sha2_256(ptr noundef %461, ptr noundef %462, i32 noundef 32, ptr noundef %463, i32 noundef 32)
  %464 = load ptr, ptr %51, align 8, !tbaa !8
  %465 = load i32, ptr %52, align 4, !tbaa !10
  %466 = mul i32 %465, 32
  %467 = zext i32 %466 to i64
  %468 = getelementptr inbounds i8, ptr %464, i64 %467
  %469 = load ptr, ptr %39, align 8, !tbaa !8
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %468, ptr align 1 %469, i64 32, i1 false)
  br label %470

470:                                              ; preds = %460
  %471 = load i32, ptr %52, align 4, !tbaa !10
  %472 = add i32 %471, 1
  store i32 %472, ptr %52, align 4, !tbaa !10
  br label %455, !llvm.loop !18

473:                                              ; preds = %459
  %474 = load i32, ptr %50, align 4, !tbaa !10
  %475 = mul i32 %474, 32
  %476 = load i32, ptr %10, align 4, !tbaa !10
  %477 = icmp ult i32 %475, %476
  br i1 %477, label %478, label %495

478:                                              ; preds = %473
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #8
  %479 = load ptr, ptr %49, align 8, !tbaa !8
  %480 = load i32, ptr %50, align 4, !tbaa !10
  %481 = mul i32 %480, 32
  %482 = zext i32 %481 to i64
  %483 = getelementptr inbounds i8, ptr %479, i64 %482
  store ptr %483, ptr %53, align 8, !tbaa !8
  %484 = load ptr, ptr %39, align 8, !tbaa !8
  %485 = load ptr, ptr %38, align 8, !tbaa !8
  %486 = load ptr, ptr %39, align 8, !tbaa !8
  call void @Hacl_HMAC_compute_sha2_256(ptr noundef %484, ptr noundef %485, i32 noundef 32, ptr noundef %486, i32 noundef 32)
  %487 = load ptr, ptr %53, align 8, !tbaa !8
  %488 = load ptr, ptr %39, align 8, !tbaa !8
  %489 = load i32, ptr %10, align 4, !tbaa !10
  %490 = load i32, ptr %50, align 4, !tbaa !10
  %491 = mul i32 %490, 32
  %492 = sub i32 %489, %491
  %493 = zext i32 %492 to i64
  %494 = mul i64 %493, 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %487, ptr align 1 %488, i64 %494, i1 false)
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #8
  br label %495

495:                                              ; preds = %478, %473
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #8
  %496 = load i32, ptr %11, align 4, !tbaa !10
  %497 = add i32 33, %496
  store i32 %497, ptr %54, align 4, !tbaa !10
  br label %498

498:                                              ; preds = %495
  %499 = load i32, ptr %54, align 4, !tbaa !10
  %500 = zext i32 %499 to i64
  %501 = icmp ugt i64 %500, -1
  br i1 %501, label %502, label %504

502:                                              ; preds = %498
  %503 = call i32 (ptr, ...) @printf(ptr noundef @.str.2, ptr noundef @.str.1, i32 noundef 829)
  call void @exit(i32 noundef 253) #9
  unreachable

504:                                              ; preds = %498
  br label %505

505:                                              ; preds = %504
  br label %506

506:                                              ; preds = %505
  %507 = load i32, ptr %54, align 4, !tbaa !10
  %508 = zext i32 %507 to i64
  %509 = call ptr @llvm.stacksave.p0()
  store ptr %509, ptr %55, align 8
  %510 = alloca i8, i64 %508, align 16
  store i64 %508, ptr %56, align 8
  %511 = load i32, ptr %54, align 4, !tbaa !10
  %512 = zext i32 %511 to i64
  %513 = mul i64 %512, 1
  call void @llvm.memset.p0.i64(ptr align 16 %510, i8 0, i64 %513, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #8
  store ptr %510, ptr %57, align 8, !tbaa !8
  %514 = load ptr, ptr %57, align 8, !tbaa !8
  %515 = load ptr, ptr %39, align 8, !tbaa !8
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %514, ptr align 1 %515, i64 32, i1 false)
  %516 = load i32, ptr %11, align 4, !tbaa !10
  %517 = icmp ne i32 %516, 0
  br i1 %517, label %518, label %524

518:                                              ; preds = %506
  %519 = getelementptr inbounds i8, ptr %510, i64 33
  %520 = load ptr, ptr %12, align 8, !tbaa !8
  %521 = load i32, ptr %11, align 4, !tbaa !10
  %522 = zext i32 %521 to i64
  %523 = mul i64 %522, 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %519, ptr align 1 %520, i64 %523, i1 false)
  br label %524

524:                                              ; preds = %518, %506
  %525 = getelementptr inbounds i8, ptr %510, i64 32
  store i8 0, ptr %525, align 16, !tbaa !5
  %526 = load ptr, ptr %57, align 8, !tbaa !8
  %527 = load ptr, ptr %38, align 8, !tbaa !8
  %528 = load i32, ptr %54, align 4, !tbaa !10
  call void @Hacl_HMAC_compute_sha2_256(ptr noundef %526, ptr noundef %527, i32 noundef 32, ptr noundef %510, i32 noundef %528)
  %529 = load ptr, ptr %39, align 8, !tbaa !8
  %530 = load ptr, ptr %57, align 8, !tbaa !8
  %531 = load ptr, ptr %39, align 8, !tbaa !8
  call void @Hacl_HMAC_compute_sha2_256(ptr noundef %529, ptr noundef %530, i32 noundef 32, ptr noundef %531, i32 noundef 32)
  %532 = load ptr, ptr %38, align 8, !tbaa !8
  %533 = load ptr, ptr %57, align 8, !tbaa !8
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %532, ptr align 1 %533, i64 32, i1 false)
  %534 = load i32, ptr %11, align 4, !tbaa !10
  %535 = icmp ne i32 %534, 0
  br i1 %535, label %536, label %576

536:                                              ; preds = %524
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #8
  %537 = load i32, ptr %11, align 4, !tbaa !10
  %538 = add i32 33, %537
  store i32 %538, ptr %58, align 4, !tbaa !10
  br label %539

539:                                              ; preds = %536
  %540 = load i32, ptr %58, align 4, !tbaa !10
  %541 = zext i32 %540 to i64
  %542 = icmp ugt i64 %541, -1
  br i1 %542, label %543, label %545

543:                                              ; preds = %539
  %544 = call i32 (ptr, ...) @printf(ptr noundef @.str.2, ptr noundef @.str.1, i32 noundef 845)
  call void @exit(i32 noundef 253) #9
  unreachable

545:                                              ; preds = %539
  br label %546

546:                                              ; preds = %545
  br label %547

547:                                              ; preds = %546
  %548 = load i32, ptr %58, align 4, !tbaa !10
  %549 = zext i32 %548 to i64
  %550 = call ptr @llvm.stacksave.p0()
  store ptr %550, ptr %59, align 8
  %551 = alloca i8, i64 %549, align 16
  store i64 %549, ptr %60, align 8
  %552 = load i32, ptr %58, align 4, !tbaa !10
  %553 = zext i32 %552 to i64
  %554 = mul i64 %553, 1
  call void @llvm.memset.p0.i64(ptr align 16 %551, i8 0, i64 %554, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #8
  store ptr %551, ptr %61, align 8, !tbaa !8
  %555 = load ptr, ptr %61, align 8, !tbaa !8
  %556 = load ptr, ptr %39, align 8, !tbaa !8
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %555, ptr align 1 %556, i64 32, i1 false)
  %557 = load i32, ptr %11, align 4, !tbaa !10
  %558 = icmp ne i32 %557, 0
  br i1 %558, label %559, label %565

559:                                              ; preds = %547
  %560 = getelementptr inbounds i8, ptr %551, i64 33
  %561 = load ptr, ptr %12, align 8, !tbaa !8
  %562 = load i32, ptr %11, align 4, !tbaa !10
  %563 = zext i32 %562 to i64
  %564 = mul i64 %563, 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %560, ptr align 1 %561, i64 %564, i1 false)
  br label %565

565:                                              ; preds = %559, %547
  %566 = getelementptr inbounds i8, ptr %551, i64 32
  store i8 1, ptr %566, align 16, !tbaa !5
  %567 = load ptr, ptr %61, align 8, !tbaa !8
  %568 = load ptr, ptr %38, align 8, !tbaa !8
  %569 = load i32, ptr %58, align 4, !tbaa !10
  call void @Hacl_HMAC_compute_sha2_256(ptr noundef %567, ptr noundef %568, i32 noundef 32, ptr noundef %551, i32 noundef %569)
  %570 = load ptr, ptr %39, align 8, !tbaa !8
  %571 = load ptr, ptr %61, align 8, !tbaa !8
  %572 = load ptr, ptr %39, align 8, !tbaa !8
  call void @Hacl_HMAC_compute_sha2_256(ptr noundef %570, ptr noundef %571, i32 noundef 32, ptr noundef %572, i32 noundef 32)
  %573 = load ptr, ptr %38, align 8, !tbaa !8
  %574 = load ptr, ptr %61, align 8, !tbaa !8
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %573, ptr align 1 %574, i64 32, i1 false)
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #8
  %575 = load ptr, ptr %59, align 8
  call void @llvm.stackrestore.p0(ptr %575)
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #8
  br label %576

576:                                              ; preds = %565, %524
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #8
  %577 = load ptr, ptr %40, align 8, !tbaa !8
  %578 = getelementptr inbounds i32, ptr %577, i64 0
  %579 = load i32, ptr %578, align 4, !tbaa !10
  store i32 %579, ptr %62, align 4, !tbaa !10
  %580 = load i32, ptr %62, align 4, !tbaa !10
  %581 = add i32 %580, 1
  %582 = load ptr, ptr %40, align 8, !tbaa !8
  %583 = getelementptr inbounds i32, ptr %582, i64 0
  store i32 %581, ptr %583, align 4, !tbaa !10
  store i1 true, ptr %7, align 1
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #8
  %584 = load ptr, ptr %55, align 8
  call void @llvm.stackrestore.p0(ptr %584)
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #8
  br label %1058

585:                                              ; preds = %6
  %586 = getelementptr inbounds %struct.Hacl_HMAC_DRBG_state_s, ptr %2, i32 0, i32 2
  %587 = load ptr, ptr %586, align 8, !tbaa !12
  %588 = getelementptr inbounds i32, ptr %587, i64 0
  %589 = load i32, ptr %588, align 4, !tbaa !10
  %590 = load i32, ptr @Hacl_HMAC_DRBG_reseed_interval, align 4, !tbaa !10
  %591 = icmp ugt i32 %589, %590
  br i1 %591, label %592, label %593

592:                                              ; preds = %585
  store i1 false, ptr %7, align 1
  br label %1058

593:                                              ; preds = %585
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #8
  %594 = getelementptr inbounds %struct.Hacl_HMAC_DRBG_state_s, ptr %2, i32 0, i32 0
  %595 = load ptr, ptr %594, align 8, !tbaa !14
  store ptr %595, ptr %63, align 8, !tbaa !8
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #8
  %596 = getelementptr inbounds %struct.Hacl_HMAC_DRBG_state_s, ptr %2, i32 0, i32 1
  %597 = load ptr, ptr %596, align 8, !tbaa !15
  store ptr %597, ptr %64, align 8, !tbaa !8
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #8
  %598 = getelementptr inbounds %struct.Hacl_HMAC_DRBG_state_s, ptr %2, i32 0, i32 2
  %599 = load ptr, ptr %598, align 8, !tbaa !12
  store ptr %599, ptr %65, align 8, !tbaa !8
  %600 = load i32, ptr %11, align 4, !tbaa !10
  %601 = icmp ugt i32 %600, 0
  br i1 %601, label %602, label %685

602:                                              ; preds = %593
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #8
  %603 = load i32, ptr %11, align 4, !tbaa !10
  %604 = add i32 49, %603
  store i32 %604, ptr %66, align 4, !tbaa !10
  br label %605

605:                                              ; preds = %602
  %606 = load i32, ptr %66, align 4, !tbaa !10
  %607 = zext i32 %606 to i64
  %608 = icmp ugt i64 %607, -1
  br i1 %608, label %609, label %611

609:                                              ; preds = %605
  %610 = call i32 (ptr, ...) @printf(ptr noundef @.str.2, ptr noundef @.str.1, i32 noundef 875)
  call void @exit(i32 noundef 253) #9
  unreachable

611:                                              ; preds = %605
  br label %612

612:                                              ; preds = %611
  br label %613

613:                                              ; preds = %612
  %614 = load i32, ptr %66, align 4, !tbaa !10
  %615 = zext i32 %614 to i64
  %616 = call ptr @llvm.stacksave.p0()
  store ptr %616, ptr %67, align 8
  %617 = alloca i8, i64 %615, align 16
  store i64 %615, ptr %68, align 8
  %618 = load i32, ptr %66, align 4, !tbaa !10
  %619 = zext i32 %618 to i64
  %620 = mul i64 %619, 1
  call void @llvm.memset.p0.i64(ptr align 16 %617, i8 0, i64 %620, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #8
  store ptr %617, ptr %69, align 8, !tbaa !8
  %621 = load ptr, ptr %69, align 8, !tbaa !8
  %622 = load ptr, ptr %64, align 8, !tbaa !8
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %621, ptr align 1 %622, i64 48, i1 false)
  %623 = load i32, ptr %11, align 4, !tbaa !10
  %624 = icmp ne i32 %623, 0
  br i1 %624, label %625, label %631

625:                                              ; preds = %613
  %626 = getelementptr inbounds i8, ptr %617, i64 49
  %627 = load ptr, ptr %12, align 8, !tbaa !8
  %628 = load i32, ptr %11, align 4, !tbaa !10
  %629 = zext i32 %628 to i64
  %630 = mul i64 %629, 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %626, ptr align 1 %627, i64 %630, i1 false)
  br label %631

631:                                              ; preds = %625, %613
  %632 = getelementptr inbounds i8, ptr %617, i64 48
  store i8 0, ptr %632, align 16, !tbaa !5
  %633 = load ptr, ptr %69, align 8, !tbaa !8
  %634 = load ptr, ptr %63, align 8, !tbaa !8
  %635 = load i32, ptr %66, align 4, !tbaa !10
  call void @Hacl_HMAC_compute_sha2_384(ptr noundef %633, ptr noundef %634, i32 noundef 48, ptr noundef %617, i32 noundef %635)
  %636 = load ptr, ptr %64, align 8, !tbaa !8
  %637 = load ptr, ptr %69, align 8, !tbaa !8
  %638 = load ptr, ptr %64, align 8, !tbaa !8
  call void @Hacl_HMAC_compute_sha2_384(ptr noundef %636, ptr noundef %637, i32 noundef 48, ptr noundef %638, i32 noundef 48)
  %639 = load ptr, ptr %63, align 8, !tbaa !8
  %640 = load ptr, ptr %69, align 8, !tbaa !8
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %639, ptr align 1 %640, i64 48, i1 false)
  %641 = load i32, ptr %11, align 4, !tbaa !10
  %642 = icmp ne i32 %641, 0
  br i1 %642, label %643, label %683

643:                                              ; preds = %631
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #8
  %644 = load i32, ptr %11, align 4, !tbaa !10
  %645 = add i32 49, %644
  store i32 %645, ptr %70, align 4, !tbaa !10
  br label %646

646:                                              ; preds = %643
  %647 = load i32, ptr %70, align 4, !tbaa !10
  %648 = zext i32 %647 to i64
  %649 = icmp ugt i64 %648, -1
  br i1 %649, label %650, label %652

650:                                              ; preds = %646
  %651 = call i32 (ptr, ...) @printf(ptr noundef @.str.2, ptr noundef @.str.1, i32 noundef 891)
  call void @exit(i32 noundef 253) #9
  unreachable

652:                                              ; preds = %646
  br label %653

653:                                              ; preds = %652
  br label %654

654:                                              ; preds = %653
  %655 = load i32, ptr %70, align 4, !tbaa !10
  %656 = zext i32 %655 to i64
  %657 = call ptr @llvm.stacksave.p0()
  store ptr %657, ptr %71, align 8
  %658 = alloca i8, i64 %656, align 16
  store i64 %656, ptr %72, align 8
  %659 = load i32, ptr %70, align 4, !tbaa !10
  %660 = zext i32 %659 to i64
  %661 = mul i64 %660, 1
  call void @llvm.memset.p0.i64(ptr align 16 %658, i8 0, i64 %661, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #8
  store ptr %658, ptr %73, align 8, !tbaa !8
  %662 = load ptr, ptr %73, align 8, !tbaa !8
  %663 = load ptr, ptr %64, align 8, !tbaa !8
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %662, ptr align 1 %663, i64 48, i1 false)
  %664 = load i32, ptr %11, align 4, !tbaa !10
  %665 = icmp ne i32 %664, 0
  br i1 %665, label %666, label %672

666:                                              ; preds = %654
  %667 = getelementptr inbounds i8, ptr %658, i64 49
  %668 = load ptr, ptr %12, align 8, !tbaa !8
  %669 = load i32, ptr %11, align 4, !tbaa !10
  %670 = zext i32 %669 to i64
  %671 = mul i64 %670, 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %667, ptr align 1 %668, i64 %671, i1 false)
  br label %672

672:                                              ; preds = %666, %654
  %673 = getelementptr inbounds i8, ptr %658, i64 48
  store i8 1, ptr %673, align 16, !tbaa !5
  %674 = load ptr, ptr %73, align 8, !tbaa !8
  %675 = load ptr, ptr %63, align 8, !tbaa !8
  %676 = load i32, ptr %70, align 4, !tbaa !10
  call void @Hacl_HMAC_compute_sha2_384(ptr noundef %674, ptr noundef %675, i32 noundef 48, ptr noundef %658, i32 noundef %676)
  %677 = load ptr, ptr %64, align 8, !tbaa !8
  %678 = load ptr, ptr %73, align 8, !tbaa !8
  %679 = load ptr, ptr %64, align 8, !tbaa !8
  call void @Hacl_HMAC_compute_sha2_384(ptr noundef %677, ptr noundef %678, i32 noundef 48, ptr noundef %679, i32 noundef 48)
  %680 = load ptr, ptr %63, align 8, !tbaa !8
  %681 = load ptr, ptr %73, align 8, !tbaa !8
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %680, ptr align 1 %681, i64 48, i1 false)
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #8
  %682 = load ptr, ptr %71, align 8
  call void @llvm.stackrestore.p0(ptr %682)
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #8
  br label %683

683:                                              ; preds = %672, %631
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #8
  %684 = load ptr, ptr %67, align 8
  call void @llvm.stackrestore.p0(ptr %684)
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #8
  br label %685

685:                                              ; preds = %683, %593
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #8
  %686 = load ptr, ptr %9, align 8, !tbaa !8
  store ptr %686, ptr %74, align 8, !tbaa !8
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #8
  %687 = load i32, ptr %10, align 4, !tbaa !10
  %688 = udiv i32 %687, 48
  store i32 %688, ptr %75, align 4, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %76) #8
  %689 = load ptr, ptr %74, align 8, !tbaa !8
  store ptr %689, ptr %76, align 8, !tbaa !8
  call void @llvm.lifetime.start.p0(i64 4, ptr %77) #8
  store i32 0, ptr %77, align 4, !tbaa !10
  br label %690

690:                                              ; preds = %705, %685
  %691 = load i32, ptr %77, align 4, !tbaa !10
  %692 = load i32, ptr %75, align 4, !tbaa !10
  %693 = icmp ult i32 %691, %692
  br i1 %693, label %695, label %694

694:                                              ; preds = %690
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #8
  br label %708

695:                                              ; preds = %690
  %696 = load ptr, ptr %64, align 8, !tbaa !8
  %697 = load ptr, ptr %63, align 8, !tbaa !8
  %698 = load ptr, ptr %64, align 8, !tbaa !8
  call void @Hacl_HMAC_compute_sha2_384(ptr noundef %696, ptr noundef %697, i32 noundef 48, ptr noundef %698, i32 noundef 48)
  %699 = load ptr, ptr %76, align 8, !tbaa !8
  %700 = load i32, ptr %77, align 4, !tbaa !10
  %701 = mul i32 %700, 48
  %702 = zext i32 %701 to i64
  %703 = getelementptr inbounds i8, ptr %699, i64 %702
  %704 = load ptr, ptr %64, align 8, !tbaa !8
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %703, ptr align 1 %704, i64 48, i1 false)
  br label %705

705:                                              ; preds = %695
  %706 = load i32, ptr %77, align 4, !tbaa !10
  %707 = add i32 %706, 1
  store i32 %707, ptr %77, align 4, !tbaa !10
  br label %690, !llvm.loop !19

708:                                              ; preds = %694
  %709 = load i32, ptr %75, align 4, !tbaa !10
  %710 = mul i32 %709, 48
  %711 = load i32, ptr %10, align 4, !tbaa !10
  %712 = icmp ult i32 %710, %711
  br i1 %712, label %713, label %730

713:                                              ; preds = %708
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #8
  %714 = load ptr, ptr %74, align 8, !tbaa !8
  %715 = load i32, ptr %75, align 4, !tbaa !10
  %716 = mul i32 %715, 48
  %717 = zext i32 %716 to i64
  %718 = getelementptr inbounds i8, ptr %714, i64 %717
  store ptr %718, ptr %78, align 8, !tbaa !8
  %719 = load ptr, ptr %64, align 8, !tbaa !8
  %720 = load ptr, ptr %63, align 8, !tbaa !8
  %721 = load ptr, ptr %64, align 8, !tbaa !8
  call void @Hacl_HMAC_compute_sha2_384(ptr noundef %719, ptr noundef %720, i32 noundef 48, ptr noundef %721, i32 noundef 48)
  %722 = load ptr, ptr %78, align 8, !tbaa !8
  %723 = load ptr, ptr %64, align 8, !tbaa !8
  %724 = load i32, ptr %10, align 4, !tbaa !10
  %725 = load i32, ptr %75, align 4, !tbaa !10
  %726 = mul i32 %725, 48
  %727 = sub i32 %724, %726
  %728 = zext i32 %727 to i64
  %729 = mul i64 %728, 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %722, ptr align 1 %723, i64 %729, i1 false)
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #8
  br label %730

730:                                              ; preds = %713, %708
  call void @llvm.lifetime.start.p0(i64 4, ptr %79) #8
  %731 = load i32, ptr %11, align 4, !tbaa !10
  %732 = add i32 49, %731
  store i32 %732, ptr %79, align 4, !tbaa !10
  br label %733

733:                                              ; preds = %730
  %734 = load i32, ptr %79, align 4, !tbaa !10
  %735 = zext i32 %734 to i64
  %736 = icmp ugt i64 %735, -1
  br i1 %736, label %737, label %739

737:                                              ; preds = %733
  %738 = call i32 (ptr, ...) @printf(ptr noundef @.str.2, ptr noundef @.str.1, i32 noundef 921)
  call void @exit(i32 noundef 253) #9
  unreachable

739:                                              ; preds = %733
  br label %740

740:                                              ; preds = %739
  br label %741

741:                                              ; preds = %740
  %742 = load i32, ptr %79, align 4, !tbaa !10
  %743 = zext i32 %742 to i64
  %744 = call ptr @llvm.stacksave.p0()
  store ptr %744, ptr %80, align 8
  %745 = alloca i8, i64 %743, align 16
  store i64 %743, ptr %81, align 8
  %746 = load i32, ptr %79, align 4, !tbaa !10
  %747 = zext i32 %746 to i64
  %748 = mul i64 %747, 1
  call void @llvm.memset.p0.i64(ptr align 16 %745, i8 0, i64 %748, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %82) #8
  store ptr %745, ptr %82, align 8, !tbaa !8
  %749 = load ptr, ptr %82, align 8, !tbaa !8
  %750 = load ptr, ptr %64, align 8, !tbaa !8
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %749, ptr align 1 %750, i64 48, i1 false)
  %751 = load i32, ptr %11, align 4, !tbaa !10
  %752 = icmp ne i32 %751, 0
  br i1 %752, label %753, label %759

753:                                              ; preds = %741
  %754 = getelementptr inbounds i8, ptr %745, i64 49
  %755 = load ptr, ptr %12, align 8, !tbaa !8
  %756 = load i32, ptr %11, align 4, !tbaa !10
  %757 = zext i32 %756 to i64
  %758 = mul i64 %757, 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %754, ptr align 1 %755, i64 %758, i1 false)
  br label %759

759:                                              ; preds = %753, %741
  %760 = getelementptr inbounds i8, ptr %745, i64 48
  store i8 0, ptr %760, align 16, !tbaa !5
  %761 = load ptr, ptr %82, align 8, !tbaa !8
  %762 = load ptr, ptr %63, align 8, !tbaa !8
  %763 = load i32, ptr %79, align 4, !tbaa !10
  call void @Hacl_HMAC_compute_sha2_384(ptr noundef %761, ptr noundef %762, i32 noundef 48, ptr noundef %745, i32 noundef %763)
  %764 = load ptr, ptr %64, align 8, !tbaa !8
  %765 = load ptr, ptr %82, align 8, !tbaa !8
  %766 = load ptr, ptr %64, align 8, !tbaa !8
  call void @Hacl_HMAC_compute_sha2_384(ptr noundef %764, ptr noundef %765, i32 noundef 48, ptr noundef %766, i32 noundef 48)
  %767 = load ptr, ptr %63, align 8, !tbaa !8
  %768 = load ptr, ptr %82, align 8, !tbaa !8
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %767, ptr align 1 %768, i64 48, i1 false)
  %769 = load i32, ptr %11, align 4, !tbaa !10
  %770 = icmp ne i32 %769, 0
  br i1 %770, label %771, label %811

771:                                              ; preds = %759
  call void @llvm.lifetime.start.p0(i64 4, ptr %83) #8
  %772 = load i32, ptr %11, align 4, !tbaa !10
  %773 = add i32 49, %772
  store i32 %773, ptr %83, align 4, !tbaa !10
  br label %774

774:                                              ; preds = %771
  %775 = load i32, ptr %83, align 4, !tbaa !10
  %776 = zext i32 %775 to i64
  %777 = icmp ugt i64 %776, -1
  br i1 %777, label %778, label %780

778:                                              ; preds = %774
  %779 = call i32 (ptr, ...) @printf(ptr noundef @.str.2, ptr noundef @.str.1, i32 noundef 937)
  call void @exit(i32 noundef 253) #9
  unreachable

780:                                              ; preds = %774
  br label %781

781:                                              ; preds = %780
  br label %782

782:                                              ; preds = %781
  %783 = load i32, ptr %83, align 4, !tbaa !10
  %784 = zext i32 %783 to i64
  %785 = call ptr @llvm.stacksave.p0()
  store ptr %785, ptr %84, align 8
  %786 = alloca i8, i64 %784, align 16
  store i64 %784, ptr %85, align 8
  %787 = load i32, ptr %83, align 4, !tbaa !10
  %788 = zext i32 %787 to i64
  %789 = mul i64 %788, 1
  call void @llvm.memset.p0.i64(ptr align 16 %786, i8 0, i64 %789, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %86) #8
  store ptr %786, ptr %86, align 8, !tbaa !8
  %790 = load ptr, ptr %86, align 8, !tbaa !8
  %791 = load ptr, ptr %64, align 8, !tbaa !8
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %790, ptr align 1 %791, i64 48, i1 false)
  %792 = load i32, ptr %11, align 4, !tbaa !10
  %793 = icmp ne i32 %792, 0
  br i1 %793, label %794, label %800

794:                                              ; preds = %782
  %795 = getelementptr inbounds i8, ptr %786, i64 49
  %796 = load ptr, ptr %12, align 8, !tbaa !8
  %797 = load i32, ptr %11, align 4, !tbaa !10
  %798 = zext i32 %797 to i64
  %799 = mul i64 %798, 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %795, ptr align 1 %796, i64 %799, i1 false)
  br label %800

800:                                              ; preds = %794, %782
  %801 = getelementptr inbounds i8, ptr %786, i64 48
  store i8 1, ptr %801, align 16, !tbaa !5
  %802 = load ptr, ptr %86, align 8, !tbaa !8
  %803 = load ptr, ptr %63, align 8, !tbaa !8
  %804 = load i32, ptr %83, align 4, !tbaa !10
  call void @Hacl_HMAC_compute_sha2_384(ptr noundef %802, ptr noundef %803, i32 noundef 48, ptr noundef %786, i32 noundef %804)
  %805 = load ptr, ptr %64, align 8, !tbaa !8
  %806 = load ptr, ptr %86, align 8, !tbaa !8
  %807 = load ptr, ptr %64, align 8, !tbaa !8
  call void @Hacl_HMAC_compute_sha2_384(ptr noundef %805, ptr noundef %806, i32 noundef 48, ptr noundef %807, i32 noundef 48)
  %808 = load ptr, ptr %63, align 8, !tbaa !8
  %809 = load ptr, ptr %86, align 8, !tbaa !8
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %808, ptr align 1 %809, i64 48, i1 false)
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #8
  %810 = load ptr, ptr %84, align 8
  call void @llvm.stackrestore.p0(ptr %810)
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #8
  br label %811

811:                                              ; preds = %800, %759
  call void @llvm.lifetime.start.p0(i64 4, ptr %87) #8
  %812 = load ptr, ptr %65, align 8, !tbaa !8
  %813 = getelementptr inbounds i32, ptr %812, i64 0
  %814 = load i32, ptr %813, align 4, !tbaa !10
  store i32 %814, ptr %87, align 4, !tbaa !10
  %815 = load i32, ptr %87, align 4, !tbaa !10
  %816 = add i32 %815, 1
  %817 = load ptr, ptr %65, align 8, !tbaa !8
  %818 = getelementptr inbounds i32, ptr %817, i64 0
  store i32 %816, ptr %818, align 4, !tbaa !10
  store i1 true, ptr %7, align 1
  call void @llvm.lifetime.end.p0(i64 4, ptr %87) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #8
  %819 = load ptr, ptr %80, align 8
  call void @llvm.stackrestore.p0(ptr %819)
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #8
  br label %1058

820:                                              ; preds = %6
  %821 = getelementptr inbounds %struct.Hacl_HMAC_DRBG_state_s, ptr %2, i32 0, i32 2
  %822 = load ptr, ptr %821, align 8, !tbaa !12
  %823 = getelementptr inbounds i32, ptr %822, i64 0
  %824 = load i32, ptr %823, align 4, !tbaa !10
  %825 = load i32, ptr @Hacl_HMAC_DRBG_reseed_interval, align 4, !tbaa !10
  %826 = icmp ugt i32 %824, %825
  br i1 %826, label %827, label %828

827:                                              ; preds = %820
  store i1 false, ptr %7, align 1
  br label %1058

828:                                              ; preds = %820
  call void @llvm.lifetime.start.p0(i64 8, ptr %88) #8
  %829 = getelementptr inbounds %struct.Hacl_HMAC_DRBG_state_s, ptr %2, i32 0, i32 0
  %830 = load ptr, ptr %829, align 8, !tbaa !14
  store ptr %830, ptr %88, align 8, !tbaa !8
  call void @llvm.lifetime.start.p0(i64 8, ptr %89) #8
  %831 = getelementptr inbounds %struct.Hacl_HMAC_DRBG_state_s, ptr %2, i32 0, i32 1
  %832 = load ptr, ptr %831, align 8, !tbaa !15
  store ptr %832, ptr %89, align 8, !tbaa !8
  call void @llvm.lifetime.start.p0(i64 8, ptr %90) #8
  %833 = getelementptr inbounds %struct.Hacl_HMAC_DRBG_state_s, ptr %2, i32 0, i32 2
  %834 = load ptr, ptr %833, align 8, !tbaa !12
  store ptr %834, ptr %90, align 8, !tbaa !8
  %835 = load i32, ptr %11, align 4, !tbaa !10
  %836 = icmp ugt i32 %835, 0
  br i1 %836, label %837, label %920

837:                                              ; preds = %828
  call void @llvm.lifetime.start.p0(i64 4, ptr %91) #8
  %838 = load i32, ptr %11, align 4, !tbaa !10
  %839 = add i32 65, %838
  store i32 %839, ptr %91, align 4, !tbaa !10
  br label %840

840:                                              ; preds = %837
  %841 = load i32, ptr %91, align 4, !tbaa !10
  %842 = zext i32 %841 to i64
  %843 = icmp ugt i64 %842, -1
  br i1 %843, label %844, label %846

844:                                              ; preds = %840
  %845 = call i32 (ptr, ...) @printf(ptr noundef @.str.2, ptr noundef @.str.1, i32 noundef 967)
  call void @exit(i32 noundef 253) #9
  unreachable

846:                                              ; preds = %840
  br label %847

847:                                              ; preds = %846
  br label %848

848:                                              ; preds = %847
  %849 = load i32, ptr %91, align 4, !tbaa !10
  %850 = zext i32 %849 to i64
  %851 = call ptr @llvm.stacksave.p0()
  store ptr %851, ptr %92, align 8
  %852 = alloca i8, i64 %850, align 16
  store i64 %850, ptr %93, align 8
  %853 = load i32, ptr %91, align 4, !tbaa !10
  %854 = zext i32 %853 to i64
  %855 = mul i64 %854, 1
  call void @llvm.memset.p0.i64(ptr align 16 %852, i8 0, i64 %855, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %94) #8
  store ptr %852, ptr %94, align 8, !tbaa !8
  %856 = load ptr, ptr %94, align 8, !tbaa !8
  %857 = load ptr, ptr %89, align 8, !tbaa !8
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %856, ptr align 1 %857, i64 64, i1 false)
  %858 = load i32, ptr %11, align 4, !tbaa !10
  %859 = icmp ne i32 %858, 0
  br i1 %859, label %860, label %866

860:                                              ; preds = %848
  %861 = getelementptr inbounds i8, ptr %852, i64 65
  %862 = load ptr, ptr %12, align 8, !tbaa !8
  %863 = load i32, ptr %11, align 4, !tbaa !10
  %864 = zext i32 %863 to i64
  %865 = mul i64 %864, 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %861, ptr align 1 %862, i64 %865, i1 false)
  br label %866

866:                                              ; preds = %860, %848
  %867 = getelementptr inbounds i8, ptr %852, i64 64
  store i8 0, ptr %867, align 16, !tbaa !5
  %868 = load ptr, ptr %94, align 8, !tbaa !8
  %869 = load ptr, ptr %88, align 8, !tbaa !8
  %870 = load i32, ptr %91, align 4, !tbaa !10
  call void @Hacl_HMAC_compute_sha2_512(ptr noundef %868, ptr noundef %869, i32 noundef 64, ptr noundef %852, i32 noundef %870)
  %871 = load ptr, ptr %89, align 8, !tbaa !8
  %872 = load ptr, ptr %94, align 8, !tbaa !8
  %873 = load ptr, ptr %89, align 8, !tbaa !8
  call void @Hacl_HMAC_compute_sha2_512(ptr noundef %871, ptr noundef %872, i32 noundef 64, ptr noundef %873, i32 noundef 64)
  %874 = load ptr, ptr %88, align 8, !tbaa !8
  %875 = load ptr, ptr %94, align 8, !tbaa !8
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %874, ptr align 1 %875, i64 64, i1 false)
  %876 = load i32, ptr %11, align 4, !tbaa !10
  %877 = icmp ne i32 %876, 0
  br i1 %877, label %878, label %918

878:                                              ; preds = %866
  call void @llvm.lifetime.start.p0(i64 4, ptr %95) #8
  %879 = load i32, ptr %11, align 4, !tbaa !10
  %880 = add i32 65, %879
  store i32 %880, ptr %95, align 4, !tbaa !10
  br label %881

881:                                              ; preds = %878
  %882 = load i32, ptr %95, align 4, !tbaa !10
  %883 = zext i32 %882 to i64
  %884 = icmp ugt i64 %883, -1
  br i1 %884, label %885, label %887

885:                                              ; preds = %881
  %886 = call i32 (ptr, ...) @printf(ptr noundef @.str.2, ptr noundef @.str.1, i32 noundef 983)
  call void @exit(i32 noundef 253) #9
  unreachable

887:                                              ; preds = %881
  br label %888

888:                                              ; preds = %887
  br label %889

889:                                              ; preds = %888
  %890 = load i32, ptr %95, align 4, !tbaa !10
  %891 = zext i32 %890 to i64
  %892 = call ptr @llvm.stacksave.p0()
  store ptr %892, ptr %96, align 8
  %893 = alloca i8, i64 %891, align 16
  store i64 %891, ptr %97, align 8
  %894 = load i32, ptr %95, align 4, !tbaa !10
  %895 = zext i32 %894 to i64
  %896 = mul i64 %895, 1
  call void @llvm.memset.p0.i64(ptr align 16 %893, i8 0, i64 %896, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %98) #8
  store ptr %893, ptr %98, align 8, !tbaa !8
  %897 = load ptr, ptr %98, align 8, !tbaa !8
  %898 = load ptr, ptr %89, align 8, !tbaa !8
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %897, ptr align 1 %898, i64 64, i1 false)
  %899 = load i32, ptr %11, align 4, !tbaa !10
  %900 = icmp ne i32 %899, 0
  br i1 %900, label %901, label %907

901:                                              ; preds = %889
  %902 = getelementptr inbounds i8, ptr %893, i64 65
  %903 = load ptr, ptr %12, align 8, !tbaa !8
  %904 = load i32, ptr %11, align 4, !tbaa !10
  %905 = zext i32 %904 to i64
  %906 = mul i64 %905, 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %902, ptr align 1 %903, i64 %906, i1 false)
  br label %907

907:                                              ; preds = %901, %889
  %908 = getelementptr inbounds i8, ptr %893, i64 64
  store i8 1, ptr %908, align 16, !tbaa !5
  %909 = load ptr, ptr %98, align 8, !tbaa !8
  %910 = load ptr, ptr %88, align 8, !tbaa !8
  %911 = load i32, ptr %95, align 4, !tbaa !10
  call void @Hacl_HMAC_compute_sha2_512(ptr noundef %909, ptr noundef %910, i32 noundef 64, ptr noundef %893, i32 noundef %911)
  %912 = load ptr, ptr %89, align 8, !tbaa !8
  %913 = load ptr, ptr %98, align 8, !tbaa !8
  %914 = load ptr, ptr %89, align 8, !tbaa !8
  call void @Hacl_HMAC_compute_sha2_512(ptr noundef %912, ptr noundef %913, i32 noundef 64, ptr noundef %914, i32 noundef 64)
  %915 = load ptr, ptr %88, align 8, !tbaa !8
  %916 = load ptr, ptr %98, align 8, !tbaa !8
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %915, ptr align 1 %916, i64 64, i1 false)
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #8
  %917 = load ptr, ptr %96, align 8
  call void @llvm.stackrestore.p0(ptr %917)
  call void @llvm.lifetime.end.p0(i64 4, ptr %95) #8
  br label %918

918:                                              ; preds = %907, %866
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #8
  %919 = load ptr, ptr %92, align 8
  call void @llvm.stackrestore.p0(ptr %919)
  call void @llvm.lifetime.end.p0(i64 4, ptr %91) #8
  br label %920

920:                                              ; preds = %918, %828
  call void @llvm.lifetime.start.p0(i64 8, ptr %99) #8
  %921 = load ptr, ptr %9, align 8, !tbaa !8
  store ptr %921, ptr %99, align 8, !tbaa !8
  call void @llvm.lifetime.start.p0(i64 4, ptr %100) #8
  %922 = load i32, ptr %10, align 4, !tbaa !10
  %923 = udiv i32 %922, 64
  store i32 %923, ptr %100, align 4, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 8, ptr %101) #8
  %924 = load ptr, ptr %99, align 8, !tbaa !8
  store ptr %924, ptr %101, align 8, !tbaa !8
  call void @llvm.lifetime.start.p0(i64 4, ptr %102) #8
  store i32 0, ptr %102, align 4, !tbaa !10
  br label %925

925:                                              ; preds = %940, %920
  %926 = load i32, ptr %102, align 4, !tbaa !10
  %927 = load i32, ptr %100, align 4, !tbaa !10
  %928 = icmp ult i32 %926, %927
  br i1 %928, label %930, label %929

929:                                              ; preds = %925
  call void @llvm.lifetime.end.p0(i64 4, ptr %102) #8
  br label %943

930:                                              ; preds = %925
  %931 = load ptr, ptr %89, align 8, !tbaa !8
  %932 = load ptr, ptr %88, align 8, !tbaa !8
  %933 = load ptr, ptr %89, align 8, !tbaa !8
  call void @Hacl_HMAC_compute_sha2_512(ptr noundef %931, ptr noundef %932, i32 noundef 64, ptr noundef %933, i32 noundef 64)
  %934 = load ptr, ptr %101, align 8, !tbaa !8
  %935 = load i32, ptr %102, align 4, !tbaa !10
  %936 = mul i32 %935, 64
  %937 = zext i32 %936 to i64
  %938 = getelementptr inbounds i8, ptr %934, i64 %937
  %939 = load ptr, ptr %89, align 8, !tbaa !8
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %938, ptr align 1 %939, i64 64, i1 false)
  br label %940

940:                                              ; preds = %930
  %941 = load i32, ptr %102, align 4, !tbaa !10
  %942 = add i32 %941, 1
  store i32 %942, ptr %102, align 4, !tbaa !10
  br label %925, !llvm.loop !20

943:                                              ; preds = %929
  %944 = load i32, ptr %100, align 4, !tbaa !10
  %945 = mul i32 %944, 64
  %946 = load i32, ptr %10, align 4, !tbaa !10
  %947 = icmp ult i32 %945, %946
  br i1 %947, label %948, label %965

948:                                              ; preds = %943
  call void @llvm.lifetime.start.p0(i64 8, ptr %103) #8
  %949 = load ptr, ptr %99, align 8, !tbaa !8
  %950 = load i32, ptr %100, align 4, !tbaa !10
  %951 = mul i32 %950, 64
  %952 = zext i32 %951 to i64
  %953 = getelementptr inbounds i8, ptr %949, i64 %952
  store ptr %953, ptr %103, align 8, !tbaa !8
  %954 = load ptr, ptr %89, align 8, !tbaa !8
  %955 = load ptr, ptr %88, align 8, !tbaa !8
  %956 = load ptr, ptr %89, align 8, !tbaa !8
  call void @Hacl_HMAC_compute_sha2_512(ptr noundef %954, ptr noundef %955, i32 noundef 64, ptr noundef %956, i32 noundef 64)
  %957 = load ptr, ptr %103, align 8, !tbaa !8
  %958 = load ptr, ptr %89, align 8, !tbaa !8
  %959 = load i32, ptr %10, align 4, !tbaa !10
  %960 = load i32, ptr %100, align 4, !tbaa !10
  %961 = mul i32 %960, 64
  %962 = sub i32 %959, %961
  %963 = zext i32 %962 to i64
  %964 = mul i64 %963, 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %957, ptr align 1 %958, i64 %964, i1 false)
  call void @llvm.lifetime.end.p0(i64 8, ptr %103) #8
  br label %965

965:                                              ; preds = %948, %943
  call void @llvm.lifetime.start.p0(i64 4, ptr %104) #8
  %966 = load i32, ptr %11, align 4, !tbaa !10
  %967 = add i32 65, %966
  store i32 %967, ptr %104, align 4, !tbaa !10
  br label %968

968:                                              ; preds = %965
  %969 = load i32, ptr %104, align 4, !tbaa !10
  %970 = zext i32 %969 to i64
  %971 = icmp ugt i64 %970, -1
  br i1 %971, label %972, label %974

972:                                              ; preds = %968
  %973 = call i32 (ptr, ...) @printf(ptr noundef @.str.2, ptr noundef @.str.1, i32 noundef 1013)
  call void @exit(i32 noundef 253) #9
  unreachable

974:                                              ; preds = %968
  br label %975

975:                                              ; preds = %974
  br label %976

976:                                              ; preds = %975
  %977 = load i32, ptr %104, align 4, !tbaa !10
  %978 = zext i32 %977 to i64
  %979 = call ptr @llvm.stacksave.p0()
  store ptr %979, ptr %105, align 8
  %980 = alloca i8, i64 %978, align 16
  store i64 %978, ptr %106, align 8
  %981 = load i32, ptr %104, align 4, !tbaa !10
  %982 = zext i32 %981 to i64
  %983 = mul i64 %982, 1
  call void @llvm.memset.p0.i64(ptr align 16 %980, i8 0, i64 %983, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %107) #8
  store ptr %980, ptr %107, align 8, !tbaa !8
  %984 = load ptr, ptr %107, align 8, !tbaa !8
  %985 = load ptr, ptr %89, align 8, !tbaa !8
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %984, ptr align 1 %985, i64 64, i1 false)
  %986 = load i32, ptr %11, align 4, !tbaa !10
  %987 = icmp ne i32 %986, 0
  br i1 %987, label %988, label %994

988:                                              ; preds = %976
  %989 = getelementptr inbounds i8, ptr %980, i64 65
  %990 = load ptr, ptr %12, align 8, !tbaa !8
  %991 = load i32, ptr %11, align 4, !tbaa !10
  %992 = zext i32 %991 to i64
  %993 = mul i64 %992, 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %989, ptr align 1 %990, i64 %993, i1 false)
  br label %994

994:                                              ; preds = %988, %976
  %995 = getelementptr inbounds i8, ptr %980, i64 64
  store i8 0, ptr %995, align 16, !tbaa !5
  %996 = load ptr, ptr %107, align 8, !tbaa !8
  %997 = load ptr, ptr %88, align 8, !tbaa !8
  %998 = load i32, ptr %104, align 4, !tbaa !10
  call void @Hacl_HMAC_compute_sha2_512(ptr noundef %996, ptr noundef %997, i32 noundef 64, ptr noundef %980, i32 noundef %998)
  %999 = load ptr, ptr %89, align 8, !tbaa !8
  %1000 = load ptr, ptr %107, align 8, !tbaa !8
  %1001 = load ptr, ptr %89, align 8, !tbaa !8
  call void @Hacl_HMAC_compute_sha2_512(ptr noundef %999, ptr noundef %1000, i32 noundef 64, ptr noundef %1001, i32 noundef 64)
  %1002 = load ptr, ptr %88, align 8, !tbaa !8
  %1003 = load ptr, ptr %107, align 8, !tbaa !8
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %1002, ptr align 1 %1003, i64 64, i1 false)
  %1004 = load i32, ptr %11, align 4, !tbaa !10
  %1005 = icmp ne i32 %1004, 0
  br i1 %1005, label %1006, label %1046

1006:                                             ; preds = %994
  call void @llvm.lifetime.start.p0(i64 4, ptr %108) #8
  %1007 = load i32, ptr %11, align 4, !tbaa !10
  %1008 = add i32 65, %1007
  store i32 %1008, ptr %108, align 4, !tbaa !10
  br label %1009

1009:                                             ; preds = %1006
  %1010 = load i32, ptr %108, align 4, !tbaa !10
  %1011 = zext i32 %1010 to i64
  %1012 = icmp ugt i64 %1011, -1
  br i1 %1012, label %1013, label %1015

1013:                                             ; preds = %1009
  %1014 = call i32 (ptr, ...) @printf(ptr noundef @.str.2, ptr noundef @.str.1, i32 noundef 1029)
  call void @exit(i32 noundef 253) #9
  unreachable

1015:                                             ; preds = %1009
  br label %1016

1016:                                             ; preds = %1015
  br label %1017

1017:                                             ; preds = %1016
  %1018 = load i32, ptr %108, align 4, !tbaa !10
  %1019 = zext i32 %1018 to i64
  %1020 = call ptr @llvm.stacksave.p0()
  store ptr %1020, ptr %109, align 8
  %1021 = alloca i8, i64 %1019, align 16
  store i64 %1019, ptr %110, align 8
  %1022 = load i32, ptr %108, align 4, !tbaa !10
  %1023 = zext i32 %1022 to i64
  %1024 = mul i64 %1023, 1
  call void @llvm.memset.p0.i64(ptr align 16 %1021, i8 0, i64 %1024, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %111) #8
  store ptr %1021, ptr %111, align 8, !tbaa !8
  %1025 = load ptr, ptr %111, align 8, !tbaa !8
  %1026 = load ptr, ptr %89, align 8, !tbaa !8
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %1025, ptr align 1 %1026, i64 64, i1 false)
  %1027 = load i32, ptr %11, align 4, !tbaa !10
  %1028 = icmp ne i32 %1027, 0
  br i1 %1028, label %1029, label %1035

1029:                                             ; preds = %1017
  %1030 = getelementptr inbounds i8, ptr %1021, i64 65
  %1031 = load ptr, ptr %12, align 8, !tbaa !8
  %1032 = load i32, ptr %11, align 4, !tbaa !10
  %1033 = zext i32 %1032 to i64
  %1034 = mul i64 %1033, 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %1030, ptr align 1 %1031, i64 %1034, i1 false)
  br label %1035

1035:                                             ; preds = %1029, %1017
  %1036 = getelementptr inbounds i8, ptr %1021, i64 64
  store i8 1, ptr %1036, align 16, !tbaa !5
  %1037 = load ptr, ptr %111, align 8, !tbaa !8
  %1038 = load ptr, ptr %88, align 8, !tbaa !8
  %1039 = load i32, ptr %108, align 4, !tbaa !10
  call void @Hacl_HMAC_compute_sha2_512(ptr noundef %1037, ptr noundef %1038, i32 noundef 64, ptr noundef %1021, i32 noundef %1039)
  %1040 = load ptr, ptr %89, align 8, !tbaa !8
  %1041 = load ptr, ptr %111, align 8, !tbaa !8
  %1042 = load ptr, ptr %89, align 8, !tbaa !8
  call void @Hacl_HMAC_compute_sha2_512(ptr noundef %1040, ptr noundef %1041, i32 noundef 64, ptr noundef %1042, i32 noundef 64)
  %1043 = load ptr, ptr %88, align 8, !tbaa !8
  %1044 = load ptr, ptr %111, align 8, !tbaa !8
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %1043, ptr align 1 %1044, i64 64, i1 false)
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #8
  %1045 = load ptr, ptr %109, align 8
  call void @llvm.stackrestore.p0(ptr %1045)
  call void @llvm.lifetime.end.p0(i64 4, ptr %108) #8
  br label %1046

1046:                                             ; preds = %1035, %994
  call void @llvm.lifetime.start.p0(i64 4, ptr %112) #8
  %1047 = load ptr, ptr %90, align 8, !tbaa !8
  %1048 = getelementptr inbounds i32, ptr %1047, i64 0
  %1049 = load i32, ptr %1048, align 4, !tbaa !10
  store i32 %1049, ptr %112, align 4, !tbaa !10
  %1050 = load i32, ptr %112, align 4, !tbaa !10
  %1051 = add i32 %1050, 1
  %1052 = load ptr, ptr %90, align 8, !tbaa !8
  %1053 = getelementptr inbounds i32, ptr %1052, i64 0
  store i32 %1051, ptr %1053, align 4, !tbaa !10
  store i1 true, ptr %7, align 1
  call void @llvm.lifetime.end.p0(i64 4, ptr %112) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %107) #8
  %1054 = load ptr, ptr %105, align 8
  call void @llvm.stackrestore.p0(ptr %1054)
  call void @llvm.lifetime.end.p0(i64 4, ptr %104) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %100) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %99) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %90) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %89) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #8
  br label %1058

1055:                                             ; preds = %6
  %1056 = load ptr, ptr @stderr, align 8, !tbaa !8
  %1057 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %1056, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1049) #8
  call void @exit(i32 noundef 253) #9
  unreachable

1058:                                             ; preds = %1046, %827, %811, %592, %576, %357, %341, %122
  %1059 = load i1, ptr %7, align 1
  ret i1 %1059
}

attributes #0 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nocallback nofree nosync nounwind willreturn }
attributes #5 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #6 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #7 = { 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 #8 = { nounwind }
attributes #9 = { noreturn 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 = !{!"omnipotent char", !7, i64 0}
!7 = !{!"Simple C/C++ TBAA"}
!8 = !{!9, !9, i64 0}
!9 = !{!"any pointer", !6, i64 0}
!10 = !{!11, !11, i64 0}
!11 = !{!"int", !6, i64 0}
!12 = !{!13, !9, i64 16}
!13 = !{!"Hacl_HMAC_DRBG_state_s", !9, i64 0, !9, i64 8, !9, i64 16}
!14 = !{!13, !9, i64 0}
!15 = !{!13, !9, i64 8}
!16 = distinct !{!16, !17}
!17 = !{!"llvm.loop.mustprogress"}
!18 = distinct !{!18, !17}
!19 = distinct !{!19, !17}
!20 = distinct !{!20, !17}


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

%struct.Hacl_HMAC_DRBG_state_s = type { ptr, ptr, ptr }

@Hacl_HMAC_DRBG_reseed_interval = external dso_local local_unnamed_addr global i32, align 4
@stderr = external local_unnamed_addr global ptr, align 8
@.str = external hidden unnamed_addr constant [35 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [81 x i8], align 1

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

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn
declare ptr @llvm.stacksave.p0() #2

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

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #4

declare void @Hacl_HMAC_compute_sha1(ptr noundef, ptr noundef, i32 noundef, ptr noundef, i32 noundef) local_unnamed_addr #5

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn
declare void @llvm.stackrestore.p0(ptr) #2

declare void @Hacl_HMAC_compute_sha2_256(ptr noundef, ptr noundef, i32 noundef, ptr noundef, i32 noundef) local_unnamed_addr #5

declare void @Hacl_HMAC_compute_sha2_384(ptr noundef, ptr noundef, i32 noundef, ptr noundef, i32 noundef) local_unnamed_addr #5

declare void @Hacl_HMAC_compute_sha2_512(ptr noundef, ptr noundef, i32 noundef, ptr noundef, i32 noundef) local_unnamed_addr #5

; Function Attrs: nounwind uwtable
define dso_local noundef zeroext i1 @Hacl_HMAC_DRBG_generate(i8 noundef zeroext %0, ptr nocapture noundef writeonly %1, ptr nocapture noundef readonly byval(%struct.Hacl_HMAC_DRBG_state_s) align 8 %2, i32 noundef %3, i32 noundef %4, ptr nocapture noundef readonly %5) local_unnamed_addr #6 {
  switch i8 %0, label %187 [
    i8 4, label %7
    i8 1, label %52
    i8 2, label %97
    i8 3, label %142
  ]

7:                                                ; preds = %6
  %8 = getelementptr inbounds i8, ptr %2, i64 16
  %9 = load ptr, ptr %8, align 8, !tbaa !5
  %10 = load i32, ptr %9, align 4, !tbaa !10
  %11 = load i32, ptr @Hacl_HMAC_DRBG_reseed_interval, align 4, !tbaa !10
  %12 = icmp ugt i32 %10, %11
  br i1 %12, label %192, label %13

13:                                               ; preds = %7
  %14 = load ptr, ptr %2, align 8, !tbaa !12
  %15 = getelementptr inbounds i8, ptr %2, i64 8
  %16 = load ptr, ptr %15, align 8, !tbaa !13
  %.not429 = icmp eq i32 %4, 0
  br i1 %.not429, label %28, label %17

17:                                               ; preds = %13
  %18 = add i32 %4, 21
  %19 = zext i32 %18 to i64
  %20 = tail call ptr @llvm.stacksave.p0()
  %21 = alloca i8, i64 %19, align 16
  call void @llvm.memset.p0.i64(ptr nonnull align 16 %21, i8 0, i64 %19, i1 false)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(20) %21, ptr noundef nonnull align 1 dereferenceable(20) %16, i64 20, i1 false)
  %22 = getelementptr inbounds i8, ptr %21, i64 21
  %23 = zext i32 %4 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %22, ptr align 1 %5, i64 %23, i1 false)
  %24 = getelementptr inbounds i8, ptr %21, i64 20
  store i8 0, ptr %24, align 4, !tbaa !14
  call void @Hacl_HMAC_compute_sha1(ptr noundef nonnull %21, ptr noundef %14, i32 noundef 20, ptr noundef nonnull %21, i32 noundef %18) #7
  call void @Hacl_HMAC_compute_sha1(ptr noundef %16, ptr noundef nonnull %21, i32 noundef 20, ptr noundef %16, i32 noundef 20) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(20) %14, ptr noundef nonnull align 16 dereferenceable(20) %21, i64 20, i1 false)
  %25 = alloca i8, i64 %19, align 16
  call void @llvm.memset.p0.i64(ptr nonnull align 16 %25, i8 0, i64 %19, i1 false)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(20) %25, ptr noundef nonnull align 1 dereferenceable(20) %16, i64 20, i1 false)
  %26 = getelementptr inbounds i8, ptr %25, i64 21
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %26, ptr align 1 %5, i64 %23, i1 false)
  %27 = getelementptr inbounds i8, ptr %25, i64 20
  store i8 1, ptr %27, align 4, !tbaa !14
  call void @Hacl_HMAC_compute_sha1(ptr noundef nonnull %25, ptr noundef %14, i32 noundef 20, ptr noundef nonnull %25, i32 noundef %18) #7
  call void @Hacl_HMAC_compute_sha1(ptr noundef %16, ptr noundef nonnull %25, i32 noundef 20, ptr noundef %16, i32 noundef 20) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(20) %14, ptr noundef nonnull align 16 dereferenceable(20) %25, i64 20, i1 false)
  call void @llvm.stackrestore.p0(ptr %20)
  br label %28

28:                                               ; preds = %17, %13
  %29 = udiv i32 %3, 20
  %.recomposed = urem i32 %3, 20
  %.not453 = icmp ult i32 %3, 20
  br i1 %.not453, label %._crit_edge449, label %.lr.ph448.preheader

.lr.ph448.preheader:                              ; preds = %28
  %wide.trip.count468 = zext nneg i32 %29 to i64
  br label %.lr.ph448

._crit_edge449:                                   ; preds = %.lr.ph448, %28
  %30 = mul nuw i32 %29, 20
  %31 = icmp ult i32 %30, %3
  br i1 %31, label %34, label %38

.lr.ph448:                                        ; preds = %.lr.ph448.preheader, %.lr.ph448
  %indvars.iv465 = phi i64 [ 0, %.lr.ph448.preheader ], [ %indvars.iv.next466, %.lr.ph448 ]
  call void @Hacl_HMAC_compute_sha1(ptr noundef %16, ptr noundef %14, i32 noundef 20, ptr noundef %16, i32 noundef 20) #7
  %32 = mul nuw nsw i64 %indvars.iv465, 20
  %33 = getelementptr inbounds i8, ptr %1, i64 %32
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(20) %33, ptr noundef nonnull align 1 dereferenceable(20) %16, i64 20, i1 false)
  %indvars.iv.next466 = add nuw nsw i64 %indvars.iv465, 1
  %exitcond469.not = icmp eq i64 %indvars.iv.next466, %wide.trip.count468
  br i1 %exitcond469.not, label %._crit_edge449, label %.lr.ph448, !llvm.loop !15

34:                                               ; preds = %._crit_edge449
  %35 = zext i32 %30 to i64
  %36 = getelementptr inbounds i8, ptr %1, i64 %35
  call void @Hacl_HMAC_compute_sha1(ptr noundef %16, ptr noundef %14, i32 noundef 20, ptr noundef %16, i32 noundef 20) #7
  %37 = zext i32 %.recomposed to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %36, ptr align 1 %16, i64 %37, i1 false)
  br label %38

38:                                               ; preds = %34, %._crit_edge449
  %39 = add i32 %4, 21
  %40 = zext i32 %39 to i64
  %41 = call ptr @llvm.stacksave.p0()
  %42 = alloca i8, i64 %40, align 16
  call void @llvm.memset.p0.i64(ptr nonnull align 16 %42, i8 0, i64 %40, i1 false)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(20) %42, ptr noundef nonnull align 1 dereferenceable(20) %16, i64 20, i1 false)
  br i1 %.not429, label %.critedge, label %43

43:                                               ; preds = %38
  %44 = getelementptr inbounds i8, ptr %42, i64 21
  %45 = zext i32 %4 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %44, ptr align 1 %5, i64 %45, i1 false)
  %46 = getelementptr inbounds i8, ptr %42, i64 20
  store i8 0, ptr %46, align 4, !tbaa !14
  call void @Hacl_HMAC_compute_sha1(ptr noundef nonnull %42, ptr noundef %14, i32 noundef 20, ptr noundef nonnull %42, i32 noundef %39) #7
  call void @Hacl_HMAC_compute_sha1(ptr noundef nonnull %16, ptr noundef nonnull %42, i32 noundef 20, ptr noundef nonnull %16, i32 noundef 20) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(20) %14, ptr noundef nonnull align 16 dereferenceable(20) %42, i64 20, i1 false)
  %47 = call ptr @llvm.stacksave.p0()
  %48 = alloca i8, i64 %40, align 16
  call void @llvm.memset.p0.i64(ptr nonnull align 16 %48, i8 0, i64 %40, i1 false)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(20) %48, ptr noundef nonnull align 1 dereferenceable(20) %16, i64 20, i1 false)
  %49 = getelementptr inbounds i8, ptr %48, i64 21
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %49, ptr align 1 %5, i64 %45, i1 false)
  %50 = getelementptr inbounds i8, ptr %48, i64 20
  store i8 1, ptr %50, align 4, !tbaa !14
  call void @Hacl_HMAC_compute_sha1(ptr noundef nonnull %48, ptr noundef %14, i32 noundef 20, ptr noundef nonnull %48, i32 noundef %39) #7
  call void @Hacl_HMAC_compute_sha1(ptr noundef nonnull %16, ptr noundef nonnull %48, i32 noundef 20, ptr noundef nonnull %16, i32 noundef 20) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(20) %14, ptr noundef nonnull align 16 dereferenceable(20) %48, i64 20, i1 false)
  call void @llvm.stackrestore.p0(ptr %47)
  br label %.sink.split

.critedge:                                        ; preds = %38
  %51 = getelementptr inbounds i8, ptr %42, i64 20
  store i8 0, ptr %51, align 4, !tbaa !14
  call void @Hacl_HMAC_compute_sha1(ptr noundef nonnull %42, ptr noundef %14, i32 noundef 20, ptr noundef nonnull %42, i32 noundef %39) #7
  call void @Hacl_HMAC_compute_sha1(ptr noundef nonnull %16, ptr noundef nonnull %42, i32 noundef 20, ptr noundef nonnull %16, i32 noundef 20) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(20) %14, ptr noundef nonnull align 16 dereferenceable(20) %42, i64 20, i1 false)
  br label %.sink.split

52:                                               ; preds = %6
  %53 = getelementptr inbounds i8, ptr %2, i64 16
  %54 = load ptr, ptr %53, align 8, !tbaa !5
  %55 = load i32, ptr %54, align 4, !tbaa !10
  %56 = load i32, ptr @Hacl_HMAC_DRBG_reseed_interval, align 4, !tbaa !10
  %57 = icmp ugt i32 %55, %56
  br i1 %57, label %192, label %58

58:                                               ; preds = %52
  %59 = load ptr, ptr %2, align 8, !tbaa !12
  %60 = getelementptr inbounds i8, ptr %2, i64 8
  %61 = load ptr, ptr %60, align 8, !tbaa !13
  %.not426 = icmp eq i32 %4, 0
  br i1 %.not426, label %73, label %62

62:                                               ; preds = %58
  %63 = add i32 %4, 33
  %64 = zext i32 %63 to i64
  %65 = tail call ptr @llvm.stacksave.p0()
  %66 = alloca i8, i64 %64, align 16
  call void @llvm.memset.p0.i64(ptr nonnull align 16 %66, i8 0, i64 %64, i1 false)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(32) %66, ptr noundef nonnull align 1 dereferenceable(32) %61, i64 32, i1 false)
  %67 = getelementptr inbounds i8, ptr %66, i64 33
  %68 = zext i32 %4 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %67, ptr align 1 %5, i64 %68, i1 false)
  %69 = getelementptr inbounds i8, ptr %66, i64 32
  store i8 0, ptr %69, align 16, !tbaa !14
  call void @Hacl_HMAC_compute_sha2_256(ptr noundef nonnull %66, ptr noundef %59, i32 noundef 32, ptr noundef nonnull %66, i32 noundef %63) #7
  call void @Hacl_HMAC_compute_sha2_256(ptr noundef %61, ptr noundef nonnull %66, i32 noundef 32, ptr noundef %61, i32 noundef 32) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(32) %59, ptr noundef nonnull align 16 dereferenceable(32) %66, i64 32, i1 false)
  %70 = alloca i8, i64 %64, align 16
  call void @llvm.memset.p0.i64(ptr nonnull align 16 %70, i8 0, i64 %64, i1 false)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(32) %70, ptr noundef nonnull align 1 dereferenceable(32) %61, i64 32, i1 false)
  %71 = getelementptr inbounds i8, ptr %70, i64 33
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %71, ptr align 1 %5, i64 %68, i1 false)
  %72 = getelementptr inbounds i8, ptr %70, i64 32
  store i8 1, ptr %72, align 16, !tbaa !14
  call void @Hacl_HMAC_compute_sha2_256(ptr noundef nonnull %70, ptr noundef %59, i32 noundef 32, ptr noundef nonnull %70, i32 noundef %63) #7
  call void @Hacl_HMAC_compute_sha2_256(ptr noundef %61, ptr noundef nonnull %70, i32 noundef 32, ptr noundef %61, i32 noundef 32) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(32) %59, ptr noundef nonnull align 16 dereferenceable(32) %70, i64 32, i1 false)
  call void @llvm.stackrestore.p0(ptr %65)
  br label %73

73:                                               ; preds = %62, %58
  %.not452 = icmp ult i32 %3, 32
  br i1 %.not452, label %._crit_edge445, label %.lr.ph444.preheader

.lr.ph444.preheader:                              ; preds = %73
  %74 = lshr i32 %3, 5
  %wide.trip.count463 = zext nneg i32 %74 to i64
  br label %.lr.ph444

._crit_edge445:                                   ; preds = %.lr.ph444, %73
  %75 = and i32 %3, -32
  %.not427 = icmp eq i32 %75, %3
  br i1 %.not427, label %83, label %78

.lr.ph444:                                        ; preds = %.lr.ph444.preheader, %.lr.ph444
  %indvars.iv460 = phi i64 [ 0, %.lr.ph444.preheader ], [ %indvars.iv.next461, %.lr.ph444 ]
  call void @Hacl_HMAC_compute_sha2_256(ptr noundef %61, ptr noundef %59, i32 noundef 32, ptr noundef %61, i32 noundef 32) #7
  %76 = shl nuw i64 %indvars.iv460, 5
  %77 = getelementptr inbounds i8, ptr %1, i64 %76
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(32) %77, ptr noundef nonnull align 1 dereferenceable(32) %61, i64 32, i1 false)
  %indvars.iv.next461 = add nuw nsw i64 %indvars.iv460, 1
  %exitcond464.not = icmp eq i64 %indvars.iv.next461, %wide.trip.count463
  br i1 %exitcond464.not, label %._crit_edge445, label %.lr.ph444, !llvm.loop !17

78:                                               ; preds = %._crit_edge445
  %79 = zext i32 %75 to i64
  %80 = getelementptr inbounds i8, ptr %1, i64 %79
  call void @Hacl_HMAC_compute_sha2_256(ptr noundef %61, ptr noundef %59, i32 noundef 32, ptr noundef %61, i32 noundef 32) #7
  %81 = and i32 %3, 31
  %82 = zext nneg i32 %81 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %80, ptr align 1 %61, i64 %82, i1 false)
  br label %83

83:                                               ; preds = %78, %._crit_edge445
  %84 = add i32 %4, 33
  %85 = zext i32 %84 to i64
  %86 = call ptr @llvm.stacksave.p0()
  %87 = alloca i8, i64 %85, align 16
  call void @llvm.memset.p0.i64(ptr nonnull align 16 %87, i8 0, i64 %85, i1 false)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(32) %87, ptr noundef nonnull align 1 dereferenceable(32) %61, i64 32, i1 false)
  br i1 %.not426, label %.critedge432, label %88

88:                                               ; preds = %83
  %89 = getelementptr inbounds i8, ptr %87, i64 33
  %90 = zext i32 %4 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %89, ptr align 1 %5, i64 %90, i1 false)
  %91 = getelementptr inbounds i8, ptr %87, i64 32
  store i8 0, ptr %91, align 16, !tbaa !14
  call void @Hacl_HMAC_compute_sha2_256(ptr noundef nonnull %87, ptr noundef %59, i32 noundef 32, ptr noundef nonnull %87, i32 noundef %84) #7
  call void @Hacl_HMAC_compute_sha2_256(ptr noundef nonnull %61, ptr noundef nonnull %87, i32 noundef 32, ptr noundef nonnull %61, i32 noundef 32) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(32) %59, ptr noundef nonnull align 16 dereferenceable(32) %87, i64 32, i1 false)
  %92 = call ptr @llvm.stacksave.p0()
  %93 = alloca i8, i64 %85, align 16
  call void @llvm.memset.p0.i64(ptr nonnull align 16 %93, i8 0, i64 %85, i1 false)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(32) %93, ptr noundef nonnull align 1 dereferenceable(32) %61, i64 32, i1 false)
  %94 = getelementptr inbounds i8, ptr %93, i64 33
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %94, ptr align 1 %5, i64 %90, i1 false)
  %95 = getelementptr inbounds i8, ptr %93, i64 32
  store i8 1, ptr %95, align 16, !tbaa !14
  call void @Hacl_HMAC_compute_sha2_256(ptr noundef nonnull %93, ptr noundef %59, i32 noundef 32, ptr noundef nonnull %93, i32 noundef %84) #7
  call void @Hacl_HMAC_compute_sha2_256(ptr noundef nonnull %61, ptr noundef nonnull %93, i32 noundef 32, ptr noundef nonnull %61, i32 noundef 32) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(32) %59, ptr noundef nonnull align 16 dereferenceable(32) %93, i64 32, i1 false)
  call void @llvm.stackrestore.p0(ptr %92)
  br label %.sink.split

.critedge432:                                     ; preds = %83
  %96 = getelementptr inbounds i8, ptr %87, i64 32
  store i8 0, ptr %96, align 16, !tbaa !14
  call void @Hacl_HMAC_compute_sha2_256(ptr noundef nonnull %87, ptr noundef %59, i32 noundef 32, ptr noundef nonnull %87, i32 noundef %84) #7
  call void @Hacl_HMAC_compute_sha2_256(ptr noundef nonnull %61, ptr noundef nonnull %87, i32 noundef 32, ptr noundef nonnull %61, i32 noundef 32) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(32) %59, ptr noundef nonnull align 16 dereferenceable(32) %87, i64 32, i1 false)
  br label %.sink.split

97:                                               ; preds = %6
  %98 = getelementptr inbounds i8, ptr %2, i64 16
  %99 = load ptr, ptr %98, align 8, !tbaa !5
  %100 = load i32, ptr %99, align 4, !tbaa !10
  %101 = load i32, ptr @Hacl_HMAC_DRBG_reseed_interval, align 4, !tbaa !10
  %102 = icmp ugt i32 %100, %101
  br i1 %102, label %192, label %103

103:                                              ; preds = %97
  %104 = load ptr, ptr %2, align 8, !tbaa !12
  %105 = getelementptr inbounds i8, ptr %2, i64 8
  %106 = load ptr, ptr %105, align 8, !tbaa !13
  %.not424 = icmp eq i32 %4, 0
  br i1 %.not424, label %118, label %107

107:                                              ; preds = %103
  %108 = add i32 %4, 49
  %109 = zext i32 %108 to i64
  %110 = tail call ptr @llvm.stacksave.p0()
  %111 = alloca i8, i64 %109, align 16
  call void @llvm.memset.p0.i64(ptr nonnull align 16 %111, i8 0, i64 %109, i1 false)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(48) %111, ptr noundef nonnull align 1 dereferenceable(48) %106, i64 48, i1 false)
  %112 = getelementptr inbounds i8, ptr %111, i64 49
  %113 = zext i32 %4 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %112, ptr align 1 %5, i64 %113, i1 false)
  %114 = getelementptr inbounds i8, ptr %111, i64 48
  store i8 0, ptr %114, align 16, !tbaa !14
  call void @Hacl_HMAC_compute_sha2_384(ptr noundef nonnull %111, ptr noundef %104, i32 noundef 48, ptr noundef nonnull %111, i32 noundef %108) #7
  call void @Hacl_HMAC_compute_sha2_384(ptr noundef %106, ptr noundef nonnull %111, i32 noundef 48, ptr noundef %106, i32 noundef 48) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(48) %104, ptr noundef nonnull align 16 dereferenceable(48) %111, i64 48, i1 false)
  %115 = alloca i8, i64 %109, align 16
  call void @llvm.memset.p0.i64(ptr nonnull align 16 %115, i8 0, i64 %109, i1 false)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(48) %115, ptr noundef nonnull align 1 dereferenceable(48) %106, i64 48, i1 false)
  %116 = getelementptr inbounds i8, ptr %115, i64 49
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %116, ptr align 1 %5, i64 %113, i1 false)
  %117 = getelementptr inbounds i8, ptr %115, i64 48
  store i8 1, ptr %117, align 16, !tbaa !14
  call void @Hacl_HMAC_compute_sha2_384(ptr noundef nonnull %115, ptr noundef %104, i32 noundef 48, ptr noundef nonnull %115, i32 noundef %108) #7
  call void @Hacl_HMAC_compute_sha2_384(ptr noundef %106, ptr noundef nonnull %115, i32 noundef 48, ptr noundef %106, i32 noundef 48) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(48) %104, ptr noundef nonnull align 16 dereferenceable(48) %115, i64 48, i1 false)
  call void @llvm.stackrestore.p0(ptr %110)
  br label %118

118:                                              ; preds = %107, %103
  %119 = udiv i32 %3, 48
  %.recomposed474 = urem i32 %3, 48
  %.not451 = icmp ult i32 %3, 48
  br i1 %.not451, label %._crit_edge441, label %.lr.ph440.preheader

.lr.ph440.preheader:                              ; preds = %118
  %wide.trip.count458 = zext nneg i32 %119 to i64
  br label %.lr.ph440

._crit_edge441:                                   ; preds = %.lr.ph440, %118
  %120 = mul nuw i32 %119, 48
  %121 = icmp ult i32 %120, %3
  br i1 %121, label %124, label %128

.lr.ph440:                                        ; preds = %.lr.ph440.preheader, %.lr.ph440
  %indvars.iv455 = phi i64 [ 0, %.lr.ph440.preheader ], [ %indvars.iv.next456, %.lr.ph440 ]
  call void @Hacl_HMAC_compute_sha2_384(ptr noundef %106, ptr noundef %104, i32 noundef 48, ptr noundef %106, i32 noundef 48) #7
  %122 = mul nuw nsw i64 %indvars.iv455, 48
  %123 = getelementptr inbounds i8, ptr %1, i64 %122
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(48) %123, ptr noundef nonnull align 1 dereferenceable(48) %106, i64 48, i1 false)
  %indvars.iv.next456 = add nuw nsw i64 %indvars.iv455, 1
  %exitcond459.not = icmp eq i64 %indvars.iv.next456, %wide.trip.count458
  br i1 %exitcond459.not, label %._crit_edge441, label %.lr.ph440, !llvm.loop !18

124:                                              ; preds = %._crit_edge441
  %125 = zext i32 %120 to i64
  %126 = getelementptr inbounds i8, ptr %1, i64 %125
  call void @Hacl_HMAC_compute_sha2_384(ptr noundef %106, ptr noundef %104, i32 noundef 48, ptr noundef %106, i32 noundef 48) #7
  %127 = zext i32 %.recomposed474 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %126, ptr align 1 %106, i64 %127, i1 false)
  br label %128

128:                                              ; preds = %124, %._crit_edge441
  %129 = add i32 %4, 49
  %130 = zext i32 %129 to i64
  %131 = call ptr @llvm.stacksave.p0()
  %132 = alloca i8, i64 %130, align 16
  call void @llvm.memset.p0.i64(ptr nonnull align 16 %132, i8 0, i64 %130, i1 false)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(48) %132, ptr noundef nonnull align 1 dereferenceable(48) %106, i64 48, i1 false)
  br i1 %.not424, label %.critedge434, label %133

133:                                              ; preds = %128
  %134 = getelementptr inbounds i8, ptr %132, i64 49
  %135 = zext i32 %4 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %134, ptr align 1 %5, i64 %135, i1 false)
  %136 = getelementptr inbounds i8, ptr %132, i64 48
  store i8 0, ptr %136, align 16, !tbaa !14
  call void @Hacl_HMAC_compute_sha2_384(ptr noundef nonnull %132, ptr noundef %104, i32 noundef 48, ptr noundef nonnull %132, i32 noundef %129) #7
  call void @Hacl_HMAC_compute_sha2_384(ptr noundef nonnull %106, ptr noundef nonnull %132, i32 noundef 48, ptr noundef nonnull %106, i32 noundef 48) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(48) %104, ptr noundef nonnull align 16 dereferenceable(48) %132, i64 48, i1 false)
  %137 = call ptr @llvm.stacksave.p0()
  %138 = alloca i8, i64 %130, align 16
  call void @llvm.memset.p0.i64(ptr nonnull align 16 %138, i8 0, i64 %130, i1 false)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(48) %138, ptr noundef nonnull align 1 dereferenceable(48) %106, i64 48, i1 false)
  %139 = getelementptr inbounds i8, ptr %138, i64 49
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %139, ptr align 1 %5, i64 %135, i1 false)
  %140 = getelementptr inbounds i8, ptr %138, i64 48
  store i8 1, ptr %140, align 16, !tbaa !14
  call void @Hacl_HMAC_compute_sha2_384(ptr noundef nonnull %138, ptr noundef %104, i32 noundef 48, ptr noundef nonnull %138, i32 noundef %129) #7
  call void @Hacl_HMAC_compute_sha2_384(ptr noundef nonnull %106, ptr noundef nonnull %138, i32 noundef 48, ptr noundef nonnull %106, i32 noundef 48) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(48) %104, ptr noundef nonnull align 16 dereferenceable(48) %138, i64 48, i1 false)
  call void @llvm.stackrestore.p0(ptr %137)
  br label %.sink.split

.critedge434:                                     ; preds = %128
  %141 = getelementptr inbounds i8, ptr %132, i64 48
  store i8 0, ptr %141, align 16, !tbaa !14
  call void @Hacl_HMAC_compute_sha2_384(ptr noundef nonnull %132, ptr noundef %104, i32 noundef 48, ptr noundef nonnull %132, i32 noundef %129) #7
  call void @Hacl_HMAC_compute_sha2_384(ptr noundef nonnull %106, ptr noundef nonnull %132, i32 noundef 48, ptr noundef nonnull %106, i32 noundef 48) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(48) %104, ptr noundef nonnull align 16 dereferenceable(48) %132, i64 48, i1 false)
  br label %.sink.split

142:                                              ; preds = %6
  %143 = getelementptr inbounds i8, ptr %2, i64 16
  %144 = load ptr, ptr %143, align 8, !tbaa !5
  %145 = load i32, ptr %144, align 4, !tbaa !10
  %146 = load i32, ptr @Hacl_HMAC_DRBG_reseed_interval, align 4, !tbaa !10
  %147 = icmp ugt i32 %145, %146
  br i1 %147, label %192, label %148

148:                                              ; preds = %142
  %149 = load ptr, ptr %2, align 8, !tbaa !12
  %150 = getelementptr inbounds i8, ptr %2, i64 8
  %151 = load ptr, ptr %150, align 8, !tbaa !13
  %.not = icmp eq i32 %4, 0
  br i1 %.not, label %163, label %152

152:                                              ; preds = %148
  %153 = add i32 %4, 65
  %154 = zext i32 %153 to i64
  %155 = tail call ptr @llvm.stacksave.p0()
  %156 = alloca i8, i64 %154, align 16
  call void @llvm.memset.p0.i64(ptr nonnull align 16 %156, i8 0, i64 %154, i1 false)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(64) %156, ptr noundef nonnull align 1 dereferenceable(64) %151, i64 64, i1 false)
  %157 = getelementptr inbounds i8, ptr %156, i64 65
  %158 = zext i32 %4 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %157, ptr align 1 %5, i64 %158, i1 false)
  %159 = getelementptr inbounds i8, ptr %156, i64 64
  store i8 0, ptr %159, align 16, !tbaa !14
  call void @Hacl_HMAC_compute_sha2_512(ptr noundef nonnull %156, ptr noundef %149, i32 noundef 64, ptr noundef nonnull %156, i32 noundef %153) #7
  call void @Hacl_HMAC_compute_sha2_512(ptr noundef %151, ptr noundef nonnull %156, i32 noundef 64, ptr noundef %151, i32 noundef 64) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(64) %149, ptr noundef nonnull align 16 dereferenceable(64) %156, i64 64, i1 false)
  %160 = alloca i8, i64 %154, align 16
  call void @llvm.memset.p0.i64(ptr nonnull align 16 %160, i8 0, i64 %154, i1 false)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(64) %160, ptr noundef nonnull align 1 dereferenceable(64) %151, i64 64, i1 false)
  %161 = getelementptr inbounds i8, ptr %160, i64 65
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %161, ptr align 1 %5, i64 %158, i1 false)
  %162 = getelementptr inbounds i8, ptr %160, i64 64
  store i8 1, ptr %162, align 16, !tbaa !14
  call void @Hacl_HMAC_compute_sha2_512(ptr noundef nonnull %160, ptr noundef %149, i32 noundef 64, ptr noundef nonnull %160, i32 noundef %153) #7
  call void @Hacl_HMAC_compute_sha2_512(ptr noundef %151, ptr noundef nonnull %160, i32 noundef 64, ptr noundef %151, i32 noundef 64) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(64) %149, ptr noundef nonnull align 16 dereferenceable(64) %160, i64 64, i1 false)
  call void @llvm.stackrestore.p0(ptr %155)
  br label %163

163:                                              ; preds = %152, %148
  %.not450 = icmp ult i32 %3, 64
  br i1 %.not450, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %163
  %164 = lshr i32 %3, 6
  %wide.trip.count = zext nneg i32 %164 to i64
  br label %.lr.ph

._crit_edge:                                      ; preds = %.lr.ph, %163
  %165 = and i32 %3, -64
  %.not422 = icmp eq i32 %165, %3
  br i1 %.not422, label %173, label %168

.lr.ph:                                           ; preds = %.lr.ph.preheader, %.lr.ph
  %indvars.iv = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next, %.lr.ph ]
  call void @Hacl_HMAC_compute_sha2_512(ptr noundef %151, ptr noundef %149, i32 noundef 64, ptr noundef %151, i32 noundef 64) #7
  %166 = shl nuw i64 %indvars.iv, 6
  %167 = getelementptr inbounds i8, ptr %1, i64 %166
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(64) %167, ptr noundef nonnull align 1 dereferenceable(64) %151, i64 64, i1 false)
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !19

168:                                              ; preds = %._crit_edge
  %169 = zext i32 %165 to i64
  %170 = getelementptr inbounds i8, ptr %1, i64 %169
  call void @Hacl_HMAC_compute_sha2_512(ptr noundef %151, ptr noundef %149, i32 noundef 64, ptr noundef %151, i32 noundef 64) #7
  %171 = and i32 %3, 63
  %172 = zext nneg i32 %171 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %170, ptr align 1 %151, i64 %172, i1 false)
  br label %173

173:                                              ; preds = %168, %._crit_edge
  %174 = add i32 %4, 65
  %175 = zext i32 %174 to i64
  %176 = call ptr @llvm.stacksave.p0()
  %177 = alloca i8, i64 %175, align 16
  call void @llvm.memset.p0.i64(ptr nonnull align 16 %177, i8 0, i64 %175, i1 false)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(64) %177, ptr noundef nonnull align 1 dereferenceable(64) %151, i64 64, i1 false)
  br i1 %.not, label %.critedge436, label %178

178:                                              ; preds = %173
  %179 = getelementptr inbounds i8, ptr %177, i64 65
  %180 = zext i32 %4 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %179, ptr align 1 %5, i64 %180, i1 false)
  %181 = getelementptr inbounds i8, ptr %177, i64 64
  store i8 0, ptr %181, align 16, !tbaa !14
  call void @Hacl_HMAC_compute_sha2_512(ptr noundef nonnull %177, ptr noundef %149, i32 noundef 64, ptr noundef nonnull %177, i32 noundef %174) #7
  call void @Hacl_HMAC_compute_sha2_512(ptr noundef nonnull %151, ptr noundef nonnull %177, i32 noundef 64, ptr noundef nonnull %151, i32 noundef 64) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(64) %149, ptr noundef nonnull align 16 dereferenceable(64) %177, i64 64, i1 false)
  %182 = call ptr @llvm.stacksave.p0()
  %183 = alloca i8, i64 %175, align 16
  call void @llvm.memset.p0.i64(ptr nonnull align 16 %183, i8 0, i64 %175, i1 false)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(64) %183, ptr noundef nonnull align 1 dereferenceable(64) %151, i64 64, i1 false)
  %184 = getelementptr inbounds i8, ptr %183, i64 65
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %184, ptr align 1 %5, i64 %180, i1 false)
  %185 = getelementptr inbounds i8, ptr %183, i64 64
  store i8 1, ptr %185, align 16, !tbaa !14
  call void @Hacl_HMAC_compute_sha2_512(ptr noundef nonnull %183, ptr noundef %149, i32 noundef 64, ptr noundef nonnull %183, i32 noundef %174) #7
  call void @Hacl_HMAC_compute_sha2_512(ptr noundef nonnull %151, ptr noundef nonnull %183, i32 noundef 64, ptr noundef nonnull %151, i32 noundef 64) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(64) %149, ptr noundef nonnull align 16 dereferenceable(64) %183, i64 64, i1 false)
  call void @llvm.stackrestore.p0(ptr %182)
  br label %.sink.split

.critedge436:                                     ; preds = %173
  %186 = getelementptr inbounds i8, ptr %177, i64 64
  store i8 0, ptr %186, align 16, !tbaa !14
  call void @Hacl_HMAC_compute_sha2_512(ptr noundef nonnull %177, ptr noundef %149, i32 noundef 64, ptr noundef nonnull %177, i32 noundef %174) #7
  call void @Hacl_HMAC_compute_sha2_512(ptr noundef nonnull %151, ptr noundef nonnull %177, i32 noundef 64, ptr noundef nonnull %151, i32 noundef 64) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(64) %149, ptr noundef nonnull align 16 dereferenceable(64) %177, i64 64, i1 false)
  br label %.sink.split

187:                                              ; preds = %6
  %188 = load ptr, ptr @stderr, align 8, !tbaa !20
  %189 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %188, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1049) #8
  tail call void @exit(i32 noundef 253) #9
  unreachable

.sink.split:                                      ; preds = %178, %.critedge436, %133, %.critedge434, %88, %.critedge432, %43, %.critedge
  %.sink473 = phi ptr [ %9, %.critedge ], [ %9, %43 ], [ %54, %.critedge432 ], [ %54, %88 ], [ %99, %.critedge434 ], [ %99, %133 ], [ %144, %.critedge436 ], [ %144, %178 ]
  %.sink = phi ptr [ %41, %.critedge ], [ %41, %43 ], [ %86, %.critedge432 ], [ %86, %88 ], [ %131, %.critedge434 ], [ %131, %133 ], [ %176, %.critedge436 ], [ %176, %178 ]
  %190 = load i32, ptr %.sink473, align 4, !tbaa !10
  %191 = add i32 %190, 1
  store i32 %191, ptr %.sink473, align 4, !tbaa !10
  call void @llvm.stackrestore.p0(ptr %.sink)
  br label %192

192:                                              ; preds = %.sink.split, %142, %97, %52, %7
  %.0 = phi i1 [ false, %7 ], [ false, %52 ], [ false, %97 ], [ false, %142 ], [ true, %.sink.split ]
  ret i1 %.0
}

attributes #0 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nocallback nofree nosync nounwind willreturn }
attributes #3 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #4 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { "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 #6 = { 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 #7 = { nounwind }
attributes #8 = { cold nounwind }
attributes #9 = { noreturn 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, !7, i64 16}
!6 = !{!"Hacl_HMAC_DRBG_state_s", !7, i64 0, !7, i64 8, !7, i64 16}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!11, !11, i64 0}
!11 = !{!"int", !8, i64 0}
!12 = !{!6, !7, i64 0}
!13 = !{!6, !7, i64 8}
!14 = !{!8, !8, i64 0}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}
!17 = distinct !{!17, !16}
!18 = distinct !{!18, !16}
!19 = distinct !{!19, !16}
!20 = !{!7, !7, i64 0}


; Effective O3 passes: CorrelatedValuePropagationPass,DivRemPairsPass,EarlyCSEPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass