; LLVM IR from intel/QAT_Engine :: kpt/apps (kpt_ecc_key)

; 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.kpt_ecc_key_st = type { i64, ptr, ptr, ptr, ptr }
%struct.kpt_ecc_wpk_st = type { i64, [32 x [512 x i8]], [32 x [512 x i8]], [1024 x i8], [1024 x i8], [32 x i32], [32 x i32], i32, i32, i32, i32 }
%struct.wrapping_metadata = type { ptr, ptr, ptr }
%struct.e_swk = type { ptr, ptr }

@.str.15 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [28 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local ptr @d2i_KPTECCKEY(ptr noundef, ptr noundef, i64 noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local void @KPTECCKEY_free(ptr noundef) #0

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

declare ptr @BIO_new(ptr noundef) #2

declare ptr @BIO_s_file() #2

declare i64 @BIO_ctrl(ptr noundef, i32 noundef, i64 noundef, ptr noundef) #2

; Function Attrs: nounwind uwtable
declare hidden void @hex_log(ptr noundef, i32 noundef, ptr noundef) #0

declare i32 @xlog(i32 noundef, ptr noundef, ...) #2

; 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) #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @sk_ESWK_num(ptr noundef) #4

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

; Function Attrs: nounwind uwtable
define dso_local i32 @kpt_ecc_wpk_parse(ptr noundef %0, ptr noundef %1) #0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca i64, align 8
  %12 = alloca i64, align 8
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca [384 x i8], align 16
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #5
  store ptr null, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #5
  store ptr null, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #5
  store ptr null, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #5
  store ptr null, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #5
  store ptr null, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #5
  store ptr null, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #5
  store i64 0, ptr %11, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #5
  store i32 0, ptr %13, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #5
  store i32 0, ptr %14, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 384, ptr %15) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #5
  store ptr null, ptr %16, align 8, !tbaa !5
  %18 = call ptr @BIO_s_file()
  %19 = call ptr @BIO_new(ptr noundef %18)
  store ptr %19, ptr %6, align 8, !tbaa !5
  %20 = load ptr, ptr %6, align 8, !tbaa !5
  %21 = load ptr, ptr %4, align 8, !tbaa !5
  %22 = call i64 @BIO_ctrl(ptr noundef %20, i32 noundef 108, i64 noundef 3, ptr noundef %21)
  %23 = trunc i64 %22 to i32
  %24 = icmp sle i32 %23, 0
  br i1 %24, label %25, label %26

25:                                               ; preds = %2
  br label %231

26:                                               ; preds = %2
  %27 = load ptr, ptr %6, align 8, !tbaa !5
  %28 = call i32 @PEM_read_bio(ptr noundef %27, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %12)
  store i32 %28, ptr %13, align 4, !tbaa !11
  %29 = load ptr, ptr %9, align 8, !tbaa !5
  store ptr %29, ptr %10, align 8, !tbaa !5
  %30 = load i64, ptr %12, align 8, !tbaa !9
  %31 = call ptr @d2i_KPTECCKEY(ptr noundef %5, ptr noundef %10, i64 noundef %30)
  %32 = load ptr, ptr %5, align 8, !tbaa !5
  %33 = icmp ne ptr %32, null
  br i1 %33, label %35, label %34

34:                                               ; preds = %26
  br label %231

35:                                               ; preds = %26
  %36 = load ptr, ptr %5, align 8, !tbaa !5
  %37 = getelementptr inbounds %struct.kpt_ecc_key_st, ptr %36, i32 0, i32 0
  %38 = load i64, ptr %37, align 8, !tbaa !13
  %39 = load ptr, ptr %3, align 8, !tbaa !5
  %40 = getelementptr inbounds %struct.kpt_ecc_wpk_st, ptr %39, i32 0, i32 0
  store i64 %38, ptr %40, align 8, !tbaa !15
  %41 = load ptr, ptr %5, align 8, !tbaa !5
  %42 = getelementptr inbounds %struct.kpt_ecc_key_st, ptr %41, i32 0, i32 1
  %43 = load ptr, ptr %42, align 8, !tbaa !17
  %44 = call i32 @ASN1_STRING_length(ptr noundef %43)
  %45 = load ptr, ptr %3, align 8, !tbaa !5
  %46 = getelementptr inbounds %struct.kpt_ecc_wpk_st, ptr %45, i32 0, i32 7
  store i32 %44, ptr %46, align 8, !tbaa !18
  %47 = load ptr, ptr %3, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.kpt_ecc_wpk_st, ptr %47, i32 0, i32 3
  %49 = getelementptr inbounds [1024 x i8], ptr %48, i64 0, i64 0
  %50 = load ptr, ptr %5, align 8, !tbaa !5
  %51 = getelementptr inbounds %struct.kpt_ecc_key_st, ptr %50, i32 0, i32 1
  %52 = load ptr, ptr %51, align 8, !tbaa !17
  %53 = call ptr @ASN1_STRING_get0_data(ptr noundef %52)
  %54 = load ptr, ptr %3, align 8, !tbaa !5
  %55 = getelementptr inbounds %struct.kpt_ecc_wpk_st, ptr %54, i32 0, i32 7
  %56 = load i32, ptr %55, align 8, !tbaa !18
  %57 = sext i32 %56 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %49, ptr align 1 %53, i64 %57, i1 false)
  %58 = load ptr, ptr %5, align 8, !tbaa !5
  %59 = getelementptr inbounds %struct.kpt_ecc_key_st, ptr %58, i32 0, i32 4
  %60 = load ptr, ptr %59, align 8, !tbaa !19
  store ptr %60, ptr %16, align 8, !tbaa !5
  %61 = load ptr, ptr %16, align 8, !tbaa !5
  %62 = getelementptr inbounds %struct.wrapping_metadata, ptr %61, i32 0, i32 1
  %63 = load ptr, ptr %62, align 8, !tbaa !20
  %64 = call i32 @OBJ_obj2nid(ptr noundef %63)
  %65 = load ptr, ptr %3, align 8, !tbaa !5
  %66 = getelementptr inbounds %struct.kpt_ecc_wpk_st, ptr %65, i32 0, i32 10
  store i32 %64, ptr %66, align 4, !tbaa !22
  store i32 0, ptr %14, align 4, !tbaa !11
  br label %67

67:                                               ; preds = %132, %35
  %68 = load i32, ptr %14, align 4, !tbaa !11
  %69 = load ptr, ptr %16, align 8, !tbaa !5
  %70 = getelementptr inbounds %struct.wrapping_metadata, ptr %69, i32 0, i32 2
  %71 = load ptr, ptr %70, align 8, !tbaa !23
  %72 = call i32 @sk_ESWK_num(ptr noundef %71)
  %73 = icmp slt i32 %68, %72
  br i1 %73, label %74, label %135

74:                                               ; preds = %67
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #5
  %75 = load ptr, ptr %16, align 8, !tbaa !5
  %76 = getelementptr inbounds %struct.wrapping_metadata, ptr %75, i32 0, i32 2
  %77 = load ptr, ptr %76, align 8, !tbaa !23
  %78 = load i32, ptr %14, align 4, !tbaa !11
  %79 = call ptr @sk_ESWK_value(ptr noundef %77, i32 noundef %78)
  store ptr %79, ptr %17, align 8, !tbaa !5
  %80 = load ptr, ptr %17, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.e_swk, ptr %80, i32 0, i32 1
  %82 = load ptr, ptr %81, align 8, !tbaa !24
  %83 = call i32 @ASN1_STRING_length(ptr noundef %82)
  %84 = load ptr, ptr %3, align 8, !tbaa !5
  %85 = getelementptr inbounds %struct.kpt_ecc_wpk_st, ptr %84, i32 0, i32 5
  %86 = load i32, ptr %14, align 4, !tbaa !11
  %87 = sext i32 %86 to i64
  %88 = getelementptr inbounds [32 x i32], ptr %85, i64 0, i64 %87
  store i32 %83, ptr %88, align 4, !tbaa !11
  %89 = load ptr, ptr %3, align 8, !tbaa !5
  %90 = getelementptr inbounds %struct.kpt_ecc_wpk_st, ptr %89, i32 0, i32 1
  %91 = load i32, ptr %14, align 4, !tbaa !11
  %92 = sext i32 %91 to i64
  %93 = getelementptr inbounds [32 x [512 x i8]], ptr %90, i64 0, i64 %92
  %94 = getelementptr inbounds [512 x i8], ptr %93, i64 0, i64 0
  %95 = load ptr, ptr %17, align 8, !tbaa !5
  %96 = getelementptr inbounds %struct.e_swk, ptr %95, i32 0, i32 1
  %97 = load ptr, ptr %96, align 8, !tbaa !24
  %98 = call ptr @ASN1_STRING_get0_data(ptr noundef %97)
  %99 = load ptr, ptr %3, align 8, !tbaa !5
  %100 = getelementptr inbounds %struct.kpt_ecc_wpk_st, ptr %99, i32 0, i32 5
  %101 = load i32, ptr %14, align 4, !tbaa !11
  %102 = sext i32 %101 to i64
  %103 = getelementptr inbounds [32 x i32], ptr %100, i64 0, i64 %102
  %104 = load i32, ptr %103, align 4, !tbaa !11
  %105 = sext i32 %104 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %94, ptr align 1 %98, i64 %105, i1 false)
  %106 = load ptr, ptr %17, align 8, !tbaa !5
  %107 = getelementptr inbounds %struct.e_swk, ptr %106, i32 0, i32 0
  %108 = load ptr, ptr %107, align 8, !tbaa !26
  %109 = call i32 @ASN1_STRING_length(ptr noundef %108)
  %110 = load ptr, ptr %3, align 8, !tbaa !5
  %111 = getelementptr inbounds %struct.kpt_ecc_wpk_st, ptr %110, i32 0, i32 6
  %112 = load i32, ptr %14, align 4, !tbaa !11
  %113 = sext i32 %112 to i64
  %114 = getelementptr inbounds [32 x i32], ptr %111, i64 0, i64 %113
  store i32 %109, ptr %114, align 4, !tbaa !11
  %115 = load ptr, ptr %3, align 8, !tbaa !5
  %116 = getelementptr inbounds %struct.kpt_ecc_wpk_st, ptr %115, i32 0, i32 2
  %117 = load i32, ptr %14, align 4, !tbaa !11
  %118 = sext i32 %117 to i64
  %119 = getelementptr inbounds [32 x [512 x i8]], ptr %116, i64 0, i64 %118
  %120 = getelementptr inbounds [512 x i8], ptr %119, i64 0, i64 0
  %121 = load ptr, ptr %17, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct.e_swk, ptr %121, i32 0, i32 0
  %123 = load ptr, ptr %122, align 8, !tbaa !26
  %124 = call ptr @ASN1_STRING_get0_data(ptr noundef %123)
  %125 = load ptr, ptr %3, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct.kpt_ecc_wpk_st, ptr %125, i32 0, i32 6
  %127 = load i32, ptr %14, align 4, !tbaa !11
  %128 = sext i32 %127 to i64
  %129 = getelementptr inbounds [32 x i32], ptr %126, i64 0, i64 %128
  %130 = load i32, ptr %129, align 4, !tbaa !11
  %131 = sext i32 %130 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %120, ptr align 1 %124, i64 %131, i1 false)
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #5
  br label %132

132:                                              ; preds = %74
  %133 = load i32, ptr %14, align 4, !tbaa !11
  %134 = add nsw i32 %133, 1
  store i32 %134, ptr %14, align 4, !tbaa !11
  br label %67, !llvm.loop !27

135:                                              ; preds = %67
  %136 = load ptr, ptr %5, align 8, !tbaa !5
  %137 = getelementptr inbounds %struct.kpt_ecc_key_st, ptr %136, i32 0, i32 2
  %138 = load ptr, ptr %137, align 8, !tbaa !29
  %139 = call i32 @OBJ_obj2nid(ptr noundef %138)
  %140 = load ptr, ptr %3, align 8, !tbaa !5
  %141 = getelementptr inbounds %struct.kpt_ecc_wpk_st, ptr %140, i32 0, i32 9
  store i32 %139, ptr %141, align 8, !tbaa !30
  %142 = load ptr, ptr %5, align 8, !tbaa !5
  %143 = getelementptr inbounds %struct.kpt_ecc_key_st, ptr %142, i32 0, i32 3
  %144 = load ptr, ptr %143, align 8, !tbaa !31
  %145 = call i32 @ASN1_STRING_length(ptr noundef %144)
  %146 = load ptr, ptr %3, align 8, !tbaa !5
  %147 = getelementptr inbounds %struct.kpt_ecc_wpk_st, ptr %146, i32 0, i32 8
  store i32 %145, ptr %147, align 4, !tbaa !32
  %148 = load ptr, ptr %3, align 8, !tbaa !5
  %149 = getelementptr inbounds %struct.kpt_ecc_wpk_st, ptr %148, i32 0, i32 4
  %150 = getelementptr inbounds [1024 x i8], ptr %149, i64 0, i64 0
  %151 = load ptr, ptr %5, align 8, !tbaa !5
  %152 = getelementptr inbounds %struct.kpt_ecc_key_st, ptr %151, i32 0, i32 3
  %153 = load ptr, ptr %152, align 8, !tbaa !31
  %154 = call ptr @ASN1_STRING_get0_data(ptr noundef %153)
  %155 = load ptr, ptr %3, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct.kpt_ecc_wpk_st, ptr %155, i32 0, i32 8
  %157 = load i32, ptr %156, align 4, !tbaa !32
  %158 = sext i32 %157 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %150, ptr align 1 %154, i64 %158, i1 false)
  %159 = call i32 (i32, ptr, ...) @xlog(i32 noundef 2, ptr noundef @.str.15)
  %160 = load ptr, ptr %3, align 8, !tbaa !5
  %161 = getelementptr inbounds %struct.kpt_ecc_wpk_st, ptr %160, i32 0, i32 0
  %162 = load i64, ptr %161, align 8, !tbaa !15
  %163 = call i32 (i32, ptr, ...) @xlog(i32 noundef 2, ptr noundef @.str.16, i64 noundef %162)
  %164 = load ptr, ptr %3, align 8, !tbaa !5
  %165 = getelementptr inbounds %struct.kpt_ecc_wpk_st, ptr %164, i32 0, i32 3
  %166 = getelementptr inbounds [1024 x i8], ptr %165, i64 0, i64 0
  %167 = load ptr, ptr %3, align 8, !tbaa !5
  %168 = getelementptr inbounds %struct.kpt_ecc_wpk_st, ptr %167, i32 0, i32 7
  %169 = load i32, ptr %168, align 8, !tbaa !18
  call void @hex_log(ptr noundef %166, i32 noundef %169, ptr noundef @.str.17)
  %170 = load ptr, ptr %3, align 8, !tbaa !5
  %171 = getelementptr inbounds %struct.kpt_ecc_wpk_st, ptr %170, i32 0, i32 9
  %172 = load i32, ptr %171, align 8, !tbaa !30
  %173 = call i32 (i32, ptr, ...) @xlog(i32 noundef 2, ptr noundef @.str.18, i32 noundef %172)
  %174 = load ptr, ptr %3, align 8, !tbaa !5
  %175 = getelementptr inbounds %struct.kpt_ecc_wpk_st, ptr %174, i32 0, i32 4
  %176 = getelementptr inbounds [1024 x i8], ptr %175, i64 0, i64 0
  %177 = load ptr, ptr %3, align 8, !tbaa !5
  %178 = getelementptr inbounds %struct.kpt_ecc_wpk_st, ptr %177, i32 0, i32 8
  %179 = load i32, ptr %178, align 4, !tbaa !32
  call void @hex_log(ptr noundef %176, i32 noundef %179, ptr noundef @.str.19)
  %180 = load ptr, ptr %16, align 8, !tbaa !5
  %181 = getelementptr inbounds %struct.wrapping_metadata, ptr %180, i32 0, i32 0
  %182 = load ptr, ptr %181, align 8, !tbaa !33
  %183 = call ptr @ASN1_STRING_get0_data(ptr noundef %182)
  %184 = load ptr, ptr %16, align 8, !tbaa !5
  %185 = getelementptr inbounds %struct.wrapping_metadata, ptr %184, i32 0, i32 0
  %186 = load ptr, ptr %185, align 8, !tbaa !33
  %187 = call i32 @ASN1_STRING_length(ptr noundef %186)
  call void @hex_log(ptr noundef %183, i32 noundef %187, ptr noundef @.str.20)
  %188 = load ptr, ptr %3, align 8, !tbaa !5
  %189 = getelementptr inbounds %struct.kpt_ecc_wpk_st, ptr %188, i32 0, i32 10
  %190 = load i32, ptr %189, align 4, !tbaa !22
  %191 = call i32 (i32, ptr, ...) @xlog(i32 noundef 2, ptr noundef @.str.21, i32 noundef %190)
  store i32 0, ptr %14, align 4, !tbaa !11
  br label %192

192:                                              ; preds = %226, %135
  %193 = load i32, ptr %14, align 4, !tbaa !11
  %194 = load ptr, ptr %16, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct.wrapping_metadata, ptr %194, i32 0, i32 2
  %196 = load ptr, ptr %195, align 8, !tbaa !23
  %197 = call i32 @sk_ESWK_num(ptr noundef %196)
  %198 = icmp slt i32 %193, %197
  br i1 %198, label %199, label %229

199:                                              ; preds = %192
  %200 = load i32, ptr %14, align 4, !tbaa !11
  %201 = call i32 (i32, ptr, ...) @xlog(i32 noundef 2, ptr noundef @.str.22, i32 noundef %200)
  %202 = load ptr, ptr %3, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct.kpt_ecc_wpk_st, ptr %202, i32 0, i32 1
  %204 = load i32, ptr %14, align 4, !tbaa !11
  %205 = sext i32 %204 to i64
  %206 = getelementptr inbounds [32 x [512 x i8]], ptr %203, i64 0, i64 %205
  %207 = getelementptr inbounds [512 x i8], ptr %206, i64 0, i64 0
  %208 = load ptr, ptr %3, align 8, !tbaa !5
  %209 = getelementptr inbounds %struct.kpt_ecc_wpk_st, ptr %208, i32 0, i32 5
  %210 = load i32, ptr %14, align 4, !tbaa !11
  %211 = sext i32 %210 to i64
  %212 = getelementptr inbounds [32 x i32], ptr %209, i64 0, i64 %211
  %213 = load i32, ptr %212, align 4, !tbaa !11
  call void @hex_log(ptr noundef %207, i32 noundef %213, ptr noundef @.str.23)
  %214 = load ptr, ptr %3, align 8, !tbaa !5
  %215 = getelementptr inbounds %struct.kpt_ecc_wpk_st, ptr %214, i32 0, i32 2
  %216 = load i32, ptr %14, align 4, !tbaa !11
  %217 = sext i32 %216 to i64
  %218 = getelementptr inbounds [32 x [512 x i8]], ptr %215, i64 0, i64 %217
  %219 = getelementptr inbounds [512 x i8], ptr %218, i64 0, i64 0
  %220 = load ptr, ptr %3, align 8, !tbaa !5
  %221 = getelementptr inbounds %struct.kpt_ecc_wpk_st, ptr %220, i32 0, i32 6
  %222 = load i32, ptr %14, align 4, !tbaa !11
  %223 = sext i32 %222 to i64
  %224 = getelementptr inbounds [32 x i32], ptr %221, i64 0, i64 %223
  %225 = load i32, ptr %224, align 4, !tbaa !11
  call void @hex_log(ptr noundef %219, i32 noundef %225, ptr noundef @.str.24)
  br label %226

226:                                              ; preds = %199
  %227 = load i32, ptr %14, align 4, !tbaa !11
  %228 = add nsw i32 %227, 1
  store i32 %228, ptr %14, align 4, !tbaa !11
  br label %192, !llvm.loop !34

229:                                              ; preds = %192
  %230 = call i32 (i32, ptr, ...) @xlog(i32 noundef 2, ptr noundef @.str.25)
  br label %231

231:                                              ; preds = %229, %34, %25
  %232 = load ptr, ptr %5, align 8, !tbaa !5
  %233 = icmp ne ptr %232, null
  br i1 %233, label %234, label %236

234:                                              ; preds = %231
  %235 = load ptr, ptr %5, align 8, !tbaa !5
  call void @KPTECCKEY_free(ptr noundef %235)
  br label %236

236:                                              ; preds = %234, %231
  %237 = load i32, ptr %13, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 384, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #5
  ret i32 %237
}

declare i32 @PEM_read_bio(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

declare i32 @ASN1_STRING_length(ptr noundef) #2

declare ptr @ASN1_STRING_get0_data(ptr noundef) #2

declare i32 @OBJ_obj2nid(ptr noundef) #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @sk_ESWK_value(ptr noundef, i32 noundef) #4

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !10, i64 0}
!14 = !{!"kpt_ecc_key_st", !10, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32}
!15 = !{!16, !10, i64 0}
!16 = !{!"kpt_ecc_wpk_st", !10, i64 0, !7, i64 8, !7, i64 16392, !7, i64 32776, !7, i64 33800, !7, i64 34824, !7, i64 34952, !12, i64 35080, !12, i64 35084, !12, i64 35088, !12, i64 35092}
!17 = !{!14, !6, i64 8}
!18 = !{!16, !12, i64 35080}
!19 = !{!14, !6, i64 32}
!20 = !{!21, !6, i64 8}
!21 = !{!"wrapping_metadata", !6, i64 0, !6, i64 8, !6, i64 16}
!22 = !{!16, !12, i64 35092}
!23 = !{!21, !6, i64 16}
!24 = !{!25, !6, i64 8}
!25 = !{!"e_swk", !6, i64 0, !6, i64 8}
!26 = !{!25, !6, i64 0}
!27 = distinct !{!27, !28}
!28 = !{!"llvm.loop.mustprogress"}
!29 = !{!14, !6, i64 16}
!30 = !{!16, !12, i64 35088}
!31 = !{!14, !6, i64 24}
!32 = !{!16, !12, i64 35084}
!33 = !{!21, !6, i64 0}
!34 = distinct !{!34, !28}


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

@.str.15 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [28 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local ptr @d2i_KPTECCKEY(ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #0

; Function Attrs: nounwind uwtable
declare dso_local void @KPTECCKEY_free(ptr noundef) local_unnamed_addr #0

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

declare ptr @BIO_new(ptr noundef) local_unnamed_addr #2

declare ptr @BIO_s_file() local_unnamed_addr #2

declare i64 @BIO_ctrl(ptr noundef, i32 noundef, i64 noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare hidden void @hex_log(ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #0

declare i32 @xlog(i32 noundef, ptr noundef, ...) local_unnamed_addr #2

; 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) #3

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @sk_ESWK_num(ptr noundef) local_unnamed_addr #4

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

; Function Attrs: nounwind uwtable
define dso_local i32 @kpt_ecc_wpk_parse(ptr noundef %0, ptr noundef %1) local_unnamed_addr #0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i64, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #5
  store ptr null, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #5
  store ptr null, ptr %4, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #5
  store ptr null, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #5
  store ptr null, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #5
  %9 = tail call ptr @BIO_s_file() #5
  %10 = tail call ptr @BIO_new(ptr noundef %9) #5
  %11 = tail call i64 @BIO_ctrl(ptr noundef %10, i32 noundef 108, i64 noundef 3, ptr noundef %1) #5
  %12 = trunc i64 %11 to i32
  %13 = icmp slt i32 %12, 1
  br i1 %13, label %.thread, label %14

14:                                               ; preds = %2
  %15 = call i32 @PEM_read_bio(ptr noundef %10, ptr noundef nonnull %4, ptr noundef nonnull %5, ptr noundef nonnull %6, ptr noundef nonnull %8) #5
  %16 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %16, ptr %7, align 8, !tbaa !5
  %17 = load i64, ptr %8, align 8, !tbaa !9
  %18 = call ptr @d2i_KPTECCKEY(ptr noundef nonnull %3, ptr noundef nonnull %7, i64 noundef %17)
  %19 = load ptr, ptr %3, align 8, !tbaa !5
  %.not = icmp eq ptr %19, null
  br i1 %.not, label %.thread, label %20

20:                                               ; preds = %14
  %21 = load i64, ptr %19, align 8, !tbaa !11
  store i64 %21, ptr %0, align 8, !tbaa !13
  %22 = getelementptr inbounds i8, ptr %19, i64 8
  %23 = load ptr, ptr %22, align 8, !tbaa !16
  %24 = call i32 @ASN1_STRING_length(ptr noundef %23) #5
  %25 = getelementptr inbounds i8, ptr %0, i64 35080
  store i32 %24, ptr %25, align 8, !tbaa !17
  %26 = getelementptr inbounds i8, ptr %0, i64 32776
  %27 = load ptr, ptr %3, align 8, !tbaa !5
  %28 = getelementptr inbounds i8, ptr %27, i64 8
  %29 = load ptr, ptr %28, align 8, !tbaa !16
  %30 = call ptr @ASN1_STRING_get0_data(ptr noundef %29) #5
  %31 = load i32, ptr %25, align 8, !tbaa !17
  %32 = sext i32 %31 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 8 %26, ptr align 1 %30, i64 %32, i1 false)
  %33 = load ptr, ptr %3, align 8, !tbaa !5
  %34 = getelementptr inbounds i8, ptr %33, i64 32
  %35 = load ptr, ptr %34, align 8, !tbaa !18
  %36 = getelementptr inbounds i8, ptr %35, i64 8
  %37 = load ptr, ptr %36, align 8, !tbaa !19
  %38 = call i32 @OBJ_obj2nid(ptr noundef %37) #5
  %39 = getelementptr inbounds i8, ptr %0, i64 35092
  store i32 %38, ptr %39, align 4, !tbaa !21
  %40 = getelementptr inbounds i8, ptr %35, i64 16
  %41 = load ptr, ptr %40, align 8, !tbaa !22
  %42 = call i32 @sk_ESWK_num(ptr noundef %41)
  %43 = icmp sgt i32 %42, 0
  br i1 %43, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %20
  %44 = getelementptr inbounds i8, ptr %0, i64 34824
  %45 = getelementptr inbounds i8, ptr %0, i64 8
  %46 = getelementptr inbounds i8, ptr %0, i64 34952
  %47 = getelementptr inbounds i8, ptr %0, i64 16392
  br label %48

48:                                               ; preds = %.lr.ph, %48
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %48 ]
  %49 = load ptr, ptr %40, align 8, !tbaa !22
  %50 = trunc nuw nsw i64 %indvars.iv to i32
  %51 = call ptr @sk_ESWK_value(ptr noundef %49, i32 noundef %50)
  %52 = getelementptr inbounds i8, ptr %51, i64 8
  %53 = load ptr, ptr %52, align 8, !tbaa !23
  %54 = call i32 @ASN1_STRING_length(ptr noundef %53) #5
  %55 = getelementptr inbounds [32 x i32], ptr %44, i64 0, i64 %indvars.iv
  store i32 %54, ptr %55, align 4, !tbaa !25
  %56 = getelementptr inbounds [32 x [512 x i8]], ptr %45, i64 0, i64 %indvars.iv
  %57 = load ptr, ptr %52, align 8, !tbaa !23
  %58 = call ptr @ASN1_STRING_get0_data(ptr noundef %57) #5
  %59 = load i32, ptr %55, align 4, !tbaa !25
  %60 = sext i32 %59 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 8 %56, ptr align 1 %58, i64 %60, i1 false)
  %61 = load ptr, ptr %51, align 8, !tbaa !26
  %62 = call i32 @ASN1_STRING_length(ptr noundef %61) #5
  %63 = getelementptr inbounds [32 x i32], ptr %46, i64 0, i64 %indvars.iv
  store i32 %62, ptr %63, align 4, !tbaa !25
  %64 = getelementptr inbounds [32 x [512 x i8]], ptr %47, i64 0, i64 %indvars.iv
  %65 = load ptr, ptr %51, align 8, !tbaa !26
  %66 = call ptr @ASN1_STRING_get0_data(ptr noundef %65) #5
  %67 = load i32, ptr %63, align 4, !tbaa !25
  %68 = sext i32 %67 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 8 %64, ptr align 1 %66, i64 %68, i1 false)
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %69 = load ptr, ptr %40, align 8, !tbaa !22
  %70 = call i32 @sk_ESWK_num(ptr noundef %69)
  %71 = sext i32 %70 to i64
  %72 = icmp slt i64 %indvars.iv.next, %71
  br i1 %72, label %48, label %._crit_edge, !llvm.loop !27

._crit_edge:                                      ; preds = %48, %20
  %73 = load ptr, ptr %3, align 8, !tbaa !5
  %74 = getelementptr inbounds i8, ptr %73, i64 16
  %75 = load ptr, ptr %74, align 8, !tbaa !29
  %76 = call i32 @OBJ_obj2nid(ptr noundef %75) #5
  %77 = getelementptr inbounds i8, ptr %0, i64 35088
  store i32 %76, ptr %77, align 8, !tbaa !30
  %78 = load ptr, ptr %3, align 8, !tbaa !5
  %79 = getelementptr inbounds i8, ptr %78, i64 24
  %80 = load ptr, ptr %79, align 8, !tbaa !31
  %81 = call i32 @ASN1_STRING_length(ptr noundef %80) #5
  %82 = getelementptr inbounds i8, ptr %0, i64 35084
  store i32 %81, ptr %82, align 4, !tbaa !32
  %83 = getelementptr inbounds i8, ptr %0, i64 33800
  %84 = load ptr, ptr %3, align 8, !tbaa !5
  %85 = getelementptr inbounds i8, ptr %84, i64 24
  %86 = load ptr, ptr %85, align 8, !tbaa !31
  %87 = call ptr @ASN1_STRING_get0_data(ptr noundef %86) #5
  %88 = load i32, ptr %82, align 4, !tbaa !32
  %89 = sext i32 %88 to i64
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 8 %83, ptr align 1 %87, i64 %89, i1 false)
  %90 = call i32 (i32, ptr, ...) @xlog(i32 noundef 2, ptr noundef nonnull @.str.15) #5
  %91 = load i64, ptr %0, align 8, !tbaa !13
  %92 = call i32 (i32, ptr, ...) @xlog(i32 noundef 2, ptr noundef nonnull @.str.16, i64 noundef %91) #5
  %93 = load i32, ptr %25, align 8, !tbaa !17
  call void @hex_log(ptr noundef nonnull %26, i32 noundef %93, ptr noundef nonnull @.str.17)
  %94 = load i32, ptr %77, align 8, !tbaa !30
  %95 = call i32 (i32, ptr, ...) @xlog(i32 noundef 2, ptr noundef nonnull @.str.18, i32 noundef %94) #5
  %96 = load i32, ptr %82, align 4, !tbaa !32
  call void @hex_log(ptr noundef nonnull %83, i32 noundef %96, ptr noundef nonnull @.str.19)
  %97 = load ptr, ptr %35, align 8, !tbaa !33
  %98 = call ptr @ASN1_STRING_get0_data(ptr noundef %97) #5
  %99 = load ptr, ptr %35, align 8, !tbaa !33
  %100 = call i32 @ASN1_STRING_length(ptr noundef %99) #5
  call void @hex_log(ptr noundef %98, i32 noundef %100, ptr noundef nonnull @.str.20)
  %101 = load i32, ptr %39, align 4, !tbaa !21
  %102 = call i32 (i32, ptr, ...) @xlog(i32 noundef 2, ptr noundef nonnull @.str.21, i32 noundef %101) #5
  %103 = load ptr, ptr %40, align 8, !tbaa !22
  %104 = call i32 @sk_ESWK_num(ptr noundef %103)
  %105 = icmp sgt i32 %104, 0
  br i1 %105, label %.lr.ph65, label %.loopexit

.lr.ph65:                                         ; preds = %._crit_edge
  %106 = getelementptr inbounds i8, ptr %0, i64 8
  %107 = getelementptr inbounds i8, ptr %0, i64 34824
  %108 = getelementptr inbounds i8, ptr %0, i64 16392
  %109 = getelementptr inbounds i8, ptr %0, i64 34952
  br label %110

110:                                              ; preds = %.lr.ph65, %110
  %indvars.iv68 = phi i64 [ 0, %.lr.ph65 ], [ %indvars.iv.next69, %110 ]
  %111 = trunc nuw nsw i64 %indvars.iv68 to i32
  %112 = call i32 (i32, ptr, ...) @xlog(i32 noundef 2, ptr noundef nonnull @.str.22, i32 noundef %111) #5
  %113 = getelementptr inbounds [32 x [512 x i8]], ptr %106, i64 0, i64 %indvars.iv68
  %114 = getelementptr inbounds [32 x i32], ptr %107, i64 0, i64 %indvars.iv68
  %115 = load i32, ptr %114, align 4, !tbaa !25
  call void @hex_log(ptr noundef nonnull %113, i32 noundef %115, ptr noundef nonnull @.str.23)
  %116 = getelementptr inbounds [32 x [512 x i8]], ptr %108, i64 0, i64 %indvars.iv68
  %117 = getelementptr inbounds [32 x i32], ptr %109, i64 0, i64 %indvars.iv68
  %118 = load i32, ptr %117, align 4, !tbaa !25
  call void @hex_log(ptr noundef nonnull %116, i32 noundef %118, ptr noundef nonnull @.str.24)
  %indvars.iv.next69 = add nuw nsw i64 %indvars.iv68, 1
  %119 = load ptr, ptr %40, align 8, !tbaa !22
  %120 = call i32 @sk_ESWK_num(ptr noundef %119)
  %121 = sext i32 %120 to i64
  %122 = icmp slt i64 %indvars.iv.next69, %121
  br i1 %122, label %110, label %.loopexit, !llvm.loop !34

.loopexit:                                        ; preds = %110, %._crit_edge
  %123 = call i32 (i32, ptr, ...) @xlog(i32 noundef 2, ptr noundef nonnull @.str.25) #5
  %.pr.pre = load ptr, ptr %3, align 8, !tbaa !5
  %.not58 = icmp eq ptr %.pr.pre, null
  br i1 %.not58, label %.thread, label %124

124:                                              ; preds = %.loopexit
  call void @KPTECCKEY_free(ptr noundef nonnull %.pr.pre)
  br label %.thread

.thread:                                          ; preds = %2, %14, %124, %.loopexit
  %.061 = phi i32 [ %15, %124 ], [ %15, %.loopexit ], [ %15, %14 ], [ 0, %2 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #5
  ret i32 %.061
}

declare i32 @PEM_read_bio(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare i32 @ASN1_STRING_length(ptr noundef) local_unnamed_addr #2

declare ptr @ASN1_STRING_get0_data(ptr noundef) local_unnamed_addr #2

declare i32 @OBJ_obj2nid(ptr noundef) local_unnamed_addr #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden ptr @sk_ESWK_value(ptr noundef, i32 noundef) local_unnamed_addr #4

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !10, i64 0}
!12 = !{!"kpt_ecc_key_st", !10, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32}
!13 = !{!14, !10, i64 0}
!14 = !{!"kpt_ecc_wpk_st", !10, i64 0, !7, i64 8, !7, i64 16392, !7, i64 32776, !7, i64 33800, !7, i64 34824, !7, i64 34952, !15, i64 35080, !15, i64 35084, !15, i64 35088, !15, i64 35092}
!15 = !{!"int", !7, i64 0}
!16 = !{!12, !6, i64 8}
!17 = !{!14, !15, i64 35080}
!18 = !{!12, !6, i64 32}
!19 = !{!20, !6, i64 8}
!20 = !{!"wrapping_metadata", !6, i64 0, !6, i64 8, !6, i64 16}
!21 = !{!14, !15, i64 35092}
!22 = !{!20, !6, i64 16}
!23 = !{!24, !6, i64 8}
!24 = !{!"e_swk", !6, i64 0, !6, i64 8}
!25 = !{!15, !15, i64 0}
!26 = !{!24, !6, i64 0}
!27 = distinct !{!27, !28}
!28 = !{!"llvm.loop.mustprogress"}
!29 = !{!12, !6, i64 16}
!30 = !{!14, !15, i64 35088}
!31 = !{!12, !6, i64 24}
!32 = !{!14, !15, i64 35084}
!33 = !{!20, !6, i64 0}
!34 = distinct !{!34, !28}


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